前言
之前一篇文章中介绍的使用Python写的Tchisla求解器Python——Tchisla求解器(暴力搜索法)在我实际使用中有比较大的缺陷,首先是太慢了,对于每日一题中四位数的目标数字,往往搜索数个小时都找不完1~9的全部最优解,尤其是5和7这两最慢。其次是内存占用太多,跑一些大数字的搜索,能用掉上百G的内存。使用Python编写不好控制内存使用,因为GIL也没办法做多线程性能加速,所以后面我又用C++重写了一个版本,思路还是一样的暴力搜索,但是优化了内存使用并加上了多线程并发搜索能力。
不得不说Python和C++比起来,开发这种小程序的效率是高到不知道哪里去了,用Python几个小时写完的东西,用C++愣是断断续续写了小半周。不过付出总是有回报的,C++版本的TchislaSlover内存占用小了很多,性能提升就更明显了,有1000%+,如图,同样是搜索1234的1~9解法,上图为Python版本,下图为C++版本:
可以发现Python版本运行了四十多分钟,C++版本四分钟不到就跑完了,速度快了很多。
用法
C++程序想要修改一些参数不像Python脚本一样手动改下脚本重新运行就行了,因此个给C++版本还加了个了CLI,用的argh库实现了参数的解析,用法如图所示:
C++程序需要自己编译,代码分为了好几个文件不方便贴,就放在github了,链接如下:https://github.com/Eyizoha/TchislaSolver
项目里有Makefile,在linux中使用make指令直接编译就行了,windows中可以用vs自己建个项目导入文件编译。