作者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
推 legnaleurc:cache之後只快了5秒.... 02/26 12:35
→ legnaleurc:可能ruby本身不太適合做這種運算吧 02/26 12:36
→ godfat:我是覺得這個小動作能快五秒很多吧? 03/02 11:52