Am besten Algorithmus zu finden Anagramm des Wortes aus dictonary
Mich war das ein problem, so etwas wie dieses
Habe ich eine Liste, die ist im Wörterbuch mit Millionen von Wörtern, und ich bin da input ein Wort wie OSPT onlt 2 Wörter die gebildet werden können, STOP und POST..
Ich möchte herausfinden, alle Anagramm gleiche Wörter in dictonary in optimierter Weise.
Was ich gelöst.
Gab ich unten die Lösung.Ich nehme das Wort und permutiert Sie Sie und markieren das Wort existiert im Wörterbuch oder nicht.Aber ist das n*n nicht optimiert.Gibt es eine Möglichkeit, dieses Problem zu lösen
- wie würde das helfen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sortieren Sie die Zeichen in jedem Wort alphabetisch nach Schlüssel in form einer Karte, deren Werte sind die Listen der Wörter, die für diese Taste.
Wenn Sie ein Wort gegeben zu finden, der anagramme für Sortieren Sie die Zeichen in word alphabetisch und tun eine Suche in der Karte.
Durch Ihr Beispiel und durch das Wort POOL, Sie bekommen würde:
Den Java-code wäre so etwas wie:
Können Sie dies tun.
Den index kostet einmal, und O(N), wo N ist die Anzahl der Wörter.
Nach, dass die Kosten für das Sortieren ist O(M log M) Sortieren die Briefe, wo M ist die Anzahl der Buchstaben. Dies ist sehr Billig im Vergleich zu den Kosten der Berechnung von Permutationen.
BTW Dieser Ansatz, die Worte werden nur einmal gescannt, im Voraus.
Kann dies auf folgende Weise:
Für das gegebene Wort halten, eine Zählung aller Zeichen. Zum Beispiel für OSTP,
Können Sie ein array mit 26 Elementen wie diesem.
Dann während der Iteration durch das Wörterbuch, prüfen Sie einfach, welches Wort hat die gleiche Anzahl Zeichen.
Können Sie Vorverarbeiten Ihrer Liste: ersetzen Sie jedes Wort mit seiner sortiert Anagramm (d.h. abacaba wird aaaabbc). Diese Zeichenfolge eindeutig repräsentiert ein beliebiges Wort, das ist das Anagramm zu dem Wort aus dem Wörterbuch.
Dann, wenn Sie erhalten eine Abfrage, Sortieren, Buchstaben und prüfen, ob dieses Wort wird in aufbereiteter Wörterbuch.
Für beste Geschwindigkeit, Sie können die Karte der Zeichen, der in einzelne prime-Werte, multiplizieren Sie (stellen Sie sicher, dass Sie groß genug zahlen), und verwenden Sie das Produkt als eine numerische Taste für die Speicherung der gültigen Permutationen. Jede Zahl ist einzigartig für die gegebene Menge von Permutationen wie die Charaktere bilden eine einzigartige prime Aufspaltung.
Gegeben, ein Wort, wiederholen Sie den Vorgang, um den Wert und Zugriff auf das Wörterbuch direkt mit dass. Ähnlich sortiert, Saiten-Lösung, sondern spart den Aufwand der Sortierung und vereinfacht die Schlüssel-Vergleiche.
Siehe auch hier für eine Verwandte Lösung in c - Generieren gleichen eindeutigen hash-code für alle anagramme