【问题标题】:find complexity for a code查找代码的复杂性
【发布时间】:2013-01-29 18:10:53
【问题描述】:

考虑以下操作以及队列上的入队和出队操作,其中 k 是全局参数

MultiDequeue ( Q )
{
  m=k
  while ( Q is not empty ) and (m > 0 ) 
  {
    Dequeue ( Q )
    m = m −1
  }
}

在最初为空的队列上,一系列 n 个队列操作的最坏情况时间复杂度是多少? (A) Θ (n) (B) Θ (n + k ) (C) Θ (nk )

这不是我的作业,它在我的考试中被问到……n 根据我的说法,它应该是 (n + k)。

它不能是 (n),因为在 while 循环中有一个 and 条件,所以它同时依赖于 n 和 k....并且由于它不是嵌套循环或某个矩阵,所以它不是 (nk).. ..

我以这种方式解决了如果 while (Q is not empty) 而不是 while (Q is not empty) 和 (m > 0) 那么时间复杂度应该是 (n) 如果 m = 4 它应该是n+k 而不是 nk ......这实际上是一个猜测

【问题讨论】:

  • 似乎 GATE 问题...
  • lolz... 不同的教练机构对此给出了不同的答案,顺便说一句,你的 xam 怎么样
  • 我已经通过了 Mtech bt 仍然出现了它...没关系..!!
  • 对你有好处,兄弟......这次关于截止的任何想法
  • 会在30左右..每年都在增加..

标签: c queue analysis time-complexity


【解决方案1】:

无论n Enqueue、Dequeue 还是MultiDequeue 的顺序是原始O(1) 操作的数量Enqueue/Dequeue 都不能超过2*n。所以它是 O(n)。

【讨论】:

  • 我同意。我想出k 总是无关紧要的,因为它在n 之外没有任何影响。对于任意大的k 和固定的n,则忽略k-n,只留下n+n,因此推导到最坏情况下为2*n,因此为O(n)。
【解决方案2】:

队列最初是空的,所以while循环的条件永远不会为真,所以时间复杂度为Theta(n)。 或者其他方式,如果只执行入队和出队操作,那么它也将是 Theta(n)(n 插入和 n 删除)。

【讨论】:

    【解决方案3】:

    答案是 C。在最坏的情况下,您将执行 n 次入队操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-05
      • 1970-01-01
      相关资源
      最近更新 更多