Finden anagaram(s) Wörterbuch
Wie kann ich eine input word (oder Buchstabenfolge) und Ausgabe ein Wort aus einem Wörterbuch mit genau diesen Buchstaben?
Funktioniert java hat ein Englisch-dictionary-Klasse (Liste der Wörter), die ich verwenden kann, oder gibt es open-source Implementierungen dieser?
Wie Optimiere ich meinen code, wenn dies getan werden muss, um wiederholt?
- google nach "wordlist" und Sie finden eine Menge von Listen von englischen Wörtern.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Konvertieren Sie Ihre Wörterbuch, in eine Anagramm-Wörterbuch. Im Anagramm-Wörterbuch, die Wörter werden indiziert, indem Sie deren Buchstaben in alphabetischer Reihenfolge sortiert. Zum nachschlagen Anagrammen für einen bestimmten Begriff, Sie sortiert die Buchstaben und schauen Sie nach entsprechenden Werte aus der Anagramm-Wörterbuch.
Sind zwei Worte gesagt, anagramme, wenn Sie die genau gleiche Buchstaben, gleiche Anzahl mal.
Check für Anagramm ist das Sortieren der Buchstaben der beiden Wörter und überprüfe auf Gleichheit:
Nun an finden Sie alle anagramme der gegebenen Wörterbuch Wort sagen
word1
, würde ich alle Wörter im Wörterbuch, für die die oben genannten test hat. Zur Optimierung der Suche kann nur nach Worten suchen, die von gleiche Länge.Wenn wir zu tun haben, das immer wieder es besser zu tun, einige Vorverarbeitung. Wir bauen so etwas wie eine
HashMap
wo würden wir der Karte einestring
zu einer Reihe vonstrings
die anagramme. So etwas wie:Nun jedes Wort, dass ich schauen kann in der
hashMap
seine anagramme.Können Sie Anagrams2 Beispiel von der Sun-Website als Ausgangspunkt
Zur Verbesserung der Leistung, können Sie einen cache anagramme für Häufig verwendete und kürzlich verwendeten Wörter.Erwägen Sie die Verwendung WeakHashMap für diesen Zweck
Als unicornaddict erwähnt, kann man ziemlich leicht feststellen, ob zwei Wörter sind anagramme, indem Sie Sie Sortieren, dies ist jedoch ineffizient, vor allem, wenn Sie tun es immer wieder.
Vorbereitet hash-Tabelle wäre wahrscheinlich die beste Lösung, laden Sie Ihr Wörterbuch in es an den Anfang des Programms. Ein ziemlich einfach-zu-schreiben-Algorithmus für das hashing/Vergleich wäre
dann
Mein Java ist ziemlich rostig, aber ich denke, dass es tun würde.
Aus meiner POV, der Schlüssel zu dieser Zuordnung ist die Funktion zu finden (
hashFunc
), die Karten strings zu zahlen, so dass 1) zwei anagramme zugeordnet sind, die gleiche Zahl, 2) zwei nicht-anagramme zugeordnet sind verschiedene zahlen. Sobald die Funktion gefunden, kann es sein, einfach nur auf Eingaben und vermeiden so langwierige string-Vergleiche:Auf unix-Systemen, starten Sie mit dem Wörter Datei
Drehen Sie das Wörterbuch in eine hash-Tabelle mit vorberechneten
hashFunc
.