próby rozwiązania podstawowego problemu algorytmu w języku Ruby i testowanie wydajności.Wykonanie pętli dla każdej z pętli podczas
Tylko w przypadku, algorytm ma znaleźć najmniejszą dodatnią liczbę, która jest podzielna przez wszystkie numery od 1 do 20. Oto kod:
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
Na moim komputerze, ze podczas gdy wersja Ruby zajmuje około 10 sekund, a każda z wersji zajmuje od 70 do 80 sekund. Kod robi dokładnie to samo, daje ten sam rezultat. Skąd taka różnica w wydajności?
Warto również zauważyć, że porównujesz te małe koszty w stosunku do kosztu 'return false, chyba że liczba% divisor == 0', która w ogóle nie jest dużo kodu Ruby. Błędem byłoby zabranie wiadomości, że w Ruby powinieneś unikać tworzenia instancji w szeregach lub używać metod blokowych do struktury kodu. Tylko w rzadkich przypadkach zauważysz dużą różnicę czasu –