Angenommen, Sie hatten eine Tüte mit Kacheln, auf denen jeweils ein Buchstabe stand. Es gibt n A- Kacheln mit dem Buchstaben 'A', n B mit 'B' usw. und n ∗ 'Platzhalter'-Kacheln (wir haben n = n A + n B + ... + n Z + n ∗ ). Angenommen, Sie hätten ein Wörterbuch mit einer begrenzten Anzahl von Wörtern. Sie wählen k Fliesen aus dem Beutel ohne Ersatz. Wie würden Sie die Wahrscheinlichkeit berechnen (oder schätzen), dass Sie mit den ausgewählten k Kacheln aus dem Wörterbuch null Wörter bilden können ?
Für diejenigen, die mit Scrabble (TM) nicht vertraut sind, kann das Platzhalterzeichen für jeden Buchstaben verwendet werden. So könnte das Wort [ BOOT ] mit den Kacheln 'B', '*', 'O', 'T' 'geschrieben' werden.
Um eine Vorstellung von der Größe des Problems zu bekommen, ist klein, wie 7, n ist ungefähr 100, und das Wörterbuch enthält ungefähr 100.000 Wörter der Größe k oder kleiner.
edit: Mit 'ein Wort bilden' meine ich ein Wort mit einer Länge von nicht mehr als . Befindet sich das Wort [ A ] im Wörterbuch, so hat man durch Ziehen eines einzigen "A" aus der Tasche ein "Wort gebildet". Das Problem der Platzhalter wird radikal vereinfacht, wenn man davon ausgehen kann, dass das Wörterbuch Wörter der Länge 1 enthält. Denn wenn es welche gibt, kann jedes Ziehen eines Platzhalters automatisch einem Wort der Länge 1 entsprechen und man kann sich auf den Fall konzentrieren, in dem es keine Platzhalter gibt. Daher enthält die rutschigere Form des Problems keine Wörter mit einem Buchstaben im Wörterbuch.
Ich möchte auch ausdrücklich darauf hinweisen, dass die Reihenfolge, in der die Buchstaben aus der Tüte gezogen werden, unerheblich ist. Man muss die Buchstaben nicht in der "richtigen" Reihenfolge des Wortes zeichnen.
quelle
Antworten:
Dies ist ein (langer!) Kommentar zu der schönen Arbeit, die @vqv in diesem Thread gepostet hat. Es zielt darauf ab, eine endgültige Antwort zu erhalten. Er hat die harte Arbeit geleistet, das Wörterbuch zu vereinfachen. Alles, was bleibt, ist es, es in vollen Zügen zu nutzen. Seine Ergebnisse legen nahe, dass eine Brute-Force-Lösung möglich ist . Immerhin, einschließlich eines Platzhalters, gibt es höchstens Wörter, die man mit 7 Zeichen machen kann, und es sieht so aus, als ob weniger als 1/10000 von ihnen - sagen wir, ungefähr eine Million - werden Fehlt ein gültiges Wort.277= 10 , 460 , 353 , 203
Der erste Schritt besteht darin, das minimale Wörterbuch mit einem Platzhalterzeichen "?" Zu erweitern. 22 der Buchstaben erscheinen in aus zwei Buchstaben bestehenden Wörtern (alle außer c, q, v, z). Fügen Sie diesen 22 Buchstaben einen Platzhalter hinzu und fügen Sie diese in das Wörterbuch ein: {a ?, b ?, d ?, ..., y?} Sind jetzt drin. Auf ähnliche Weise können wir die minimalen Wörter mit drei Buchstaben untersuchen und einige zusätzliche Wörter verursachen im Wörterbuch erscheinen. Schließlich fügen wir "??" zum Wörterbuch. Nach dem Entfernen von Wiederholungen enthält es 342 minimale Wörter.
Eine elegante Methode, um fortzufahren - eine, die in der Tat nur sehr wenig Codierung verwendet - besteht darin , dieses Problem als algebraisch anzusehen . Ein Wort, das als ungeordnete Buchstabenfolge betrachtet wird, ist nur ein Monom. Beispielsweise ist "Gamaschen" das Monom . Das Wörterbuch ist daher eine Sammlung von Monomen. Es sieht aus wiea p s2t
(Um Verwechslungen zu vermeiden, habe ich für das Platzhalterzeichen geschrieben).ψ
Ein Rack enthält nur dann ein gültiges Wort, wenn dieses Wort das Rack unterteilt.
Eine abstraktere, aber äußerst leistungsfähige Art zu sagen ist, dass das Wörterbuch ein ideales im Polynomring R = Z [ a , b , … , z , ψ ] erzeugt und dass die Racks mit gültigen Wörtern im Quotienten Null werden Ring R / I , während Racks ohne gültige Wörter im Quotienten ungleich Null bleiben. Wenn wir die Summe aller Racks in R bilden und in diesem Quotientenring berechnen, entspricht die Anzahl der Racks ohne Wörter der Anzahl der verschiedenen Monome im Quotienten.ich R=Z[a,b,…,z,ψ] R/I R
Darüber hinaus ist die Summe aller Racks in einfach auszudrücken. Sei α = a + b + ⋯ + z + ψ die Summe aller Buchstaben im Alphabet. α 7 enthält ein Monom für jedes Rack. (Als zusätzlichen Bonus zählen die Koeffizienten die Anzahl der Arten, wie jedes Rack gebildet werden kann, so dass wir seine Wahrscheinlichkeit berechnen können, wenn wir möchten.)R α=a+b+⋯+z+ψ α7
Als einfaches Beispiel (um zu sehen, wie dies funktioniert) nehmen wir an, dass (a) wir keine Platzhalter verwenden und (b) alle Buchstaben von "a" bis "x" als Wörter betrachtet werden. Dann müssen die einzig möglichen Gestelle, aus denen Wörter nicht gebildet werden können, vollständig aus ys und zs bestehen. Wir berechnen modulo das Ideal, das von { a , b , c , … , x } schrittweise erzeugt wird, also:α=(a+b+c+⋯+x+y+z)7 {a,b,c,…,x}
Aus der endgültigen Antwort können wir die Wahrscheinlichkeit ablesen, dass ein Nicht-Wort-Rack entsteht: : Jeder Koeffizient zählt die Möglichkeiten, wie das entsprechende Rack gezeichnet werden kann. Zum Beispiel gibt es 21 (von 26 ^ 7 möglichen) Möglichkeiten, 2 ys und 5 zs zu zeichnen, weil der Koeffizient von y isty7+7y6z+21y5z2+35y4z3+35y3z4+21y2z5+7yz6+z7 entspricht 21.y2z5
Aus elementaren Berechnungen geht hervor, dass dies die richtige Antwort ist. Der springende Punkt ist, dass dieses Verfahren unabhängig vom Inhalt des Wörterbuchs funktioniert.
Beachten Sie, wie das Reduzieren des Leistungsmoduls auf jeder Stufe die Berechnung reduziert: Dies ist die Abkürzung, die durch diesen Ansatz aufgedeckt wird. (Ende des Beispiels)
Polynomalgebrasysteme implementieren diese Berechnungen . Hier ist zum Beispiel Mathematica- Code:
(Das Wörterbuch kann auf einfache Weise aus @ vqvs min.dict erstellt werden. Ich habe hier eine Zeile eingefügt, die zeigt, dass es kurz genug ist, um direkt angegeben zu werden, wenn Sie möchten.)
Der Ausgang - die 10 Minuten der Berechnung nimmt - ist 577958. ( NB In einer früheren Version dieser Nachricht hatte ich einen kleinen Fehler bei der Vorbereitung des Wörterbuch gemacht und erhielt 577940. Ich habe den Text bearbeitet zu reflektieren , was ich hoffe , ist jetzt die richtigen Ergebnisse!) Etwas weniger als die Millionen, die ich erwartet hatte, aber in der gleichen Größenordnung.
Um die Wahrscheinlichkeit zu berechnen , ein solches Rack zu erhalten, müssen wir die Anzahl der Möglichkeiten berücksichtigen, mit denen das Rack gezeichnet werden kann. Wie wir im Beispiel gesehen haben, entspricht dies seinem Koeffizienten in . Die Chance, ein solches Rack zu ziehen, ist die Summe aller dieser Koeffizienten, die leicht zu finden sind, wenn alle Buchstaben gleich 1 gesetzt werden:α7
Die Antwort ist gleich 1066056120, was eine Chance von 10,1914% des Zeichnens eines Racks ergibt, aus dem kein gültiges Wort gebildet werden kann (wenn alle Buchstaben gleich wahrscheinlich sind).
Wenn die Wahrscheinlichkeiten der Buchstaben variieren, ersetzen Sie einfach jeden Buchstaben durch die Wahrscheinlichkeit, dass er gezogen wird:
Die Ausgabe ist 1.079877553303%, die genaue Antwort (wenn auch unter Verwendung eines ungefähren Modells, Zeichnung mit Ersatz). Rückblickend dauerte es vier Zeilen, um die Daten einzugeben (Alphabet, Wörterbuch und Alphabethäufigkeiten), und nur drei Zeilen, um die Arbeit zu erledigen: Beschreiben Sie, wie Sie die nächste Potenz von modulo I nehmen, die siebte Potenz rekursiv nehmen und die ersetzen Wahrscheinlichkeiten für die Buchstaben.α I
quelle
Es ist sehr schwierig, ein Rack zu zeichnen, das in Scrabble und seinen Varianten kein gültiges Wort enthält. Unten ist ein R-Programm, das ich geschrieben habe, um die Wahrscheinlichkeit zu schätzen, dass das anfängliche 7-Felder-Rack kein gültiges Wort enthält. Es verwendet einen Monte Carlo-Ansatz und das Words With Friends- Lexikon (ich konnte das offizielle Scrabble-Lexikon nicht in einem einfachen Format finden). Jeder Versuch besteht darin, ein Rack mit 7 Feldern zu zeichnen und dann zu überprüfen, ob das Rack ein gültiges Wort enthält.
Minimale Wörter
Sie müssen nicht das gesamte Lexikon durchsuchen, um zu überprüfen, ob das Rack ein gültiges Wort enthält. Sie müssen nur ein minimales Lexikon scannen, das aus minimalen Wörtern besteht. Ein Wort ist minimal, wenn es kein anderes Wort als Teilmenge enthält. Zum Beispiel 'em' ist ein minimales Wort; "leer" ist nicht. Der Punkt dabei ist, dass ein Rack, wenn es das Wort x enthält, auch eine Teilmenge von x enthalten muss . Mit anderen Worten: Ein Rack enthält keine Wörter, wenn es keine minimalen Wörter enthält. Glücklicherweise sind die meisten Wörter im Lexikon nicht minimal und können daher entfernt werden. Sie können auch permutationsäquivalente Wörter zusammenführen. Ich konnte das Lexikon Words With Friends von 172.820 auf 201 minimale Wörter reduzieren.
Ich würde gerne sehen, ob jemand einen effizienten exakten Algorithmus entwickeln kann. Ein naiver Ansatz, der auf Inklusion und Exklusion basiert, könnte eine kombinatorische Explosion beinhalten.
Inklusion Exklusion
Ich halte das für eine schlechte Lösung, aber hier ist trotzdem eine unvollständige Skizze. Im Prinzip kann man ein Programm schreiben, um die Berechnung durchzuführen, aber die Spezifikation wäre mühsam.
Dann
Scannen aller möglichen Racks
Monte Carlo R-Programm
quelle
Der zweite Grund ist, dass MC tatsächlich machbar ist: Sie müssen es einfach richtig machen. Der vorstehende Absatz gibt einen Hinweis: Generieren Sie Wörter nicht einfach nach dem Zufallsprinzip und schlagen Sie sie nach. Analysieren Sie stattdessen zuerst das Wörterbuch und nutzen Sie dessen Struktur aus.
Eine Modifikation ist erforderlich, um mit Platzhaltern umzugehen: Ich lasse die Programmierertypen unter Ihnen darüber nachdenken. Die Wörterbuchgröße wird nicht vergrößert (es sollte sie tatsächlich verkleinern). Dadurch wird die Durchquerung des Baums etwas verlangsamt, ohne dass dies grundlegend geändert wird. In jedem Wörterbuch, das ein Wort mit einem Buchstaben enthält, wie in Englisch ("a", "i"), gibt es keine Komplikationen: Das Vorhandensein eines Platzhalters bedeutet, dass Sie ein Wort bilden können! (Dies deutet darauf hin, dass die ursprüngliche Frage möglicherweise nicht so interessant ist, wie es sich anhört.)
Ich wette, Sie könnten diese Studie mit einem echten Scrabble-Set und einer Million Iterationen in Sekunden durchführen.
quelle
Monte-Carlo-Ansatz
Direkte Annäherung
und
(Einschließlich der Auswirkungen von Wildcard-Kacheln ist ein bisschen kniffliger. Ich werde dieses Problem vorerst aufschieben.)
Die gewünschte Wahrscheinlichkeit ist also:
quelle