从左到右和从右到左的反向抛光算法有什么区别

时间:2019-12-20 05:19:30

标签: algorithm

有一种特殊的数学符号,称为波兰符号,该数学表达式中的运算符遵循其操作数,如下所示,

1 3 +

上面的表达式等于1 + 3

此符号模式由编译器使用。

当我浏览维基百科时,我发现有两种使用堆栈数据结构实现此算法的方法。

1.) **left to right**
2.) **right to left**

很明显,我了解了使用该机制的从左到右算法

  for each token in the postfix expression:
    if token is an operator:
      operand_2 ← pop from the stack
      operand_1 ← pop from the stack
      result ← evaluate token with operand_1 and operand_2
      push result back onto the stack
   else if token is an operand:
      push token onto the stack
  result ← pop from the stack

在这里,使用了一个堆栈,当找到and运算符时,它仅存储操作数,它弹出操作数并根据运算符计算它们并推入结果。但是,当谈到从右到左算法时,很难理解它是如何工作的,任何人都可以解释以下从右到左算法及其区别。

    for each token in the reversed postfix expression:
       if token is an operator:
          push token onto the operator stack
          pending_operand ← False
       else if token is an operand:
          operand ← token
          if pending_operand is True:
            while the operand stack is not empty:
              operand_1 ← pop from the operand stack
              operator ← pop from the operator stack
              operand ← evaluate operator with operand_1 and operand
          push operand onto the operand stack
          pending_operand ← True
       result ← pop from the operand stack

据我了解,它使用两个堆栈,一个用于操作符,另一个用于操作数。就是这样。

0 个答案:

没有答案