双嵌套循环函数中O(log n)的时间复杂度

时间:2018-02-08 11:53:07

标签: algorithm time-complexity big-o complexity-theory

我不知道如何计算这个算法的时间复杂度,我知道嵌套循环是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)

1 个答案:

答案 0 :(得分:5)

乍一看,由于内部O(n*n*logn)循环内有两个嵌套循环和O(logn)操作max_bin_heap.insert call,大多数人会认为这是for。但是,它不是!注意if (i == arr[j])条件。对于内部j循环中的每个fori的最多一个值将等于arr[j],因此两个for循环不会导致n^2 1}} max_bin_heap.insert call的调用,但只有n。由于存在n^2个比较且最多n*logn个堆操作,因此总复杂度为O(n*logn + n*n) = O(n^2)