我不知道如何计算这个算法的时间复杂度,我知道嵌套循环是O(n ^ 2)但我不知道如何处理.insert(),我得出了错误的结论是O(n ^ 2 + n log n),但我知道我不能在大O中求和,任何帮助都会受到赞赏。
for i in range(arr_len):
for j in range(arr_len):
if (i == arr[j]):
max_bin_heap.insert(//whatever) //O(log n)
答案 0 :(得分:5)
乍一看,由于内部O(n*n*logn)
循环内有两个嵌套循环和O(logn)
操作max_bin_heap.insert call
,大多数人会认为这是for
。但是,它不是!注意if (i == arr[j])
条件。对于内部j
循环中的每个for
,i
的最多一个值将等于arr[j]
,因此两个for
循环不会导致n^2
1}} max_bin_heap.insert call
的调用,但只有n
。由于存在n^2
个比较且最多n*logn
个堆操作,因此总复杂度为O(n*logn + n*n) = O(n^2)
。