Advertisement
Guest User

Untitled

a guest
May 30th, 2015
273
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.32 KB | None | 0 0
  1. # -*- encoding: utf-8 -*-
  2. require 'benchmark/ips'
  3.  
  4. def fib_naive(n)
  5. return 1 if n <= 2
  6. fib_naive(n - 1) + fib_naive(n - 2)
  7. end
  8.  
  9. def fib_memo(n)
  10. fib_memo_recur(n, {})
  11. end
  12.  
  13. def fib_memo_recur(n, memo)
  14. return memo[n] if memo.key?(n)
  15. return memo[n] = 1 if n <= 2
  16. memo[n] = fib_memo_recur(n - 1, memo) + fib_memo_recur(n - 2, memo)
  17. end
  18.  
  19. def fib_iter_inner(prev2, prev1, cnt)
  20. if cnt == 1
  21. prev2 + prev1
  22. else
  23. fib_iter_inner(prev1, prev2 + prev1, cnt - 1)
  24. end
  25. end
  26.  
  27. def fib_iter(n)
  28. return 1 if n <= 2
  29. fib_iter_inner(1, 1, n - 2)
  30. end
  31.  
  32.  
  33. def main
  34. Benchmark.ips do |x|
  35. x.config(:time => 5, :warmup => 0)
  36. x.report('naive') {
  37. fib_naive(30)
  38. }
  39. x.report('memo') {
  40. fib_memo(30)
  41. }
  42. x.report('iter') {
  43. fib_iter(30)
  44. }
  45. end
  46. end
  47.  
  48. case $PROGRAM_NAME
  49. when __FILE__
  50. main
  51. when /spec[^\/]*$/
  52. # {spec of the implementation}
  53. end
  54.  
  55. # >> Calculating -------------------------------------
  56. # >> naive 1 i/100ms
  57. # >> memo 1 i/100ms
  58. # >> iter 1 i/100ms
  59. # >> -------------------------------------------------
  60. # >> naive 9.9 (±0.0%) i/s - 50 in 5.067318s
  61. # >> memo 80426.9 (±5.0%) i/s - 258215 in 4.200047s
  62. # >> iter 343313.9 (±7.2%) i/s - 721430 in 2.385844s
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement