Laden...

Forenbeiträge von MrTiger Ingesamt 3 Beiträge

23.03.2013 - 00:28 Uhr

Und warum meinst du, dass das in einem B-Baum geht? Bzw. wenn es in einem B-Baum geht, warum sollte es dann nicht in einer SortedList oder einem Dictionary gehen? Natürlich muss der Key in einem Dictionary (und auch in einer SortedList) eindeutig sein, aber das Value kann man ja beliebig wählen; es kann also auch eine Liste sein.

Weil ein B-Baum hierarchisch ist. Also die inneren Knoten speichern ja Verzeichnissnamen bzw. Links zu Verzeichnissen und die Blätter Filenamen bzw. Links zu Files. Ich stelle mir das so vor: Wenn man eine Datei mit folgendem Pfad hat C:\folder1\file1 dann hat man einen root Knoten mit label "C", der auf das C Verzeichnis zeigt, dann hat man einen Kindknoten mit Label "folder1" und dieser hat einen Kindknoten mit Label "file1".

Oder sehe ich das falsch? Eine SortedList bzw. Dictionary ist ja nicht hierarschisch und dann würde das obige Verfahren nicht gehen.

Weiterhin brauche ich von den Indexes ja irgendeinen Link in das .zip File, d.h. in die virtual Disk. D.h. das obige Beispiel C:\folder1\file1 ist ja im .zip file hierarchisch vorhanden. Der Die Indexeintrage "C", "folger1" und "file1" sollten ja dann an die entsprechenden Stellen im .zip file zeigen.

Wie kann ich das realisieren?

Klar, kann man machen. Allerdings sollte auch nicht so schwer sein, die Daten in einem lesbaren Format in eine Datei zu schreiben und später zurück zu lesen. Im einfachsten Fall speichert man alles als Liste, die man beim Einlesen mit den normalen Operationen, die auch sonst benutzt werden, in die Datenstruktur (egal, für welche du dich entscheidest) einfügt.

Ok, das ist eine gute Idee. D.h. also dass ich einfach den Inhalt jedes Knoten in einer Liste speichere? Wie kann man das dann aber in ein File schreiben? Bin da noch nicht so bewandert. Also vielleicht einfach jedes Element der Liste auf eine neue Zeile in einem .txt File schreiben?

Das braucht ja wohl wahrscheinlich weniger Speicherplatz als Objekte serialisieren, ist das dann aber nicht viel langsamer?

21.03.2013 - 15:34 Uhr

Ich danke euch vielmals.

Ich muss das jetzt vielleicht etwas spezifizieren. Es geht um ein virtual file system und ich möchte dazu eine Indexstruktur erstellen. D.h. die Dateien im file system sollen indiziert werden.

Ich sehe da jetzt zwei Möglichkeiten:

  1. Einen B-Baum gebrauchen so wie es Mallett vorgeschlagen hat. Da ist dann halt das Problem, dass ich solche B-Bäume eben nur auf dem Papier kenne und nur auf dem Papier mit ihnen gearbeitet habe. Implementiert habe ich noch nie einen, daher bin ich mir über die Klassenstruktur und die Implementationsdetails unsicher.

Gibt es für B-Bäume keine library? Oder gibt es vielleicht einen example code in C# welches einen B-Baum zeigt? V.a. das einfügen eines neuen Elementes in einen B-Baum stelle ich mir noch schwer zu implementieren vor wegen rebalancing etc.

Was würden die inneren Knoten und die Blätter des B-Baums genau speichern? Also würden dann die inneren Knoten einfach die directory Namen speichern und diese auf den entsprechenden Ort mappen und die Blätter würden die Filenamen halten?

  1. Eine SortedList verwenden wie f_igy vorgeschlagen hat oder einen Dictionary. Das wäre ja dann einfach und das einfügen, suchen etc. bereits vorhanden. Funktioniert das aber für einen Index auf einem file system? Es ist ja möglich, dass zwei Files mit dem gleichen Namen aber in unterschiedlichen directories existieren und das könnte man ja dann nicht in einer SortedList oder Dictionary speichern, da ja da keys nur einmal vorkommen dürfen. Oder würde man einfach als Indexelement direkt den ganzen Pfad speichern? Dann wüde man aber die Hierarchie verlieren.

  2. Der Index soll noch persistent gemacht werden, d.h. wenn das Programm beendet wird soll der Index weiterbestehen, d.h. muss in eine Datei geschrieben werden. Wie macht man das? Könnte man z.B. das Objekt einfach serialisieren und in eine Datei schreiben und bei Gebrauch des Indexes einfach wieder deserialisieren?

21.03.2013 - 01:48 Uhr

Hi

Ich habe eine kleine Frage. Und zwar möchte ich in C# eine B-Baum Indexstruktur auf Files erstellen (also z.B. eine Liste von Filenamen). Diese Indexstruktur soll dann z.B. zum effizienten Suchen von Filenamen verwendet werden.

Wie würde man so etwas in C# realisieren? Habe da leider gerade gar keine Idee. Habe nämlich noch fast keine Erfahrung in C#. Ich habe daran gedacht, die Indexstruktur in ein separates .db files zu speichern, aber wen man das so machen würde, wie würde man dises File kreeiren, verwalten etc.?

Wie B-Bäume funktioneiren weiss ich, allerdings nur in der Theorie.