检测等效表达式的算法

时间:2016-05-31 00:06:50

标签: algorithm expression

为了好玩,我正在玩一个程序来解决24 game,我试图找到一种方法来避免在检查多个解决方案时显示等效表达式。

例如,给定数字6, 6, 6, 6,算法可以(迭代地或递归地)生成几个等价表达式。
例如:((6 + 6) + 6) + 6(6 + 6) + (6 + 6)和其他人,因为他们都意味着"将四个六个加在一起"。

显然,在处理所有四个算术操作数时,事情会变得更有趣 例如,表达式A * B + C * DC * D + B * A也是等效的。

另一个可能更难检测的案例是A - B - C - D vs A - (C + B + D)

到目前为止的想法:

  1. 仅在需要时使用括号(通过跟踪优先级和关联性)。
  2. 订购操作数以便于比较。

1 个答案:

答案 0 :(得分:1)

在生成导致24的所有可能表达式之后,我将添加一个规范化步骤。此步骤的目标是删除多余的括号。

关于如何remove redundant parenthesis is given here的一个很好的解释。之后,您只需要一组所有规范化的表达式。