【问题标题】:What is the time complexity of the following procedure以下过程的时间复杂度是多少
【发布时间】:2022-01-01 15:34:57
【问题描述】:

以下过程的时间复杂度是多少

for ???? ← ????/2 to ???? do
    ???? ← 2
    while (???? < ????) do
        ???? ← ???? + ????/2
        ???? ← ???? ∗ 2
    end while
end for

【问题讨论】:

  • 你认为它是什么,为什么?外循环多久执行一次?内循环在外循环的一次迭代中迭代的频率。这很容易确定,因为内部循环的迭代次数仅取决于n,而不取决于i。而k 似乎未被使用,因此无关紧要。
  • 这似乎是一道作业题。可以问作业问题,但您应该先阅读this。这不是为您做作业的网站...
  • @MarkDickinson 不,我没有漏掉一行,你是对的,因为我认为 k 似乎没有被使用。
  • 我是O(n log n)

标签: algorithm math pseudocode


【解决方案1】:

让我们将内部循环重写为for,我们可以看到时间:

for (int i = n / 2; i < n; ++i)     # outer:     n / 2 limes
  for (int j = 2; j < n; j *= 2) {  # inner:     log(n, 2) times
    k += n / 2;                     # combined: (n / 2) * log(n, 2) times

    ...
  } 

如你所见,

T(n) = (n / 2) * log(n, 2)

时间复杂度是

O(T(n)) = O((n / 2) * log(n, 2)) = 
        = O(n * log(n) / log(2)) =
        = O(n * log(n))  

最后,我们有时间复杂度

O(T(n)) = O(n * log(n)) 

【讨论】:

    猜你喜欢
    • 2020-07-30
    • 1970-01-01
    • 2014-01-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多