Я готовлюсь к техническому собеседованию, и у меня проблема с вычислением временной сложности моего алгоритма. Я знаю, что сложность времени для двух вложенных друг в друга циклов равна O (n ^ 2), но что, если вложенный l oop продолжает родительский элемент l oop. Примерно так:
for i in range(n):
for j in range(i+1,n):
for k in range(j+1,n):
for q in range(k+1,n):
print("Hello")
Сложность по времени для этого кода n ^ 4 или что-то еще? Я написал программу для подсчета каждой операции и придумал 2 ^ n, но понятия не имею, как добраться до 2 ^ n из 4 вложенных циклов.
Буду признателен, если вы объясните свое решение.
Вот программа, которую я написал для подсчета количества операций:
def count_operations(n):
number_of_operations = 1
for i in range(n):
number_of_operations += 1
for j in range(i + 1, n):
number_of_operations += 1
for k in range(j + 1, n):
number_of_operations += 1
for q in range(k + 1, n):
number_of_operations += 1
print(number_of_operations)
count_operations(1)
count_operations(2)
count_operations(3)
count_operations(4)
count_operations(5)
count_operations(6)
count_operations(7)
count_operations(8)
output
n: 1 , number of operations: 2
n: 2 , number of operations: 4
n: 3 , number of operations: 8
n: 4 , number of operations: 16
n: 5 , number of operations: 31
n: 6 , number of operations: 57
n: 7 , number of operations: 99
n: 8 , number of operations: 163