Rubyのアルゴリズムの基本的な問題を解決し、パフォーマンスをテストしようとしています。Rubyの各whileループのパフォーマンス
は、念のために、アルゴリズムは、20 ここに1から番号のすべてで割り切れる最小の正の数を見つけることを目的コードです:バージョン間で、自分のコンピュータ上で
def remainder(number) # with while
divisor = 2
while divisor < 21
return false unless number % divisor == 0
divisor += 1
end
true
end
def remainder(number) # with each
(2..20).each do |divisor|
return false unless number % divisor == 0
end
true
end
number = 180_000_000
while number < 10_000_000_000
if remainder number
puts "#{number}"
break
end
number += 1
end
Rubyは約10秒かかっており、バージョンごとに70〜80秒かかることがあります。コードはまったく同じことを行い、同じ結果をもたらします。なぜそのようなパフォーマンスの違いがありますか?
また、Rubyコードの数があまり多いわけではないので、 'number%divisor == 0'以外の場合は' return false 'のコストに対するこれらのsmall-ishコストを比較しています。 Rubyでは、Rangesで列挙子をインスタンス化したり、コードを構造化するためのブロックベースのメソッドを使用したりしないようにする必要があります。まれな状況では、大きな時間差が生じることがあります –