Advertisement
GenuineSounds

MemoFib

Dec 13th, 2015
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.60 KB | None | 0 0
  1. package com.genuinevm.puzzlers;
  2.  
  3. import java.util.Arrays;
  4. import java.util.HashMap;
  5. import java.util.Map;
  6. import java.util.Optional;
  7.  
  8. public class MemoFib {
  9.  
  10.     private static Optional<Long>[] memo1;
  11.     private static Map<Integer, Long> memo2;
  12.  
  13.     @SuppressWarnings("unchecked")
  14.     public static void main(String[] args) {
  15.         long time = System.nanoTime();
  16.         memo1 = new Optional[1024];
  17.         Arrays.fill(memo1, Optional.empty());
  18.         for (int i = 0; i <= 200; i++) {
  19. //          if (i >= memo.length)
  20. //              memo = resizeArray(memo);
  21.             fib1(i);
  22.         }
  23.         System.out.println("fib1 took " + (System.nanoTime() - time) + " nanoseconds.");
  24.         time = System.nanoTime();
  25.         memo2 = new HashMap<Integer, Long>(1024);
  26.         for (int i = 0; i <= 200; i++) {
  27.             fib2(i);
  28.         }
  29.         System.out.println("fib2 took " + (System.nanoTime() - time) + " nanoseconds.");
  30.     }
  31.  
  32.     public static long fib1(int number) {
  33.         if (number <= 1)
  34.             return 1;
  35.         if (!memo1[number].isPresent())
  36.             memo1[number] = Optional.of(fib1(number - 1) + fib1(number - 2));
  37.         return memo1[number].get();
  38.     }
  39.    
  40.     public static long fib2(int number) {
  41.         if (number <= 1)
  42.             return 1;
  43.         if (!memo2.containsKey(number))
  44.             memo2.put(number, fib1(number - 1) + fib1(number - 2));
  45.         return memo2.get(number);
  46.     }
  47.  
  48.     // Wont be used in this example.
  49.     @SuppressWarnings("rawtypes")
  50.     private static Optional[] resizeArray(Optional[] opts) {
  51.         Optional[] out = new Optional[opts.length * 2];
  52.         Arrays.fill(out, Optional.empty());
  53.         for (int i = 0; i < opts.length; i++)
  54.             out[i] = opts[i];
  55.         return out;
  56.     }
  57. }
  58.  
  59. // fib1 took 891176 nanoseconds.
  60. // fib2 took 605662 nanoseconds.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement