B-Baum Implementation

Algorithmen, Sprachunabhängige Diskussionen zu Konzepten, Programmiersprachen-Design
Antworten
MrTiger
Beiträge: 28
Registriert: Sa Aug 11, 2012 10:44 pm

B-Baum Implementation

Beitrag von MrTiger » Do Mär 28, 2013 1:09 am

Hallo

Ich suche Code welcher einen B-tree oder B+-tree implementiert. Am besten in C# aber auch Java wäre ok. Ich habe bei Google einige Implementationen gefunden, z.B.

http://wwwiti.cs.uni-magdeburg.de/iti_d ... BTree.java

http://code.google.com/p/my-alogorithm- ... .java?r=13

http://algs4.cs.princeton.edu/62btrees/BTree.java.html

Sowas stelle ich mir etwa vor, also keine ganze extrem umfangreiche library, sondern einfach ein kurzes Stück Code, welches einen B-tree repräsentiert, also die Nodes, Operationen wie Einfügen, Löschen, Rebalancieren, Suchen etc. Bei den obigen code snippets fehlt eine delete Methode, das wäre noch wichtig.

Kann mir da vielleicht jemand weiterhelfen?


MrTiger
Beiträge: 28
Registriert: Sa Aug 11, 2012 10:44 pm

Re: B-Baum Implementation

Beitrag von MrTiger » Do Mär 28, 2013 5:08 pm

Vielen Dank, allerdings ist ein binary search tree nicht das gleiche wie ein B-Tree. ;)

GilbertDur
Beiträge: 105
Registriert: Fr Mär 01, 2013 10:31 am

Re: B-Baum Implementation

Beitrag von GilbertDur » Do Mär 28, 2013 9:21 pm


MrTiger
Beiträge: 28
Registriert: Sa Aug 11, 2012 10:44 pm

Re: B-Baum Implementation

Beitrag von MrTiger » Do Mär 28, 2013 10:21 pm

Das ist immer noch ein binary tree. ;)

Ich brauche v.a. Code oder Pesudocode für die delete methode inklusive Rotatonen etc. Den Rest sollte ich hinbekommen.

nufan
Wiki-Moderator
Beiträge: 2558
Registriert: Sa Jul 05, 2008 3:21 pm

Re: B-Baum Implementation

Beitrag von nufan » Fr Mär 29, 2013 12:18 am


GilbertDur
Beiträge: 105
Registriert: Fr Mär 01, 2013 10:31 am

Re: B-Baum Implementation

Beitrag von GilbertDur » Fr Mär 29, 2013 9:13 am

Ich weiß, das ist jetzt ne ganze Library, aber Anregungen kann man sich holen. Zumindest sehen mir die Methoden auf den ersten Blick nicht zu kompliziert aus:

https://github.com/rdcastro/btree-dotne ... ster/BTree

MrTiger
Beiträge: 28
Registriert: Sa Aug 11, 2012 10:44 pm

Re: B-Baum Implementation

Beitrag von MrTiger » Sa Apr 06, 2013 12:49 pm

So ich konnte den B-Baum jetzt implementieren, sogar auch die Delete Methode. ;)

Nun bin ich mir aber unschlüssig welche Ordnung ich für den Baum wählen soll. Die Ordnung gibt ja die minimale Anzahl keys in einem Knoten an.

Was für eine Ordnung würdet ihr da wählen wenn der B-Baum als Index für ein virtual file system gebraucht wird? Vielleicht 2 oder 3 oder doch höher?

MrTiger
Beiträge: 28
Registriert: Sa Aug 11, 2012 10:44 pm

Re: B-Baum Implementation

Beitrag von MrTiger » So Apr 14, 2013 11:07 am

Also wenn ich ja eine höhere Order für den B-Tree wähle, z.B. 100, dann reduziert sich ja die Tiefe und jeder Knoten hält eine grössere Anzahl keys.

Trifft es zu, dass bei vielen files im virtual file system die order eher höher gewählt werden sollte und bei wenigen files eher eine kleinere order? Es wird jeder filename indexiert.

Und was ist genau eine höhere order? Z.B. 100?

By the way, die order eines B-Baums beschreibt die minimale Anzahl keys in einem Knoten.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8859
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: B-Baum Implementation

Beitrag von Xin » Mo Apr 15, 2013 10:37 am

MrTiger hat geschrieben:Was für eine Ordnung würdet ihr da wählen wenn der B-Baum als Index für ein virtual file system gebraucht wird? Vielleicht 2 oder 3 oder doch höher?
Interessante Frage... normalerweise habe ich ein recht brauchbares Bauchgefühl. In Anbetracht der Tatsache, dass ich mich nicht daran erinnern kann, einen Index für ein Filesystem geschrieben zu haben, vermutlich ich, dass das keine sehr alltägliche Aufgabe ist, die mit einer solchen Frage wie "Magst Du lieber 2 oder 3 Kugeln Vanilleeis?" viele qualifizierte Antworten findet.
(Wobei es klingelt was... ich glaube das war mal eine Aufgabe im Studium, aber ich kann mich nicht entsinnen, einen Index da geschrieben zu haben... Altersdemenz ;-))

Wenn mich wirklich die Leistungsunterschiede interessieren, ich also ein optimales Ergebnis haben will und das nichtmals annähernd abschätzen kann, was ich nehmen soll, nehme ich alles. Dann mache einen Testparcours, der möglichst gut meinen Anforderungen entspricht und jage reihenweise Implementationen dadurch.
Anschließend schaue ich, welche sich gut schlagen und warum. Ab da habe ich ein Bauchgefühl.
MrTiger hat geschrieben:Und was ist genau eine höhere order? Z.B. 100?
Ich denke, das ist eine Frage, die Du je nach Datum anders beantwortet bekommst.

Ich habe Arbeitsspeicher in 64kb Chips (nicht Speicherriegeln, die kamen später) gekauft. Mit einer zusätzlichen Speicherkarte, gegen die eine große Grafikkarte heute eher überschaubar wirkt, habe ich dann meinen 1MB Rechner auf unglaubliche 3MB aufgerüstet. Damals hätte man diese Fragen sicherlich anders beantwortet.

Auch hier kann man nur sagen: Probiere es aus! Was kann Deine Hardware, wie groß ist Dein Problem? Sammelst Du ein paar Dutzend Millionen von Files oder nur paar Dutzend?
Wenn Du es ausprobierst, wirst Du Erfahrungen sammeln, und ich vermute, genau darum geht es doch, oder? :-)
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Antworten