Skip to content

Instantly share code, notes, and snippets.

@bernEsp
Last active August 29, 2015 14:08
Show Gist options
  • Save bernEsp/bbfaa630b0c96c7f052a to your computer and use it in GitHub Desktop.
Save bernEsp/bbfaa630b0c96c7f052a to your computer and use it in GitHub Desktop.
Fibonacci algorithm
def self.fib(quantity)
start = [0,1]
quantity.times do
two_numbers = start.last(2)
start << two_numbers.inject{|sum, n| sum +n}
end
start
end
def self.fibonacci(quantity)
serie = [0,1]
quantity.times do
serie << serie.last(2).inject(:+)
end
serie
end
def self.fibonacci_express(quantity)
serie = [0,1]
for i in 1..quantity do
serie << serie.last(2).inject(:+)
end
serie
end
def self.fibonacci_uber(quantity)
serie = [0,1]
quantity.times do
serie << serie.last(2).inject(:+)
end
serie
end
Benchmark.bm do |x|
x.report("fib: ") { fib(50) }
x.report("fibonacci: ") { fibonacci(50) }
end
user system total real
fib: 0.000000 0.000000 0.000000 ( 0.000228)
fibonacci: 0.000000 0.000000 0.000000 ( 0.000240)
Benchmark.bm do |x|
x.report("fib: ") { 100.times{fib(50)} }
x.report("fibonacci: ") { 100.times{fibonacci(50)} }
end
user system total real
fib: 0.000000 0.000000 0.000000 ( 0.007202)
fibonacci: 0.010000 0.000000 0.010000 ( 0.004343)
Benchmark.bm do |x|
x.report("fibonacci: "){ fibonacci(50) }
x.report("fibonacci_express: "){ fibonacci_express(50)}
end
user system total real
fibonacci: 0.000000 0.000000 0.000000 ( 0.000215)
fibonacci_express: 0.000000 0.000000 0.000000 ( 0.000144)
Benchmark.bm do |x|
x.report("fibonacci: "){ fibonacci(50000) }
x.report("fibonacci_express: "){ fibonacci_express(50000) }
end
user system total real
fibonacci: 0.130000 0.040000 0.170000 ( 0.186078)
fibonacci_express: 0.110000 0.020000 0.130000 ( 0.145938)
Benchmark.bm do |x|
x.report("fibonacci: "){ fibonacci(500000) }
x.report("fibonacci_express: ") {fibonacci_express(500000)}
end
user system total real
fibonacci: 7.600000 12.740000 20.340000 (967.804414)
fibonacci_express: 14.170000 84.060000 98.230000 (4783.423653)
Benchmark.bm do |x|
x.report{ fibonacci_uber(50) }
end
user system total real
fibonacci_uber: 0.000000 0.000000 0.000000 ( 0.000110)
Benchmark.bm do |x|
x.report("fibonacci_uber: "){ fibonacci_uber(50000) }
end
user system total real
fibonacci_uber: 0.240000 2.540000 2.780000 (171.997193)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment