Erhalte effizient eine Teilmenge von Strings "startingWith" aus einer Menge

8

Ich habe eine große Menge von Strings und möchte dafür eine automatische Suggestionsfunktion erstellen.

Angenommen, die Menge ist ["foo", "fighter"]

Das Eingeben von "f" sollte beide Werte zurückgeben und das Eingeben von "fo" sollte nur "foo" zurückgeben.

Momentan durchlaufe ich nur das Set und filtere die Ergebnisse heraus, indem ich startsWith aufruft, aber es ist zu langsam.

Der Standard TreeSet mit seinen Teilmengenfunktionen hilft hier nicht viel, da er nur einen RB-Baum implementiert.

Gibt es eine effiziente Lösung in der Java-API oder muss ich meine eigene Set -Implementierung erstellen?

Bearbeiten: Meine Implementierung sieht so aus, mit Andrey Naumenkos Trie Datenstrukturen . Beachten Sie, dass Sie die Array-Größe erhöhen müssen, wenn Sie erweiterte ASCII-Zeichen verwenden möchten. Wenn Sie List anstelle von Map verwenden, erhalten Sie die Ergebnisse in einer sortierten Reihenfolge.

%Vor%     
Konstantin W 16.04.2015, 13:55
quelle

1 Antwort

11

Was Sie suchen, ist eine Präfixbaum-Datenstruktur: Ссылка

Der Code hier hilft Ihnen: Ссылка

    
Riko 16.04.2015, 13:57
quelle