Datenstruktur, um den Namen der Dateien zu suchen und ihren Pfad zu erhalten

9

Ich werde Namen von Dateien dynamisch hinzufügen, ungefähr bis zu einer Milliarde Namen. Außerdem möchte ich auch den Pfad speichern, in dem sich die Dateien befinden, um die folgenden Abfragen auszuführen:

  • Suche, ob der Name einer Datei gespeichert wird, um ihren Pfad zu erhalten.
  • Den Namen aller Dateien suchen, die mit einer Teilzeichenkette übereinstimmen, eine Art Like-Query (z. B. Wenn eine Suche * o *, es gibt mir Joel, Hola, Ola, Oso, Osea, Algo, wenn a Suche aa *, es wird mir aaab zurückgeben und wenn ich * so suche, wird es oso) zurückgeben.
  • Löschen Sie den Namen einer Datei.

Ich versuche also, eine Art von Datenstruktur wie folgt zu erstellen:

Ich habe 26 Knoten (das englische Alphabet az, ich werde nicht alle Knoten in das Bild einfügen, weil space) so, dass, wenn ich das Wort "hola" einfügen, dann eine Kante aus dem Knoten mit dem Buchstaben 'h erstellen 'zu Knoten mit dem Buchstaben' o 'und dessen Kante hat eine Daten 1, da diese Zahl das Niveau der Tiefe darstellen. Außerdem werde ich in dem Knoten, in dem 'a' gespeichert ist, eine Map-Struktur haben, um den Pfad der Datei zu speichern, da ich sicher viele Pfade in dem Knoten gespeichert habe, der den Buchstaben 'a' enthält. .

Nachdem ich das gesagt hatte, fügte ich die folgenden Wörter ein: Joel, Hola, Ola, Oso, Osea, Algo, Aaab.

Ich habe das getan, weil ich nicht viele Knoten mit den Sama-Lettern haben möchte (z.B. a, b, usw.), aber das Problem ist, dass ich viele Kanten bekommen habe und die Struktur benötigt

Speicherbytes (ich programmiere in C ++) wobei w eine Zeichenfolge der Größe ist .

Wie Sie sehen, wenn ich nach dem Namen der Datei "jola" suche (die nicht eingefügt ist), wird kein Pfad zurückgegeben und dies sagt uns, dass diese Datei nicht gespeichert wird.

  

Wie kann ich das verbessern? Kann man die Anzahl der Kanten reduzieren? oder gibt es eine bessere Struktur und einen Weg, dies zu tun? Ich bin sehr offen dafür, irgendeinen Vorschlag zu hören.

    
antoniov.joel 12.11.2017, 01:27
quelle

1 Antwort

-1

Sie können entweder eine DAG (Directed Azyklic Graph) oder auch die disjunkte Set-Operation-Technik (Quick-Find-Technik (* als Hauptziel) verwenden))

    
sayantan 05.01.2018 03:11
quelle