可以使用着名的shunting-yard algorithm将中缀表达式(例如1 + 2 * 3
)转换为后缀表达式(例如1 2 2 * +
)。分流码算法需要一个堆栈来存储即将移动的元素。
是否可以预先估计在线性时间和常量内存中将特定输入转换为后缀形式所需的堆栈长度?
答案 0 :(得分:3)
不确定。 shunting-yard algorithm仅将运算符(包括括号)推入堆栈,因此一阶近似是表达式中运算符的数量。通过更多智能,您可以扫描表达式并查找关联性和分组。但是当你完成时,你可能已经编写了一个基于堆栈的算法来确定表达式所需的堆栈大小的最佳估计值,并且会使你的执行成本增加一倍。
答案 1 :(得分:0)
在旧的HP-45计算器上,我们总是扫描最深嵌套的括号,并在那里开始评估。这应该是输入中N个令牌的快速O(N)算法。
在实践中,创建一个吹掉HP-45的4-up堆栈的表达式具有挑战性。