自从《华容道与数据结构》系列文章写完后,有很多热心的朋友提出了宝贵的意见,使得华容道程序的运行效率不断提升。在这里特别感谢“智能算法爱好者”与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上面。

转载于:https://www.cnblogs.com/zhenyulu/archive/2005/02/20/106450.html

再次提升“华容道自动求解”程序效率相关推荐

  1. 正在编写推箱子游戏的自动求解程序

    网上搜索了一下,有好多人现成的产品,不少国产的.编写这个程序只是为了回忆一下算法.不能丢了. 自动求解有俩种方案:一个是求最小行走步骤,一个是求最小推箱子数目. 第一种算法简单些,只要将小人推动的四个 ...

  2. 百度ACE智能交通能提升最高30%城市通行效率,刚刚拿下世界互联网大会最高荣誉...

    郭一璞 假装发自 乌镇 量子位 报道 | 公众号 QbitAI 乌镇的世界互联网大会刚刚开始,就传来了智能交通领域的好消息. 百度ACE智能交通,被世界互联网大会评为了世界互联网领先科技成果. 而且, ...

  3. Atitit.提升软件Web应用程序 app性能的方法原理 h5 js java c# php python android .net

    Atitit.提升软件Web应用程序 app性能的方法原理 h5 js java c# php python android .net 1. 提升单例有能力的1 2. 减少工作数量2 2.1. 减少距 ...

  4. dotnet watch+vs code提升asp.net core开发效率

    在园子中,已经又前辈介绍过dotnet watch的用法,但是是基于asp.net core 1.0的较老版本来讲解的,在asp.net core 2.0的今天,部分用法已经不太一样,所以就再写一篇文 ...

  5. Android Studio 2.0:速度提升,极大提高开发效率

    转至:http://android.jobbole.com/82127/ Android Studio 2.0:速度提升,极大提高开发效率 11月24日,在 Android Developer Sum ...

  6. OpenCV程序效率优化方法1

    OpenCV程序效率优化方法 使用指针方法遍历像素点 OpenCV中图像的存储对象为Mat类,该类提供了多种方式访问像素的的值.一般来说分为以at方法类与ptr指针的方式访问,相较之下使用指针ptr的 ...

  7. paddle中的自动求解梯度 : autograd.backward

    简 介: 对于paddle中的autograd.backward进行测试.并对集中常见到的函数进行测试. 关键词: gradient #mermaid-svg-FAf464xhZzlqQIW6 .la ...

  8. JAVA用多线程反而变慢了_Java中使用多线程不能明显提高程序效率的一些原因

    java中使用多线程不能明显提高程序效率的一些原因. 使用多个线程来处理多任务的时候,效率肯定是有提高的.但是必须要慎用,否则容易出现问题. 1.多线程主要是为了充分利用多核cpu,大内存这些资源. ...

  9. excel android 公式,两个超实用的Excel万能公式,瞬间提升你10倍工作效率!

    相信大家在平时的工作中,都会经常有用到公式的需要,但是下面这些公式你用过吗,今天小编就带大家一起看看吧! 1. SUM函数 这个函数不仅在我们学习的过程中会用到,即便到了工作后,也经常需要对各种数据进 ...

最新文章

  1. 2021年大数据ELK(九):使用VSCode测试分词器
  2. 安全公司:苹果iOS10备份功能安全性比iOS9差很多
  3. [转]WebPack 常用功能介绍
  4. linux gnome 桌面,GNOME Linux桌面
  5. centos7挂载nas存储_Geeki说丨浅谈几种存储添加主机映射方式
  6. 原型模式和C++的拷贝构造函数有什么区别
  7. Sublime Text 4设置光标闪烁
  8. 如何选择RabbitMQ和Kafka
  9. 帮助UI设计师缕清思路的GUI模板素材
  10. 13.字符串,结构,联合
  11. DPDK之KNI原理
  12. matlab和keil下如何查找数组最大值的下标(角标)
  13. 贝叶斯(一)先验分布与后验分布
  14. 时序数据预测:Holt-Winters
  15. Openwrt如何添加SD_Card?看这里
  16. CCjump解决:在微信中访问app下载链接提示“已停止访问该网页”
  17. 计算机截图方法,电脑简单又实用的截图方法推荐
  18. 互联网web直播点播平台EasyDSS如何将部分数据从t_lives表迁移到其他数据库?
  19. linux版本市场占有率,2020年5月OS市场占有率报告:Ubuntu和Linux分别占有1.89%和0.97%...
  20. 老博会|2023第九届北京国际老年用品展览会

热门文章

  1. Android实现号码归属地查询
  2. 怎样运用Oracle的BFILE
  3. silverlight 加载大图片进度提示
  4. python实验报告代写_TensorFlow作业代写、代做Python程序语言作业、代写github课程作业、Python实验作业代写...
  5. linux批量执行一个脚本文件,shell脚本示例:批量比较多个文件的内容是否相同...
  6. android点赞刷新列表图片闪烁,RecyclerView使用——有效解决刷新数据错乱,图片闪烁,OOM问题...
  7. 26. GD32F103C8T6入门教程-CAN外设回环测试
  8. Python基础-3内建函数 type() cmp()
  9. pymol怎么做底物口袋表面_汽车表面有划痕怎么办?建议大家这样做,自己动手就解决...
  10. oracle 使用数据泵恢复,oracle 使用数据泵 导出整个db 并恢复