Ich möchte ein Btree (nicht sicher, ob eine binäre Eins) in einer Datei speichern. und lesen Sie es dann in den Speicher. einige Level-Reihenfolge Traversal kann eine gute Möglichkeit für eine binäre Btree. aber wenn es kein binäres ist. Ich baue das Btree vom leafnode zum rootnode im Speicher. Ich glaube, dass ich einige Strukturen in der Festplattendatei definieren und die Baumknoten ausgeben muss. Verwenden Sie ein zusätzliches Tag, um einen Knoten in der Datei zu identifizieren? wie Traversal kann das Schlüsselproblem hier sein. Ich konnte keinen guten Weg finden, die Knoten und die Zeiger zu speichern. und dann lesen Sie es. Rekonstruiere den Baum im Speicher. irgendwelche guten Ideen ?. vielen Dank.Btrees in eine Datei speichern und lesen Sie es
Antwort
Wenn Sie wirklich etwas Ähnliches tun möchten, können Sie an jedem Knoten eine ID zuweisen gerade und die Knoten in diesem Format speichern:
[Knoten-ID-Wert links-node-id rechten Knoten-id]
und besuchen Sie dann den Baum mit einer Breitensuche.
Wenn Sie wollen, um den Baum zu rekonstruieren, eine Karte id-> Knoten erstellen und lesen dann rückwärts die Datei: so, wenn Sie einen Datensatz zu lesen, erstellen Sie den Knoten, registrieren sie die Karte, um die linke zuweisen und rechter Knoten holt die Knoten von der Karte.
Eine Option wäre auch die Ebene des Knotens zu speichern und BFS zu verwenden, um den Baum zu rekonstruieren. Der Wert des Knotens wird entscheiden, ob links oder rechts Kinder sind. –
Für jeden Knoten definiert eine Datenstruktur, die für Sie die gleichen Informationen der Knoten halten und auf diese Struktur zusätzlichen Feld hinzufügen, die für Sie die Offset in der Datei für die nächsten Sohn markieren. Und machen Sie das oberste Feld dieser Struktur ihre tatsächliche Größe, da Sie nicht wissen, welche Art von Baum Sie jetzt suchen. Jetzt kannst du deinen Baum rekonstruieren, indem du über die Datei springst. Ich bin mir sicher, dass meine Lösung nicht endgültig ist, aber ich hoffe, es könnte der gute Star Point für dich sein.
Sie möchten vielleicht Protocol Buffers überprüfen. Sie sind kompakt, binär, erweiterbar, leicht zu lesen und zu schreiben und in C++, Java und Python (sowie Implementierungen von Drittanbietern in anderen Sprachen) verfügbar.
Sie können eine Protokollpuffer Nachricht für einen BTree Knoten, mit Datei-Offsets für untergeordnete Knoten, definieren und einfach auf die Festplatte in der offensichtlichen Weise serialisiert.
Die übliche Technik für die B-Trees ist, um sicherzustellen, dass die Größe eines Knotens auf die Blockgröße der Scheibe gleich ist, und die mmap Plattendatei. Sie geben nicht an, in welcher Programmiersprache Sie arbeiten, also könnte es so einfach wie eine Umwandlung in C sein, oder etwas komplizierteres wie zum Beispiel das Erstellen von flyweight Objekten zum Einschließen eines java.nio.IntBuffer. So oder so, ein großer Vorteil des B-Baums besteht darin, dass Sie ihn nicht alle auf einmal laden müssen, sondern ziemlich effizient herumspringen können.
- 1. lesen Datei Text und speichern Sie in Array 2d
- 2. lesen Sie einen Inhalt aus einer Datei und speichern Sie es in Datenbanktabellen in Ruby
- 3. BashScript: Lesen Sie eine Datei aus und verarbeiten es
- 4. Eine Datei lesen und die Operation anwenden und speichern
- 5. Gibt es eine Möglichkeit, eine TXT-Datei zu lesen und jede Zeile im Speicher zu speichern?
- 6. So speichern und senden Sie eine Datei
- 7. lesen PPM-Datei und speichern Sie es in einem Array; codiert mit C
- 8. Eine Matrix-TXT-Datei lesen und als Array speichern
- 9. Downloaden, extrahieren und lesen Sie eine Gzip-Datei in Python
- 10. Lesen und Schreiben in eine PLIST-Datei
- 11. Lesen Sie eine Zip-Datei in r
- 12. Lesen Sie eine TXT-Datei und überprüfen Sie die Uhrzeit?
- 13. Lesen von Daten aus Datei und Speichern in Array-Liste
- 14. Objekt aus einer Datei lesen und in ArrayList speichern
- 15. Lesen Sie eine Datei über FileReader Api und konvertieren Sie es in JSON-Objekt
- 16. Shell Script - lesen Sie zwei Zeilen der Datei und lesen Sie eine Zeile einer anderen Datei
- 17. Lesen und die Linien in XML-Datei speichern
- 18. Datei zeilenweise lesen und in einer Liste speichern
- 19. Javascript - Wie kann ich lesen Spalte in JSON-Datei und speichern Sie sie in JavaScript-Array
- 20. So lesen und schreiben Sie eine Datei in C#
- 21. Öffnen Sie eine Excel-Datei und speichern Sie als .XLS
- 22. CSV-Datei lesen und Werte in einem Wörterbuch speichern
- 23. eine Datei hochladen und sie in einem temporären Ordner speichern
- 24. Klassen und Datei lesen
- 25. dekomprimieren und lesen gzip-Datei in scala
- 26. Eine Datei in Node.js lesen
- 27. Speichern und lesen Hash und Array in Dateien in Perl
- 28. Eine Zip-Datei in Zip-Datei lesen
- 29. Java - lesen Sie eine einzelne Zeile Datei
- 30. Datei lesen und in Array
Sie können die Liste der Werte einfach nicht speichern und zur Laufzeit rekonstruieren? – akappa
Sie scheinen "Binärbaum" und "Btree" zu verwirren. Vielleicht solltest du das zuerst klären. http://en.wikipedia.org/wiki/B-tree http://en.wikipedia.org/wiki/Binary_search_tree – bendin