Giriş
Açıklaması şöyle.
Örnek
Elimizde şöyle bir kod olsun
Açıklaması şöyle.
Memoization is a specific form of caching that involves caching the return value of a function based on its parameters.Memoization GoF - Flyweight Örüntüsü ile ilişkili ancak nesne saklamak yeriner fonksiyonun sonucunu saklıyor.
Örnek
Elimizde şöyle bir kod olsun
public class SimpleRecursiveFibonacci {
/** Gets the fibonacci value for n */
public final BigInteger fibonacci(int n) {
if (n < 2) {
return BigInteger.ONE;
}
return getFibonacci(n);
}
/** Recursively calculates the fibonacci by adding the two previous fibonacci. */
protected final BigInteger calculateFibbonacci(int n) {
return fibonacci(n - 2).add(fibonacci(n - 1));
}
/**
* Somehow get the fibonacci value for n.
* Could be by calculation, getting it from a cache, or anything.
*/
protected BigInteger getFibonacci(int n) {
return calculateFibbonacci(n);
}
}
Şöyle yaparızpublic class MemoizedRecursiveFibonacci extends SimpleRecursiveFibonacci {
private Map<Integer, BigInteger> cache = new HashMap<>();
@Override
protected BigInteger getFibonacci(int n) {
BigInteger fib = cache.get(n);
if (fib == null) {
fib = recursiveCalculateFibbonacci(n);
cache.put(n, fib);
}
return fib;
}
}
Hiç yorum yok:
Yorum Gönder