Ich würde gerne wissen, was der eigentliche Unterschied zwischen caching
und memoization
ist.
Aus meiner Sicht müssen beide wiederholte Funktionsaufrufe vermeiden, um Daten durch Speichern abzurufen .
Was ist der Hauptunterschied zwischen den beiden?
Antworten:
Memoization ist eine spezielle Form des Caching, bei der der Rückgabewert einer Funktion basierend auf ihren Parametern zwischengespeichert wird .
Caching ist ein allgemeinerer Begriff. Beispielsweise ist HTTP-Caching Caching, aber keine Memoisierung.
Wikipedia sagt :
quelle
If-Match
und Ablaufzeiten . Das Auswendiglernen macht nur für die reine Funktion Sinn, was HTTP selten ist.Wie ich gesehen habe, bedeutet "Memoisierung" "das Ergebnis einer deterministischen Funktion zwischenspeichern", die jederzeit mit derselben Funktion und denselben Eingaben reproduziert werden kann.
"Caching" umfasst grundsätzlich jede Ausgabepufferstrategie, unabhängig davon, ob der Quellwert zu einem bestimmten Zeitpunkt reproduzierbar ist oder nicht. Tatsächlich wird Caching auch verwendet, um auf Eingabepufferstrategien zu verweisen , wie z. B. den Schreibcache auf einer Festplatte oder einem Speicher. Es ist also ein viel allgemeinerer Begriff.
quelle
Ich denke, der Begriff Caching wird normalerweise verwendet, wenn Sie Ergebnisse von E / A-Vorgängen oder im Grunde alle Daten speichern, die von außen zu Ihnen kommen (Dateien, Netzwerk, Datenbankabfragen). Term Memoization bezieht sich normalerweise auf das Speichern von Ergebnissen Ihrer eigenen Berechnungen, beispielsweise im Rahmen der dynamischen Programmierung.
quelle
Das Auswendiglernen ist eine spezielle Form des Zwischenspeicherns des Ergebnisses einer deterministischen Funktion. Dies bedeutet, dass das Zwischenspeichern des Ergebnisses außerhalb der Funktion keine Memoisierung ist, da die Funktion den Cache beim Berechnen eines neuen Ergebnisses (nicht bereits im Cache) mutieren müsste, sodass es keine (reine) Funktion mehr wäre. Das Auswendiglernen impliziert im Allgemeinen das Übergeben des Caches als zusätzliches Argument (in einer Hilfsfunktion). Durch das Speichern von Funktionen werden Funktionen optimiert, bei denen Werte für einen einzelnen Zugriff mehrmals berechnet werden müssen. Durch das Caching werden Funktionen optimiert, die mehrmals mit denselben Parametern aufgerufen werden. Mit anderen Worten, Memoization optimiert den ersten Zugriff, unabhängig davon, ob durch das Caching nur wiederkehrende Zugriffe optimiert werden.
quelle
Ich möchte zu den anderen großartigen Antworten hinzufügen, dass das Auswendiglernen auch als Tabling bezeichnet wird . Ich denke, es ist auch wichtig, diesen Begriff für diejenigen zu kennen, die lernen, was Memoisierung und Caching sind.
quelle