Два алгоритма работают за O(n)
Меня срезали на тесте на этом вопросе, но я никак не могу вникнуть в суть.
Вопрос звучал так
Два алгоритма работают за O(n) времени. Выберите верное утверждение
1 - Оба алгоритма работают за одинаковое количество секунд 2 - Либо первый алгоритм работает всегда быстрее, либо второй 3 - Иногда первый может отработать быстрее, иногда второй, иногда одинаково
Я ответил 1 - и оказался не прав
В условии ничего не сказано ни про комплектацию, ни про процессы.
O(n) - это же линейная асимптотика. Пока все элементы циклом не переберутся ничего не поменяется
Ответы (2 шт):
Линейная сложность означает что алгоритм работает за время примерно равное CN. Время работы двух разных алгоритмов будет примерно C1 * N, C2 * N. C1 и C2 - положительные константы зависящие от алгоритма и обрудования.
Ответ 1 не подходит: если C1 и C2 будут заметно разные, времена работы тоже будут разные.
Ответ 2 не подходит если C1 и С2 примерно равны, то вы не можете сказать что один алгоритм быстрее другого.
Ответ 3 тоже не подходит. Вернее он подходит, но только если C1 и С2 примерно равны. Тогда алгоритмы будут работать примерно одно время. А так как "примерно" то возможно что "Иногда первый может отработать быстрее, иногда второй, иногда одинаково".
Что в голове у автора задачи было не скажу. Возможно имелся в виду третий ответ - в нём одном есть слово "может".
Я за 3-й вариант.
- 1 - Оба алгоритма работают за одинаковое количество секунд - у нас нет такой гарантии,
O(n)гарантирует только что время работы обоих алгоритмов линейно зависит отn, но не гарантирует, что это время одинаковое - 2 - Либо первый алгоритм работает всегда быстрее, либо второй - опять же
O(n)не гарантирует, что время конкретное и не говорит ничего о коэффициенте, на который нужно умножатьn, и время работы алгоритма может зависеть от данных, ничто не мешает тому, чтобы на одних данных работал быстрее первый алгоритм, а на каких-то другой, при этом они оба всё-равно будутO(n) - 3 - Иногда первый может отработать быстрее, иногда второй, иногда одинаково - а вот это утверждение как-раз не накладывает никаких ограничений и оно, кстати, могло бы быть справедливо для любого
O, если проnтут ничего не говорится, я ставлю на этот вариант. Вот если бы говорилось, что при увеличенииnодин из алгоритмов оказывался бы строго быстрее другого, то тут можно было бы сказать, чтоOу этих алгоритмов должно было быть разным (например,O(n)иO(n^2)).