Guest User

Untitled

a guest
Oct 23rd, 2018
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.39 KB | None | 0 0
  1. /**
  2. * Recursively computes the nth fibonachi #. This method is super slow because
  3. * there is a tonnn of duplicated work.
  4. *
  5. * runtime: O(n*(n-1)(n-2) + n(n-2)) = O(n^2)
  6. *
  7. * @param {number} n
  8. * @return {number}
  9. */
  10. function naiveFibonachi(n) {
  11. if (n <= 1) {
  12. return n;
  13. }
  14.  
  15. return naiveFibonachi(n - 1) + naiveFibonachi(n - 2);
  16. }
  17.  
  18. /**
  19. * memoized naive fibonachi is much better but still overly complicated
  20. *
  21. * runtime: O(n)
  22. *
  23. * @param {number} n
  24. * @return {number}
  25. */
  26. function memoizedNaiveFibonachi(n) {
  27. fibonachi.visited = fibonachi.visited || new Array(n);
  28.  
  29. if (n <= 1) {
  30. fibonachi.visited[n] = n;
  31.  
  32. return n;
  33. } else if (fibonachi.visited[n]) {
  34. return fibonachi.visited[n];
  35. }
  36.  
  37. fibonachi.visited[n] = fibonachi(n - 1) + fibonachi(n - 2);
  38.  
  39. return fibonachi.visited[n];
  40. }
  41.  
  42. /**
  43. * operations: ~ 6n + 4
  44. *
  45. * runtime: O(n)
  46. *
  47. * @param {number} n
  48. * @return {number}
  49. */
  50. function fastSimpleFibonachi(n) {
  51. const sequence = new Array(n); // ~ 1 operation (1x assignment)
  52. sequence[0] = 0; // ~ 1 operation (1x assignment)
  53. sequence[1] = 1; // ~ 1 operation (1x assignment)
  54.  
  55. for (let i = 2; i < n; i++) { // ~ 2 operations (1x guard, 1x increment)
  56. sequence[i] = sequence[i-1] + sequence[i-2]; // ~ 4 operations (1x assignment, 2x access, 1x addition)
  57. }
  58.  
  59. return sequence[n - 1]; // ~ 1 operation (1x access)
  60. }
Add Comment
Please, Sign In to add comment