Не пытайтесь делать это на Java, просто попробуйте сделать это в псевдокоде.
В первом вопросе у вас есть два списка целых чисел; два списка номеров. Если нет других правил, мы можем предположить, что оба списка имеют длину около n элементов.
Вы прокладываете путь через один из списков и делаете что-то для каждого числа в нем. Если n чисел, это n шагов. Для каждого из этих n шагов вы говорите: «У другого списка есть этот номер?»
Чтобы проверить, есть ли в списке номер, наихудший случай - это не значит, что вам нужно проверить каждый элемент в списке, чтобы узнать. Это также n шагов, если второй список может быть примерно таким же большим, как первый.
Составляя их вместе: Просматривая список из n элементов и делая n вещей по каждому предмету.
Дайте мне знать, что вы думаете, что подходит, и после этого я отредактирую этот ответ.
Для второго фрагмента кода разделите его.
Прежде всего, вы создаете HashSet, используя все элементы ввода. Сколько времени требуется, чтобы вставить один элемент в HashSet? Если вы вставляете n элементов, умножьте время на одну вставку на n.
Второе, что происходит, это новый ArrayList. Проверка API, чтобы быть уверенным в том, что он делает: http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html#ArrayList(java.util.Collection)
Это создает ArrayList, используя все элементы коллекции HashSet. Сколько времени требуется, чтобы вставить в список массивов? Умножьте это на количество элементов (n), чтобы получить ответ.
Поскольку это происходит как отдельные шаги, это разные вещи. Какая бы ни была более высокая сложность большого О, является доминирующей, и вы можете игнорировать другую. Если они оба имеют одинаковую сложность с большими O, это ответ; вы можете его игнорировать, так как O (2n) имеет ту же сложность, что и O (n); константы (например, 2x) теряются.
Посмотрите на источник, если вы не можете затем подавать огромные списки и измерять время (по крайней мере, для временной сложности). Есть инструменты, которые отслеживают использование кучи/стека, одна из самых простых построена в jdk «jconsole», расположенной в bin directory – Palcente
Вы знаете, как вычислить сложность O каждого из них? Если да, то сравнение их должно быть довольно простым. Если вы этого не сделаете, то, пожалуйста, отредактируйте свой вопрос, чтобы отразить это, потому что формулировка, кажется, предполагает, что вы это делаете. Я не уверен, какой вопрос на самом деле. – yshavit
@Palcente Я всегда думал, что сложность алгоритма - это вещь, связанная с какой-то теорией, а не с практикой. – JohnWinter