Я хочу попытаться вычислить O (n) моей программы (в python). есть две проблемы:
1: у меня есть очень базовое знание O (n) [aka: я знаю, что O (n) имеет отношение к времени и вычислениям]
и
2: все циклы в моей программе не настроены на какое-либо конкретное значение. они основаны на входных данных.
n
в O(n)
означает точно размер ввода. Итак, если у меня есть этот код:
def findmax(l):
maybemax = 0
for i in l:
if i > maybemax:
maybemax = i
return maybemax
Тогда я бы сказал, что сложность O(n)
- сколько времени она занимает, пропорциональна размеру ввода (поскольку цикл петли столько раз, сколько длина l
).
Если у меня был
def allbigger(l, m):
for el in l:
for el2 in m:
if el < el2:
return False
return True
то в худшем случае (т.е. когда я возвращаю True
), у меня есть один цикл длины len(l)
и внутри него один из длины len(m)
, поэтому я говорю, что он O(l * m)
или O(n^2)
, если ожидается, что списки будут иметь одинаковую длину.
for i in range(n): if i in arr: do something
самом деле O (N ^ 2), а не O (N ), поскольку оператор in занимает O (N) времени.
Попробуйте это, чтобы начать, затем перейдите в wiki: