Этот вопрос не так глуп, как может показаться. По крайней мере, теоретически, что-то вроде O (1 / n ) вполне разумно, когда мы берем математическое определение записи Big O :
Теперь вы можете легко заменить g ( x ) на 1 / x ... очевидно, что приведенное выше определение все еще верно для некоторого f .
В целях оценки асимптотического роста во время выполнения это менее жизнеспособно ... значимый алгоритм не может работать быстрее при увеличении входных данных. Конечно, вы можете построить произвольный алгоритм для выполнения этого, например, следующий:
def get_faster(list):
how_long = (1 / len(list)) * 100000
sleep(how_long)
Очевидно, что эта функция тратит меньше времени по мере увеличения размера ввода ... по крайней мере до некоторого ограничения, установленного аппаратным обеспечением (точность чисел, минимум времени, которое sleep
может ждать, время для обработки аргументов и т. Д.): тогда этот предел будет постоянной нижней границей, так что на самом деле вышеупомянутая функция все еще имеет время выполнения O (1).
Но являются на самом деле реальными алгоритмами, где время выполнения может уменьшаться (по крайней мере, частично) при увеличении размера ввода. Обратите внимание, что эти алгоритмы не будут демонстрировать поведение во время выполнения ниже O (1). Тем не менее, они интересные. Например, возьмите очень простой алгоритм поиска текста: Horspool . Здесь ожидаемое время выполнения будет уменьшаться по мере увеличения длины шаблона поиска (но увеличение длины стога сена снова увеличит время выполнения).