【问题标题】:What is the running time of the translation of infix to postfix using queue and stack?使用队列和堆栈将中缀转换为后缀的运行时间是多少?
【发布时间】:2011-03-14 22:12:00
【问题描述】:

在 C++ 中... 我知道队列和堆栈的各个函数的时间复杂度,但是我不知道同时使用队列和堆栈的 infixToPostfix 函数的时间复杂度是多少......我当然是一个初学者程序员,而且我我很困惑。

【问题讨论】:

  • 如果这是家庭作业,请相应地标记它。
  • 你处理单个项目的次数是否会随着其他项目的数量而变化,如果是,如何变化?
  • 嗯,我不确定。两种方式的运行时间是多少?谢谢。

标签: c++ algorithm data-structures complexity-theory big-o


【解决方案1】:

我假设使用堆栈和队列从中缀转换为后缀是Dijkstra's shunting-yard algorithm。衡量复杂性的一种方法是考虑完成了多少次推送和弹出:

  • 每个数字只被推送一次,并且只被弹出一次。
  • 每个运算符只被推送一次,并且只被弹出一次。
  • 每个令牌都从令牌队列中出队一次。
  • 每个中间结果只被推送一次,并且只被弹出一次。

如果你的字符串长度为 n,那么它有 O(n) 个数字和 O(n) 个运算符,因此前三个组完成的工作量总计为 O(n)。要分析最后一组,请注意每个中间值来自将两个较早的值组合在一起。如果原始输入中总共有 O(n) 个数字,这意味着可以产生 O(n) 个值作为中介。因此,总运行时间为 O(n)。

从后缀转换为中缀可以类似地显示为使用上述参数在 O(n) 时间内运行。

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 2013-11-08
    • 2015-09-12
    • 2015-04-19
    • 2015-09-13
    • 1970-01-01
    • 2013-03-28
    • 1970-01-01
    • 2012-09-22
    • 1970-01-01
    相关资源
    最近更新 更多