2016-04-19 7 views
2

In this und this Beiträge beschreibe ich das Framework, das ich entwickeln möchte.Behalten Sie einen Objektstatus in verschiedenen Läufen

Ich möchte eine memoization Strategie implementieren, um die Ausführung einiger Funktionen zu beschleunigen. Ein wichtiges Merkmal dieses Frameworks sollte sein, sich an die berechneten Werte vergangener Läufe zu erinnern: Nehmen wir an, wir schreiben ein Programm, in dem wir eine Wortzählfunktion f mit dem großen Text t als Eingabe ausführen. Nachdem wir r=f(t) berechnet haben (wobei r das Ergebnis ist), folgen wir der Memo-Logik, also speichern wir irgendwo, sagen wir ein unordered_map Objekt um. Danach wird das Programm beendet.

Bei der nächsten Ausführung des gleichen Programms ist die teure Ausführung f nicht notwendig, da um bereits (t,r) enthält, so wird der Wert r zurückgegeben.

Das Problem in all dem ist, wie man sich "um" in verschiedenen Ausführungen "erinnert".

WICHTIG: Offensichtlich ist dies ein Beispiel, um Ihnen eine mögliche Anwendung dieses Frameworks zu erklären, aber jede Memoization-Anwendung muss auch funktionieren.

Write a c++ object to file ist die einzige Lösung für dieses Problem/Szenario, oder gibt es eine andere?

+1

Speichern Sie die Informationen mit dem Dateisystem und lesen Sie sie während der späteren Läufe ein. – lcs

+0

Können Sie bitte Ihre Lösung besser erklären? Betrachten Sie den WICHTIGEN Abschnitt und konzentrieren Sie sich nicht zu sehr auf das mitgelieferte Beispiel (das nur berichtet wird, um diese Art von Memo zu verstehen). – justHelloWorld

+0

Nun, Sie werden die Daten irgendwo speichern müssen.Sie könnten eine DB, eine Datei, eine Art Cloud-Speicher oder etwas anderes verwenden, aber die Daten müssen irgendwo dauerhaft gespeichert werden. – NathanOliver

Antwort

1

Die Daten müssen irgendwo außerhalb des Prozesses gespeichert werden, um sie nach dem Prozess zu behalten. Das Dateisystem ist ein offensichtlicher Ort, um die Daten zu speichern, aber es kann auch durch einen anderen Prozess wie etwa ein Datenbankverwaltungssystem oder einen externen Cache (z. B. https://memcached.org/) gespeichert werden.

Die meisten Back-End-Optionen speichern die Daten als Zeichenstrom. Sie müssen verstehen, wie zu (de)serialize die Daten.

1

Randbemerkung: Können Sie das Programm weiterhin ausführen? Dann müssen Sie die Memos nicht auf der Festplatte speichern.

Unabhängig davon, wo Sie die Memos speichern:

Wenn dies wirklich für ist Wortzählung, dann memoization vergessen: Sie müßten den ganzen Text lesen, um herauszufinden, ob es zu einem frühen Text identisch ist. Und dann könntest du die Wörter sowieso sofort zählen.

Wenn statt Word-Zahl, das war nur ein Beispiel für einige viel kompliziertere Berechnung: Statt text -> computed-value Memos speichern können Sie hash -> computed-value Memos speichern. Sie wählen einen Hash abhängig von Ihrer Situation: Wenn Sie etwas sicher sein müssen, dass es derselbe Text ist, dann verwenden Sie z. sha-1. Wenn Sie einen wirklich billigen "Hash" benötigen (z. B. wenn der gespeicherte berechnete Wert nur als eine anfängliche Schätzung dient, die auf jeden Fall verbessert wird), könnten Sie einfach die Anzahl der Bytes in der Textzeichenfolge als "Hash" verwenden.

Verwandte Themen