假设我有一种编程语言,我可以写: x = f(g(1),h(1))在这种情况下,有向无环图将显示计算的依赖关系,如电子表格(假设非递归表达式):
1
| \
g h
\ /
f
这是一个简单的例子,但尝试在DAG中“压缩”更复杂的表达式会变得很有趣。这里的目标是根据依赖关系优化重新计算的次数。
有哪些算法和论文可以解决这个问题?
答案 0 :(得分:4)
更具体一点,它是Local Common Subexpression Elimination。 Dragon Book中给出了一种算法,“6.1.2构造DAG的值数法”
答案 1 :(得分:3)
编译器编写者调用此问题common subexpression elimination。每本编制者的教科书都值得讨论这个主题。
如果没有控制流程,您应该可以执行类似于hash consing的简单操作。