Re: [問題] 迴圈效能

看板Ruby作者 (godfat 真常)時間17年前 (2008/02/22 15:20), 編輯推噓1(102)
留言3則, 2人參與, 最新討論串2/2 (看更多)
※ 引述《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

02/26 12:35, , 1F
cache之後只快了5秒....
02/26 12:35, 1F

02/26 12:36, , 2F
可能ruby本身不太適合做這種運算吧
02/26 12:36, 2F

03/02 11:52, , 3F
我是覺得這個小動作能快五秒很多吧?
03/02 11:52, 3F
文章代碼(AID): #17ldUzEm (Ruby)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
文章代碼(AID): #17ldUzEm (Ruby)