【问题标题】:Asymptotic Analysis of Reversing a Queue倒排队列的渐近分析
【发布时间】:2018-10-21 07:46:49
【问题描述】:
    void reverseQueue(queue<int>& Queue)
    {
         stack<int> Stack;
         while (!Queue.empty())
         {
             Stack.push(Queue.front());
             Queue.pop();
         }
         while (!Stack.empty())
         {
             Queue.push(Stack.top());
             Stack.pop();
         }
    }

我想知道这个函数的 Big-O 或 Big-Theta 表示法是什么,如果我们用一个包含 n 个元素的 Queue 来调用它。会不会是 O(n^2),因为我们两次推送和弹出 n 个元素,以便以相反的顺序将其从堆栈移回队列?感谢您的帮助。

【问题讨论】:

  • 当元素数量翻倍时会发生什么?尝试用五个元素在纸上(或在你的手指上),然后用十个元素。操作次数会发生什么变化?是四倍吗?

标签: c++ stack queue big-o asymptotic-complexity


【解决方案1】:

这个函数的大 O 是 O(n),因为你只遍历队列两次。从理论上讲,如果您执行 K 次也是如此,其中 K 是一个常数,并且它不会随着队列大小 n 而变化。例如,O(n^2) 是当您在另一个循环内部有一个循环,因此您正在遍历队列 n*n 次。

您还可以检查: Which algorithm is faster O(N) or O(2N)?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-28
    • 2021-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-28
    • 2018-11-03
    • 2010-12-05
    相关资源
    最近更新 更多