Вычисление временной сложности следующего кода - PullRequest
0 голосов
/ 15 апреля 2020

Может ли кто-нибудь помочь с поиском сложности следующего кода?

def mystery(n):
    sum = 0
    if n % 2 == 0:
        for i in range(len(n + 10000)): 
            sum += 1

    elif n % 3 == 0:
        i, j = 0, 0
        while i <= n:
            while j <= n:
                sum += j - 1
                j += 1
            i += 1
    else:
        sum = n**3

Будет ли временная сложность следующего кода O (n ^ 2), поскольку в худшем случае оператор elif будет выполняются, поэтому внешнее while l oop будет выполнено n раз, а вложенное в то время как l oop будет выполнено n раз один раз только потому, что мы никогда не сбрасываем j? Следовательно, у нас будет O (n ^ 2 + n), а поскольку главный член равен n ^ 2, сложность будет O (n ^ 2)?

1 Ответ

0 голосов
/ 15 апреля 2020

В секции elif:

  • , когда i = 0, while j <= n: l oop равно O (n).
  • , когда i > 0, j = n + 1, поэтому while j <= n: l oop равно O (1).

Итак, секция elif равна O (n) + O (n * 1) = O (n + n) = O (n).

...