www.wikidata.de-de.nina.az
Memoisation engl Memoization oder Memoisierung ist eine Technik um Computerprogramme zu beschleunigen indem Ruckgabewerte von Funktionen zwischengespeichert anstatt neu berechnet werden Memoisation ahnelt Dynamischer Programmierung bewahrt jedoch im Gegensatz zu dieser die grundlegende Vorgehensweise des zu beschleunigenden Verfahrens Funktionen konnen nur memoisiert werden wenn sie referenziell transparent sind d h sie geben bei gleichen Eingaben immer dieselben Ausgaben zuruck Operationen die nicht referenziell transparent sind aber bei denen Abweichungen in der Ausgabe relativ selten zu erwarten sind konnen mit anderen Methoden wie Cache zwischengespeichert werden Generell haben memoisierte Ausgaben kein Ablaufdatum und mussen nicht neu berechnet werden wie das bei Caches im Allgemeinen der Fall ist In imperativen Programmiersprachen wird Memoisation ublicherweise in Form eines assoziativen Arrays implementiert In einer funktionalen Programmiersprache ist es moglich eine Funktion hoherer Ordnung memoize fur jede referenziell transparente Funktion zu konstruieren In Sprachen ohne die Moglichkeit einer Funktion hoherer Ordnung muss die Memoisation separat in jede Funktion implementiert werden die davon Gebrauch macht Inhaltsverzeichnis 1 Etymologie 2 Beispiel 3 Literatur 4 WeblinksEtymologie BearbeitenDas englische Wort memoization entstand 1968 durch Donald Michie aus seinem Artikel Memo functions and machine learning in der Zeitschrift Nature Memoisation ist aus dem lateinischen Wort Memorandum abgeleitet was so viel wie das zu Erinnernde bedeutet Im allgemeinen Sprachgebrauch wird Memorandum auch Memo genannt und man kann Memoisation als eine Funktion in eine Memo umwandeln verstehen Das Wort Memoisation wird oft mit dem englischen Wort Memorization verwechselt welches eine ahnliche Bedeutung aufweist Beispiel BearbeitenEin einfaches Programm das die Fibonacci Zahlen berechnet ist function fib n if n lt 2 return 1 return fib n 1 fib n 2 Dieses Beispiel soll keine effiziente Implementierung darstellen Es dient ausschliesslich der Illustration der Memoisation Weil fib mit denselben Parametern mehrmals aufgerufen wird ist die Laufzeit der Funktion grosser als O 1 6n Falls man die Werte von fib bei der ersten Berechnung memoisiert und die Speicherreservierung und initialisierung in O n vorgenommen werden kann sinkt die Laufzeit auf O n Speicher fur Memo Array memo reservieren und alle Werte darin auf 0 setzen Initialisiere memo 1 und memo 2 auf 1 function fib n if memo n 0 return memo n memo n fib n 1 fib n 2 return memo n Anstelle eines Arrays soll nun ein assoziatives Array zur Verwendung stehen Bietet die Programmiersprache die Moglichkeit zur Formulierung von Closures so lasst sich eine Funktion memoize schreiben die das Prinzip der Memoisation von fib abstrahiert function memoize f var memo return function n if n not in memo memo n f n return memo n fib memoize fib Zusatzlich zur Memoisation tritt bei diesem Beispiel gleichzeitig Rekursion auf Hierbei ist zu beachten dass fib auch innerhalb ihrer eigenen Definition eine Variable sein muss deren Inhalt mit der memoisierten Version uberschrieben wurde Wenn das nicht moglich ist kann man die Memoisation alternativ in den Fixpunkt Kombinator einbauen Dieser ist zunachst gegeben durch function fix F return function f n return F f n Der modifizierte Algorithmus beinhaltet nun das zuvor beschriebene Verfahren function fix F var memo return function f n if n not in memo memo n F f n return memo n fib fix function f n return 1 if n lt 2 else f n 1 f n 2 Literatur BearbeitenPeter Norvig Paradigms of Artificial Intelligence Programming 1 Auflage Morgan Kaufmann 1991 ISBN 1 55860 191 0 S 269 275 Thomas H Cormen Charles E Leiserson Ronald L Rivest und Clifford Stein 2001 Introduction to Algorithms 2 Auflage MIT Press amp McGraw Hill ISBN 0 262 03293 7 S 347ff Weblinks BearbeitenMemoize Memoize ist eine kleine Bibliothek fur Memoisation in Common Lisp Es wurde von Tim Bradshaw geschrieben Memoize pm ein Perl Modul welches memoisierte Unterroutinen enthalt Java Memoisation ein Beispiel in Java welches eine dynamische Proxyklasse benutzt memoize ein Ruby Modul mit Memoise Methoden Python Memoisation ein Beispiel der Memoisation in Python Abgerufen von https de wikipedia org w index php title Memoisation amp oldid 235507504