假设我有一个涉及加法、减法和乘法的表达式。我知道假设交换性、结合性、分布性等是安全的,并且希望自动生成一个涉及更少操作的更简单的表达式。这个问题的所有有趣的变体都是 NP 完备的,但是是否存在在实践中运行良好的现有工具或算法?
作为基线,目前我正在使用 Mathematica 的 FullSimplify 命令,然后对结果运行公共子表达式消除。不幸的是,结果甚至不是最小的(它错过了明显的分配律简化),如果有一个可以在 DAG 上原生工作的工具会更好。
假设我有一个涉及加法、减法和乘法的表达式。我知道假设交换性、结合性、分布性等是安全的,并且希望自动生成一个涉及更少操作的更简单的表达式。这个问题的所有有趣的变体都是 NP 完备的,但是是否存在在实践中运行良好的现有工具或算法?
作为基线,目前我正在使用 Mathematica 的 FullSimplify 命令,然后对结果运行公共子表达式消除。不幸的是,结果甚至不是最小的(它错过了明显的分配律简化),如果有一个可以在 DAG 上原生工作的工具会更好。
这是编译器构建者在尝试优化代码时面临的经典问题。例如,通用子表达式消除 (CSE) 是一种方法。我建议您查看描述编译器构建的书籍。