擅长:python、mysql、java
<p>0.6s与2.6s的差别比4x小。是不是太大了?在</p>
<p>没有足够的信息来回答。一个4倍的差异肯定是由算法错误引起的……但是如果不进行不同大小的测试,真的没有办法分辨。在</p>
<p>比如说,如果在1000时只有1.2倍的差异,100000时只有4倍的差异,1000000时只有12倍的差异,那么你的算法复杂度很可能会更差,这意味着你很可能出了问题,这是你需要解决的问题。在</p>
<p>另一方面,如果这三种尺寸都相差4倍,那么在你的开销中就有一个更大的常数乘数。很可能是因为您已经在Python中运行了一个内部循环,而(CPython)stdlib版本使用的是在C中执行相同循环的<code>_heapq</code>加速器模块,如<a href="https://stackoverflow.com/a/26349580/908494">Martijn Pieters' answer</a>中所述。所以,你没做错什么。你也许可以进行一些微优化,但最终你必须要么用C重写代码的核心,要么在JIT优化的解释器中运行它,以接近stdlib的性能。实际上,如果你只是为了理解算法而写这篇文章,你不需要这么做。在</p>
<p>另外,您可能需要尝试在PyPy中运行比较。它的stdlib大部分是用纯Python编写的,没有特殊的优化,但是经过优化的JIT编译器使它几乎与CPython中的本机C代码一样快。同样的JIT也会应用到你的代码中,这意味着你未优化的代码通常也和CPython中的本机C代码一样。当然,这并不能保证这一点,也不能改变这样一个事实:如果你想测试算法复杂度,你总是需要以不同的大小进行测试。在</p>