BBaum, welche Datenstruktur sinnvoll?

Hallo,

ich möchte einen B-Baum in Java programmieren. Welche Datenstruktur ist denn am besten um einen B-Baum zu repräsentieren?
Ich möchte im B-Baum verschiedene Operationen ausführen können:
Einfügen
Löschen
Suchen
usw.

Durch ein wenig googeln habe ich festgestellt, dass es unterschiedliche Möglichkeiten gibt einen B-Baum zu implentieren, doch möchte ich den Programmieraufwand so gering wie möglich halten (Performanz ist egal).
Ich denke mir, dass je nach repräsentierter Datenstruktur der Aufwand für die einzelnen Operationen mehr oder weniger Kompliziert werden.
Welche Umsetzung würdet ihr denn benutzen und eventuell warum?

Danke schonmal im voraus

Gruß

Sebastian

ich möchte einen B-Baum in Java programmieren. Welche
Datenstruktur ist denn am besten um einen B-Baum zu
repräsentieren?

Ich verstehe deine Frage nicht ganz. Du musst dir eine Knoten-Klasse schreiben, die die Einträge des Knotens speichert und die Verweise auf die Kinder. Eine vorgefertigte Datenstruktur für einen B-Baum gibt es nicht.

Ich verstehe deine Frage nicht ganz. Du musst dir eine
Knoten-Klasse schreiben, die die Einträge des Knotens
speichert und die Verweise auf die Kinder. Eine vorgefertigte
Datenstruktur für einen B-Baum gibt es nicht.

Hmm…
Dachte, man könnte z.B. auch eine verschachtelte Hashmap benutzen (vgl. Adjazenzliste bei Graphen).
Wenn ich eine Knotenklasse erstelle und immer wieder Knoten einfüge, also immer neue Instanzen des Objektes erstelle. Wie kann ich die Objekte ansprechen bzw. voneinander unterscheiden? In einer Liste/Vektor speichern und dann die Liste/Vektor bei jeder Operation mit einem Iterator/Enumerator durchsuchen? Oder kann ich die Objekte dynamisch benamen?

Schonmal danke für die Antwort :smile:

Gruß

Sebastian

Dachte, man könnte z.B. auch eine verschachtelte Hashmap
benutzen (vgl. Adjazenzliste bei Graphen).

Eine Hashmap ist aber absolut ungeeignet. Da musst du ja erst recht immer linear alle Einträge durchlaufen, da du ja nur immer Elemente aus der Hashmap direkt holen kannst, die GENAU ihrem Schlüssel entsprechen. Beim B-Baum willst du aber üblicherweise den Kindknoten haben, dem der nächstgrößere/-kleinere Schlüssel entspricht. Das kannst du bei der Hashmap nur erreichen, in dem du die Schlüssel der Hashmap einzeln durchsuchst. Damit geht aber der Sinn einer Hashmap (direkter Zugriff auf ein Element in konstanter Zeit) komplett verloren.

Wenn ich eine Knotenklasse erstelle und immer wieder Knoten
einfüge, also immer neue Instanzen des Objektes erstelle. Wie
kann ich die Objekte ansprechen bzw. voneinander
unterscheiden? In einer Liste/Vektor speichern und dann die
Liste/Vektor bei jeder Operation mit einem Iterator/Enumerator
durchsuchen?

Richtig. Wenn du die Knoten aufsteigend in der Liste sortierst, dann kannst du Binärsuche verwenden, um den richtigen Knoten zu identifizieren. Damit kannst du die Einträge eines Knotens mit logarithmischer Komplexität durchsuchen, also deutlich schneller als mit linearer Suche mittels Iterator/Enumerator.

Oder kann ich die Objekte dynamisch benamen?

Wie benennen? Du unterscheidest die Kind-Knoten (=Teilbäume) anhand der Schlüssel. Es macht also Sinn, den Schlüsselwert in der Knotenklasse zu speichern. Dann hat ein Knoten also eine Liste von Kindknoten, die du anhand ihrer Schlüssel unterscheidest.

Super vielen Dank.
Jetzt gehts ans umsetzten :smile:
Denke, dass bekomme ich hin.

Gruß

Sebastian