再次提升“华容道自动求解”程序效率
2005-02-20 17:02
281 查看
自从《华容道与数据结构》系列文章写完后,有很多热心的朋友提出了宝贵的意见,使得华容道程序的运行效率不断提升。在这里特别感谢“智能算法爱好者”与sumtec,给程序提出了很多宝贵的意见。
Sumtec指出:“AVLTree是否可以用HashTable来替代,毕竟你的目的不是要排序,而是要检验是否容易产生重复。从纯粹的理论上来说,HashTable在这方面的性能消耗应该比AVLTree要好一些,因为AVLTree的复杂度至少是O(Log2(x))级别的,而HashTable则接近于O(C)级别的。”,因此我将程序重新进行了调整,目的是:在不考虑内存使用的情况下再次提高系统执行效率。
我的修改包括两部分:1、用HashTable取代AVLTree,设计并实现自己的HashCode算法。2、修改华容道布局表示方式,从原来的4字节表示改为8字节表示,这么做可以省略掉原有程序中的排序操作。
经过修改后,每个节点平均比较3~5次便可知道是否有重复,接近于O(C)级别。Int64的布局表示省掉了排序,效率进一步提升。但内存占用总体要增加(以内存换效率)。
现在,原有系统中第四个布局的求解时间从最初的6.67秒降到了消除Execption影响后的1.55秒,现在又降到了使用HashTable的0.90秒。贴张图上来:
源代码我会随后放上来,并且进一步完善《华容道与数据结构》系列,这次的重点放在HashTable上面。
Sumtec指出:“AVLTree是否可以用HashTable来替代,毕竟你的目的不是要排序,而是要检验是否容易产生重复。从纯粹的理论上来说,HashTable在这方面的性能消耗应该比AVLTree要好一些,因为AVLTree的复杂度至少是O(Log2(x))级别的,而HashTable则接近于O(C)级别的。”,因此我将程序重新进行了调整,目的是:在不考虑内存使用的情况下再次提高系统执行效率。
我的修改包括两部分:1、用HashTable取代AVLTree,设计并实现自己的HashCode算法。2、修改华容道布局表示方式,从原来的4字节表示改为8字节表示,这么做可以省略掉原有程序中的排序操作。
经过修改后,每个节点平均比较3~5次便可知道是否有重复,接近于O(C)级别。Int64的布局表示省掉了排序,效率进一步提升。但内存占用总体要增加(以内存换效率)。
现在,原有系统中第四个布局的求解时间从最初的6.67秒降到了消除Execption影响后的1.55秒,现在又降到了使用HashTable的0.90秒。贴张图上来:
源代码我会随后放上来,并且进一步完善《华容道与数据结构》系列,这次的重点放在HashTable上面。
相关文章推荐
- Atitit.hybrid混合型应用 浏览器插件,控件的实现方式 浏览器运行本地程序的解决方案大的总结---提升用户体验and开发效率..
- 开发 | 提升 1 倍运行效率!有了这些技巧,你的小程序也能快如闪电
- 杯子倒水问题自动求解程序(Javascript实现)
- js实现杯子倒水问题自动求解程序
- 优化sql语句,提升程序执行效率
- 使用优化器来提升Python程序的执行效率的教程
- 重构华容道自动求解
- Atitit.hybrid混合型应用 浏览器插件,控件的实现方式 浏览器运行本地程序的解决方案大的总结---提升用户体验and开发效率..
- 通过计算python执行时间,来提升程序的运行效率
- 升级ORB_SLAM2依赖程序以提升效率
- map-reduce程序提升处理效率的方式
- 华容道自动求解 java版
- Win7删除exe程序文件,刷新后重现,无法再次删除,几分钟后自动消失的解决办法
- 探究数组排序提升Python程序的循环的运行效率的原因
- 4X4数字拼图的自动求解程序下载,手玩技巧及数学原理
- 全面提升你的程序效率 之细说 bitmapdata
- 正在编写推箱子游戏的自动求解程序
- js实现杯子倒水问题自动求解程序
- 求解:抓取程序用了 仍报错“尝试自动重定向的次数太多”
- 全面提升你的程序效率之细说 bitmapdata