временная сложность переменных циклов

1

Я хочу попытаться вычислить O (n) моей программы (в python). есть две проблемы:

1: у меня есть очень базовое знание O (n) [aka: я знаю, что O (n) имеет отношение к времени и вычислениям]

и

2: все циклы в моей программе не настроены на какое-либо конкретное значение. они основаны на входных данных.

  • 2
    Это именно то, что N означает в большой записи (то, что вы называете O (n)). N обозначает размер ввода. Это зависит от проблемы. Может быть, вы можете поделиться еще одним контекстом?
  • 3
    Ваша вторая «проблема» не является проблемой, о которой вы бы узнали, если бы решили свою первую проблему. Я думаю, что вы должны сначала пройти некоторое базовое изучение, а затем вернуться, если у вас есть более конкретные вопросы.
Показать ещё 2 комментария
Теги:
algorithm
big-o

2 ответа

4

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), если ожидается, что списки будут иметь одинаковую длину.

  • 0
    Вам просто нужно знать, как долго вызовы функций в вашем цикле принимают и учитывают их. Например, for i in range(n): if i in arr: do something самом деле O (N ^ 2), а не O (N ), поскольку оператор in занимает O (N) времени.
1

Попробуйте это, чтобы начать, затем перейдите в wiki:

Ещё вопросы

Сообщество Overcoder
Наверх
Меню