#!/usr/bin/env python3 def func(data): copy = list(data) # O(N) copy.sort() # O(N Log N) for i in range(len(data) - 1): # O(N) if copy[i] == copy[i+1]: # O(1) return False # O(1) return True # O(1) func([1, 2, 3, 4 ,5])
Как пишут в учебнике, его итоговая сложность O(N Log N). Но мне это не понятно, ведь нужно сложить сложности каждой из строк:
O(N) + O(N Log N) + O(N) + O(1) + O(1) + O(1)
Разве нет?
Я так думаю потому что например в таких конструкциях всегда сложности перемножаюся:
for i in range(3): # O(N) for j in range(3): # O(N)
O(N) + O(N) = O(N**2)