Временная сложность среза константы в цикле - PullRequest
0 голосов
/ 20 апреля 2020

Какова будет сложность кода ниже?

На мой взгляд, это будет O(N).

Даже если у нас есть срезы массива внутри для l oop, который принимает O(K) в python, он всегда будет работать в течение постоянного времени, т.е. равен pairLength. Так, например, если длина строки, то есть st равна 6, а pairLength равна 3, общая сумма, которую она запустит, будет 6*3=12 раз. Точно так же, если у нас есть st размера 12, он будет выполняться 36 раз. Здесь путаница, мы могли бы также сказать это как O(N*M), но M всегда постоянен (однажды установленный, т.е. pairLength), поэтому мы можем рассматривать его как O(N). Правильно ли это?

edit: Предположим, что pairLength постоянно и равно 3 постоянно. Тогда сложность будет O (N)?

def writeAllCombinations(st, pairLength):
    for i in range((len(st)-pairLength)+1):
        print(st[i:i+pairLength]) # could also be done using inner loops and concat

# calling function
writeAllCombinations("HelloWorld", 3)

1 Ответ

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

Предполагая, что pairLength является константой, len (st) равно N. Очевидно, что для l oop выполняется N - pairLength + 1 times = O (N) время.

На каждом шаге для l oop, предполагая, что st является списком, тогда st[i:i+pairLength] занимает O (1) время. print в этом случае также можно предположить время O (1).

Следовательно, можно сделать вывод, что функция занимает O (N) времени.

...