10年6个月前修改于 10年6个月前IP:美国
821361
10楼

首先不敢苟同楼主对 Python 性能的评价,按楼主的标准,汇编才是最好的语言。

其次看到楼上不少人以换语言和 IDE跑同一个O(n2)算法而得到的运算时间优化来满足优越感,表示无法理解其中乐趣。

对于质数筛选,已经有很多前人做了很多算法效率上的优化,这里话不多说,给出链接 Sieve of Eratosthenes , Sieve of Atkin,talk is cheap.

这里用XXXXXX作为统一平台,消去了IDE环境和硬件配置的影响,来比较楼主的O(n2)方法和一种以空间换时间的方法的运行效率:

1.简单算法:

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>

测试结果 0.014957 S:
Screenshot from 2016-06-11 20:21:20.png

2.优化算法:

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>

测试结果 0.001196 S:
Screenshot from 2016-06-11 19:57:07.png 快了十倍以上,当然这里并不是说用空间换时间的思路在任何情况下都可取,而且这个算法也远非最优解。只是提醒初学 coding 的 kcer,工具和语言在一定程度上都是浮云,“没有低级的法术,只有低级的法师”——《塔希里亚故事集》。

评论
2
文号 / 821361

千古风流
名片发私信
学术分 2
总主题 34 帖总回复 364 楼拥有证书:专家 进士 老干部 学者 机友 笔友
注册于 2012/09/03 13:32:16最后登录 2025/10/29 11:25:20
主体类型:个人
所属领域:无
认证方式:手机号
IP归属地:0

个人简介

Machine Learning, computer vision enthusiast

Google

笔记
{{note.content}}
{{n.user.username}}
{{fromNow(n.toc)}} {{n.status === noteStatus.disabled ? "已屏蔽" : ""}} {{n.status === noteStatus.unknown ? "正在审核" : ""}} {{n.status === noteStatus.deleted ? '已删除' : ''}}
  • 编辑
  • 删除
  • {{n.status === 'disabled' ? "解除屏蔽" : "屏蔽" }}
我也是有底线的