Advertisement
Guest User

Untitled

a guest
Mar 28th, 2017
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.67 KB | None | 0 0
  1. open System
  2. open System.Collections.Generic
  3.  
  4. let memoize_rec (f : ('a -> 'b) -> 'a -> 'b) =
  5. let m = Dictionary<'a, 'b> () in
  6. let rec g x =
  7. try
  8. m.[x]
  9. with
  10. | :? KeyNotFoundException ->
  11. let y = f g x in
  12. m.Add(x, y);
  13. y
  14. in
  15. g
  16.  
  17. let rec fib_n = function
  18. 0 -> 0
  19. | 1 -> 1
  20. | n -> fib_n (n - 1) + fib_n (n - 2)
  21.  
  22. let rec fib_s self = function
  23. 0 -> 0
  24. | 1 -> 1
  25. | n -> self (n - 1) + self (n - 2)
  26.  
  27. let fib_memo = memoize_rec fib_s
  28.  
  29. printfn "Naive."
  30. print_duration (fun () -> fib_n 40) |> printfn "%i"
  31. // Elapsed Time: 5900[ms]
  32.  
  33. printfn "Memoized."
  34. print_duration (fun () -> fib_memo 40) |> printfn "%i"
  35. // Elapsed Time: 5[ms]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement