Memoization

Memoization is een methode in het programmeren die gebruikt wordt om een functie te optimaliseren. Memoization is een vorm van caching en is verwant aan dynamisch programmeren.

Bij memoization slaat een functie de waarde die hij voor de gegeven argumenten berekend heeft op. Als de functie opnieuw wordt aangeroepen met dezelfde argumenten hoeft het resultaat niet opnieuw berekend te worden, maar kan direct geretourneerd worden.

Voorbeeld: de Fibonacci-reeks

De onderstaande C-functie berekent het nde Fibonaccigetal (zonder memoization):

int fib(int n) {
        if (n < 1) return 0;
        if (n == 1) return 1;
        return fib(n-1) + fib(n-2);
}

Wanneer we gebruikmaken van memoization kan de functie er zo uitzien:

int fib2(int n) {
 
        static int r[10000];
        int t;
        
        if (n < 1) return 0;
        if (r[n]) return r[n];
        if (n == 1) 
                t = 1;
        else
                t = fib2(n-1) + fib2(n-2);
        return r[n] = t;
}

Voor het berekenen van het 10e, 20e en 40e fibonaccigetal wordt de eerste functie respectievelijk 176, 21.890 en 331.160.280 keer recursief aangeroepen. De tweede, gememoizeerde, functie heeft slechts respectievelijk 18, 38 en 78 recursieve aanroepen nodig. Door het toepassen van memoization is de looptijd van de functie teruggebracht van exponentieel () tot lineair ().

Content Disclaimer

Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.

  1. The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
  2. There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
  3. It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
  4. Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.