« 平方根の求め方 | トップページ | Project Euler - Problem 60 : 私のこだわり »

2009年9月 4日 (金)

"Python + Psyco" vs "Ruby 1.9" ??

今日、「Python+Psycoが速い」という記事をを見つけました。

なにやら素数列を生成する速度をいろんな言語で比べているのですが、 "Python + Psyco" というのが爆速らしい。

自分は Ruby 使いなので Python のことは詳しくはないのですが、興味があったので自分の環境でも確かめてみました。

試したコードは上記の記事に乗っていたものをコピーして使用しました。上限は記事と同じ "10000000" にしました。

結果は……確かに "Psyco" は速かった。

Python + Psyco : 0m19.395s Python : 2m54.042s Ruby 1.9 : 2m2.096s

でもね…… Ruby には Ruby なりのやり方があるのですよ。

同じ結果を求めるだけなら、添付ライブラリの "prime.rb" を使うととても速くなります。

# prime_test1.rb require 'prime' primes = Prime.each(ARGV[0].to_i).to_a
$ time ruby prime_test1.rb 10000000 real 0m29.568s user 0m29.230s sys 0m0.108s

これだったら "Python + Psyco" の結果と遜色無いのでは?


さらに、自作の "math_tool.rb" に含まれている "prime_list" メソッドを使えば、もっと速く同じ結果が出せます。

"prime_list" は「エラトステネスの篩」の原理を使っているので、メモリは少々使いますが、探索する上限が決まっていればかなり高速に結果が出ます。

# prime_test2.rb def prime_list(n) return [] if n < 2 return [2] if n == 2 limit = (n ** 0.5).to_i arr = (1 .. n).step(2).to_a arr[0] = 2 len = arr.size i = 0 while true i = i + 1 j = arr[i] next unless j break if j > limit k = 2 * i * (i + 1) while k <= len arr[k] = nil k = k + j end end arr.compact! return arr end primes = prime_list(ARGV[0].to_i)
$ time ruby prime_test2.rb 10000000 real 0m3.153s user 0m3.084s sys 0m0.024s

なんと "Python + Psyco" の 6 〜 7 倍の速さです。


で、結局何が言いたいかというと…… Python が羨ましい……ではなくて、やり方次第で少々のスピードの遅さはカバーできる事もあるということです(ちょっと、負け惜しみも含まれていますが……)。

Ruby は直感的なコードが書きやすいので、コードを書くのがそんなに負担になりません。そこでいろいろなアルゴリズムのコードを試しに書いてみて、検討しやすいと思います。

もともと速ければ、あまりアルゴリズムにこだわらずに、そこそこのコードで満足してしまうかもしれません。でも、私はアルゴリズムにこだわって行きたいと思っています。


追記(2009/09/08) : prime_list にちょっとしたバグを発見したため、修正しました。

« 平方根の求め方 | トップページ | Project Euler - Problem 60 : 私のこだわり »

Ruby」カテゴリの記事

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/112020/46118449

この記事へのトラックバック一覧です: "Python + Psyco" vs "Ruby 1.9" ??:

« 平方根の求め方 | トップページ | Project Euler - Problem 60 : 私のこだわり »

2016年7月
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31            
フォト

最近のトラックバック

無料ブログはココログ