Python解决算法问题,一种只要10多秒,另一种要10分钟?为什么?
问题引发
发问题者:为什么别人Python写的算法解题只要10多秒,我的要10分钟?
Dive into Python 第八章的例子
解决一个问题:
HAWAII + IDAHO + IOWA + OHIO == STATES
510199 + 98153 + 9301 + 3593 == 621246
H = 5,A = 1,W = 0,I = 9,D = 8,O = 3,S = 6,T = 2,E = 4
嗨喽:正在学习python的小伙伴或者打算学习的,可以私信小编“01”领取资料!
书中的算法:
我写的算法:
10 分钟是在 Node.js 8.3 中进行的测试;Chrome 要 15 分钟。
这究竟是算法的差异,还是语言的差异?我的电脑 CPU 是 E3 1230 v5 (3.4GHz)。
问题解答:
算法有问题
计算排列的方式太低效,在1e9当中不重复的数字只有3.63e6个。所以白瞎计算了几百倍。光那么多数字都toString一下就要几分钟了。托JS的福,10分钟算快的了。
正常来说,js比python快10倍以上,不过在这个例子里,因为python用了itertools这种牛逼库,所以只比js慢1、2倍。也就是说,js应该5秒就算好了。
【补充:这个题目其实还包含了一些额外条件(比如S = H + 1)可以大幅度降低计算量,基本上应该100毫秒之内。】
如果是你,你会做出如何解释?
最后多说一句,小编是一名python开发工程师,这里有我自己整理了一套最新的python系统学习教程,包括从基础的python脚本到web开发、爬虫、数据分析、数据可视化、机器学习等。想要这些资料的可以关注小编,并在后台私信小编:“01”即可领取