【发布时间】: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