首先不敢苟同楼主对 Python 性能的评价,按楼主的标准,汇编才是最好的语言。
其次看到楼上不少人以换语言和 IDE跑同一个O(n2)算法而得到的运算时间优化来满足优越感,表示无法理解其中乐趣。
对于质数筛选,已经有很多前人做了很多算法效率上的优化,这里话不多说,给出链接 Sieve of Eratosthenes , Sieve of Atkin,talk is cheap.
这里用XXXXXX作为统一平台,消去了IDE环境和硬件配置的影响,来比较楼主的O(n2)方法和一种以空间换时间的方法的运行效率:
1.简单算法:
<code>int whichPrime(int num){ if(num<4)return num-1; int numprime="2;" for(int i="4;i<=num;i++){" flag="1;" j="2;j*j<=i;j++){" if((i%j)="=0){" break; } numprime+="flag;" return numprime; < code></4)return></code>
测试结果 0.014957 S:
2.优化算法:
<code>int whichPrime(int num){ if(num<4)return num-1; vector<int> list (num-1,1); for(int i=2;i*i<=num;i++){ if(list[i-2]){ for(int j="i*i;j<=num;j+=i){" list[j-2]="0;" } int numprime="0;" i="0;i<list.size();i++)" numprime+="list[i];" return numprime; < code></=num;i++){></4)return></code>
测试结果 0.001196 S:
快了十倍以上,当然这里并不是说用空间换时间的思路在任何情况下都可取,而且这个算法也远非最优解。只是提醒初学 coding 的 kcer,工具和语言在一定程度上都是浮云,“没有低级的法术,只有低级的法师”——《塔希里亚故事集》。
时段 | 个数 |
---|---|
{{f.startingTime}}点 - {{f.endTime}}点 | {{f.fileCount}} |