Guten Algorithmus und Datenstruktur für das suchen nach Wörtern mit fehlenden Buchstaben?

so muss ich schreiben, ein effizienter Algorithmus für das suchen nach Wörtern mit fehlenden Buchstaben in einem Wörterbuch und ich will, dass die Menge der möglichen Worte.

Zum Beispiel, wenn ich in th??e, ich könnte wieder diese, diese, Thema gibt.etc.

Ich Frage mich, ob jemand vorschlagen kann, einige Datenstrukturen Algorithmus ich verwenden soll.

Dank!

EDIT: EIN Trie ist auch Raum ineffizient und würde es zu langsam. Weitere Ideen, änderungen?

UPDATE: Es wird bis zu ZWEI Fragezeichen und wenn zwei Fragezeichen auftreten, Sie werden auftreten, in der Reihenfolge.

Derzeit bin ich mit 3 hash-Tabellen für die wenn es ist eine exakte übereinstimmung, 1 Fragezeichen, und 2 Fragezeichen.
Gegeben ein Wörterbuch, das ich hash-alle möglichen Worte. Zum Beispiel, wenn ich das Wort WORT. Ich hash-WORT ?ORD, W?RD, WO?D, WOR?, ??RD, W??D, WO??. in das Wörterbuch. Dann benutze ich eine link-Liste zu verknüpfen, die Kollisionen zusammen. Also sagen wir, hash(W?RD) = hash(STR?NG) = 17. hashtab(17) Punkt-zu-WORD-und WORD-Punkte-zu-STRING, weil es eine verknüpfte Liste.

Timing auf die Durchschnittliche lookup eines Wortes ist etwa 2e-6s. Ich bin auf der Suche, besser zu machen, vorzugsweise in der Größenordnung von 1e-9.

EDIT: ich habe nicht sah das problem wieder, aber es dauerte 0,5 Sekunden für 3m-Einträge Einfüge, und es dauerte 4 Sekunden für 3m-lookup-Einträge.

Dank!

  • Warum bist du nicht verwandelt diese in reguläre Ausdrücke und suchen? Was Versprechen Sie sich? Welche Erwartungen haben Sie? Welche Einschränkungen haben Sie?
  • Wie schnell würden reguläre Ausdrücke werden? Ich weiß, was Sie sind, aber ich weiß nicht, wie Sie tatsächlich funktioniert. Ich kann nur traverse durch das gesamte Wörterbuch, aber das wäre Theta(N). Ich Frage mich, ob ich besser machen kann.
  • Was bedeutet die Struktur des Wörterbuchs Aussehen?
  • Jetzt ist es nur eine text-Datei mit allen Wörtern in alphabetischer Reihenfolge aufgelistet.
  • Aktualisieren Sie die Frage. Bitte nicht kommentieren, eine Frage, die Sie besitzen. Sie eigenen in Frage. Sie können Sie aktualisieren, um alle Informationen enthalten. Bitte aktualisieren Sie die Frage.
  • wie viele Wörter im Wörterbuch? was ist der Bereich der Längen? was alphabet verwendet wird?
  • Warum genau würde eine space-ineffizient trie zu langsam? Rechnen Sie mit einer Ladung mehr Daten als Verfügbarer Speicher und schafft so viele Seitenfehler?
  • Es ist das Englisch-Wörterbuch, das zwischen 200 - 500k Wörter
  • Es klingt wie die Lösung, die Sie Hinzugefügt haben, die Frage ist äquivalent zu Anna ' s ersten Vorschlag (der hash), außer, dass Sie können unerwünschte Kollisionen. Wenn Sie wechseln Sie einfach zu Ihrem Vorschlag, den Sie verwenden werden, über die gleiche Menge an Speicher (also viele), aber Sie nicht haben, um zu überprüfen, die gesamte hash-Eimer für Kollisionen jeder Zeit, die Sie viel schneller.
  • 1e-9 Sekunde pro Suche ist ein Milliarden Suchanfragen pro Sekunde. Der Computer in der Regel über die Uhren im Bereich von 1-3 Milliarden Takte pro Sekunde. Also selbst wenn man das pipelining zu berücksichtigen, und vorausgesetzt, keine Schleifen, das ist kaum realistisch.
  • Sind Sie zufällig machen ein scrabble AI? (Da gibt es maximal 2 Leerzeichen im Spiel...)
  • aber die Frage sagt die Rohlinge müssen benachbart sein, das ist nicht wahr, in Scrabble.
  • 1e-9 ist einer Nanosekunde - das ist ungefähr so viel Zeit wie es dauert, einen normalen PC um zwei zahlen zu addieren. Es ist nichts falsch mit Ihrem Algorithmus, was Sie brauchen, ist ein super-computer.

InformationsquelleAutor SuperString | 2009-12-23
Schreibe einen Kommentar