作者godfat (godfat 真常)
看板Ruby
标题Re: [问题] 回圈效能
时间Fri Feb 22 15:20:27 2008
※ 引述《legnaleurc (CA)》之铭言:
: 是以Sieve of Eratosthenes去产生一个长度20000000的质数表
: 以上是我目前试出最快的实作
: 但是也要40秒才跑得完
: 有趣的是如果内部回圈用step方法反而会更慢
这边的状况是,用越多单纯的作法通常会越快
因为 ruby 里有些东西是用 ruby 写的,类似 lib 的意思
而有些最基本的东西,是用 c 写的,所以一定会比较快
: 然而Python用相同的方法确可以达到18秒( C++和Java就别提了 )
python 是一定比 ruby 快啦... XD
: Ruby是否能再优化呢
把下面的程式码:
: 考虑以下代码:
: prime = Array.new( 20000000, true )
: prime[0, 1] = false, false
: for i in 2..( prime.length ** 0.5 ).floor
: if prime[i]
: j = i << 1
: while j < prime.length
^^^^^^^^^^^^
这个,cache 起来,不要一直 call, 可以快不少
: if prime[j]
: prime[j] = false
: end
: j += i
: end
: end
: end
还不够快的话,我想就可以考虑其他的方法了,例如 RubyInline
或是调校一下 ruby interpreter, 换成 ruby 1.9, 诸如此类的
--
『风车』が廻り続ける度に 『美しき』幻想が静かに纺がれ
『焔』の揺らめきの外に 『腕』を伸ばす愚かな者达 -《Roman》5th Story
『宝石』をより多く掴もうと 『朝と夜』の狭间を彷徨い続ける Track 10
『星屑』の砂の煌めきにも 『葡萄酒』の仄甘い陶酔を魅せ 黄昏の贤者
『贤者』が忌避する槛の中から 『伝言』の真意を彼等に问うだろう
『天使』が别れを告げし时 『地平线』は第五の物语を识る
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.135.28.18
1F:推 legnaleurc:cache之後只快了5秒.... 02/26 12:35
2F:→ legnaleurc:可能ruby本身不太适合做这种运算吧 02/26 12:36
3F:→ godfat:我是觉得这个小动作能快五秒很多吧? 03/02 11:52