So erstellen Sie eine einfache Präfix-index in Java?
Ich habe große Gruppe von urls und ich umsetzen möchten-Vervollständigung. Ich weiß nicht, wie die Komplexität der naive Ansatz, da Sie linear mit der set-Größe:
for(String url: urls) if(url.startsWith(input) {doSomething();}
Jetzt weiß ich, dass in einem Hash-Set, die Funktion "contains()" funktioniert in "O(1) -" es gibt aber keine "containsPrefix()". Gibt es eine einfache Möglichkeit, ohne Verwendung einer großen Bibliothek wie Lucene oder Codierung selbst? Ich hätte kein problem es zu tun, aber es scheint übertrieben für so ein einfaches problem, also ich möchte wissen, ob es eine bereits vorhandene Lösung einfach 🙂
Aus meinem informatik-Unterricht erinnere ich mich an einen Baum, der aus der string-Fragmente aber ich habe vergessen, wie es hieß. Es funktionierte folgendermaßen:
[car, care, carrot,carrotville]->
car
|
-/
-e
-rrot
|
----ville
P. S.: Wie kann ich die Methoden aufrufen, die gibt alle Zeichenfolgen, die ein string-Präfix? Wie wenn a ist Präfix von b, was b zu a?
- was möchten Sie tun ? automatisches hinzufügen von text am Anfang jeder Kette ?
- Ich möchte wissen, welche Zeichenfolgen mein string ist ein Präfix, so kann ich Ihnen die Autovervollständigung-Vorschläge.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie brauchen, um effizient zu finden Präfixe der strings, verwenden Sie eine Trie, eine Daten-Struktur entwickelt, die genau für diesen Zweck:
Zwei links mit Beispiel Implementierungen.
Langer Zeit habe ich einen einfachen Trie-Implementierung hier:
http://code.google.com/p/triebag/source/browse/trunk/src/triebag/tries/SimpleTrie.java
Dies ist jedoch nicht ein kompakter Trie, erzeugt so ein Knoten pro Zeichen, wodurch eine kompakte eins ist ein bisschen schwieriger.
SimpleTrie<String> trie = new SimpleTrie<>(); trie.add("x","x"); trie.add("xy","xy"); Iterator it = trie.getItemsWithPrefix("x"); while(it.hasNext()) System.out.println(it.next());
Eine gute alternative algo ist ein ternary search tree (mehr Speicher effizient) https://github.com/varunpant/TernaryTree/tree/master/TernaryTree
hier ist ein trie, in java http://algs4.cs.princeton.edu/52trie/TrieST.java.html
Die Regexp-Implementierung java.util.regex.Muster können effizient zu handhaben Präfixe:
Können Sie testen alle Präfixe:
Hinweis: für die Einfachheit, Präfix-strings sind nicht entgangen. Regexp-Zeichen [, ], \, *, ?, $, ^, (, ), {, } und | werden mit dem Präfix \.