【问题标题】:ambiguity of complexity analysis of for loop containing O(1) operations包含 O(1) 操作的 for 循环的复杂性分析的歧义
【发布时间】:2020-10-23 16:47:49
【问题描述】:

我一直在做一个程序,我们在其中弹出队列的元素,直到队列变空。问题是我们知道弹出操作的时间复杂度是 O(1) 并且它在循环中运行.所以我们可以说我们有一个循环运行 O(1) 操作直到队列不为空。 假设 q 有一些元素,比如 1,2,3,4,5,6

   while(!q->empty())
   {
   cout<<q->front()<<" ";
   q->pop();
   }

我在 geeksforgeeks 上读到过,如果循环运行了固定次数并在其中运行 O(1) 操作..那么该循环被认为具有 O(1) 的时间复杂度。

是这样说的:

运行恒定次数的循环或递归也被视为 O(1)。例如下面的循环是 O(1)。

    // Here c is a constant   
    for (int i = 1; i <= c; i++) {  
    // some O(1) expressions
    }

所以队列的 while 循环也有 O(1) 或 O(n) 或者我弄错了。请帮助我消除歧义。

geeksforgeeks 文章的链接是:

https://www.geeksforgeeks.org/analysis-of-algorithms-set-4-analysis-of-loops/

【问题讨论】:

    标签: performance for-loop queue time-complexity analytics


    【解决方案1】:

    您可以这样看:如果您的算法中的步骤数不取决于您的数据大小n - 它具有恒定的复杂性。

    如果您必须为每个n 做一次“某事” - 您有一个线性复杂度,或O(n)。您的队列示例就是这种情况。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-01
      • 1970-01-01
      • 2014-11-27
      • 2019-12-06
      • 1970-01-01
      • 2022-08-12
      相关资源
      最近更新 更多