免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2591 | 回复: 3
打印 上一主题 下一主题

公共子表达式寻找问题 [复制链接]

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:53:17
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-02-16 14:51 |只看该作者 |倒序浏览
看算法导论中说,搜索两个图的子图匹配,是个NP完全问题,没有算法解。

我想请问,在编译器实现里,类似下列这种问题,是如何做到的。


x = a + b + c + d + e + f + g + m;
y = 100 + a + b + c + d + e + f + g + n + o + p + q;

在优化时,如何决策和提取 a + b + c + d + e + f + g 这个重复计算的公共表达式。

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
2 [报告]
发表于 2013-02-18 00:10 |只看该作者
作为整体来说,图如果很大,取最大公共子图的确复杂度很高,但对于一个小局部,这个完全可以退化成集合的并,复杂度低

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:53:17
3 [报告]
发表于 2013-02-18 15:47 |只看该作者
举例中简单的单一情况,可以寻找交集不错。但实际场景中似乎依然摆脱不了他是一个多集合寻找最多公子集的这样一个问题。
举个复杂一点点的例子:

P = a + b + c + d + e + f;

Var1 = a+b+c;
Var2 = b+c+d;
Var3 = c+d+e;
Var4 = d+e+f;
Var5 = b+e;

用直观的判断(人类),在P的计算时从中间分开的结果分别保存,再将分开的内部中途结果保存的话,最少可以只计算8次加法(没有证明它是最少的)。

有没有算法解,能找到一个10次加法计算以下的?

论坛徽章:
0
4 [报告]
发表于 2013-05-02 14:11 |只看该作者
公共子表达式合并,有多种方式实现,这个在做局部优化时就删掉了。
一般可以用用dag(有向无环图)来做局部优化,效果十分明显,这种表达式几乎都可以优化掉。
LZ找本编译原理教材,看里面的dag章节都有叙述。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP