为了好玩,我正在玩一个程序来解决24 game,我试图找到一种方法来避免在检查多个解决方案时显示等效表达式。
例如,给定数字6, 6, 6, 6
,算法可以(迭代地或递归地)生成几个等价表达式。
例如:((6 + 6) + 6) + 6
,(6 + 6) + (6 + 6)
和其他人,因为他们都意味着"将四个六个加在一起"。
显然,在处理所有四个算术操作数时,事情会变得更有趣
例如,表达式A * B + C * D
和C * D + B * A
也是等效的。
另一个可能更难检测的案例是A - B - C - D
vs A - (C + B + D)
到目前为止的想法:
答案 0 :(得分:1)
在生成导致24的所有可能表达式之后,我将添加一个规范化步骤。此步骤的目标是删除多余的括号。
关于如何remove redundant parenthesis is given here的一个很好的解释。之后,您只需要一组所有规范化的表达式。