Algorithmus zum Berechnen der Wahrscheinlichkeiten einer Zahl, die beim Öffnen eines Buches gezeichnet wird

8

Ich habe ein Buch mit N & lt; 10000 Seiten und eine Zahl x (im Bereich 1 & lt; = x & lt; = 40). Ich möchte die Wahrscheinlichkeit berechnen, dass, wenn das Buch zufällig geöffnet wird, die Kombination der Ziffern der geöffneten Seiten des Buches gleich der Zahl ist.

Die "Ebene der Kombinationen" kann variieren: von der einfachen Summe der Ziffern (das Ereignis p.234 ist wahr für x = 9), bis zur Kombination von Summen und Subtraktionen bis zu Paaren von Ziffern [das Ereignis p.124 ist wahr für x = 1, 2, 3 (4-1), 4, 5 (4 + 1), 6 (2 + 4), 7 (1 + 2 + 4), 8 (12-4), 12, 14, 16 (14 + 2), 23 (24-1), 24, 25 (24 + 1)]

Eine Anfangsnotiz ist, dass Sie, wenn Sie ein Buch öffnen, immer Seite n und Seite n + 1 erhalten, also sollte die Wahrscheinlichkeit für das Paar (2n-1,2n) für jedes n, 1 berechnet werden

Hier, was ich mache

%Vor%

Die erste Methode berechnet die Summe der Ziffern einer Zahl, die zweite die Wahrscheinlichkeit, dass die geöffnete Seitenzahl gleich dem x ist, oder ihre Ziffernsumme ist. Der dritte Scheck enthält auch Ziffern.

1) Ich zähle nicht die Note, die ich vorher gemacht habe.

2) Ich werde dies auf einem mobilen Gerät ausführen.

3) Im Moment habe ich wirklich das Gefühl, dass die Ergebnisse falsch sind.

Ich habe mich gefragt, ob eine Tabelle vorberechneter Ergebnisse besser passen würde. Ich weiß, dass N & lt; 10000, also kann ich ein Array [40] [10000] zum Speichern der Ergebnisse verwenden, die zur Laufzeit geladen werden, aber ich bin nicht scharf auf Dateimanipulationen in Java, zusätzlich muss ich das für, sagen wir, 4 speichern verschiedene Methoden zur Berechnung der Wahrscheinlichkeit, also, wie viel Speicher würde es verbrauchen? Und ist es ein Problem, dies zur Laufzeit zu berechnen? Gibt es dafür einen besseren Ansatz (oder vielleicht einen bereits geschriebenen Algorithmus)?

    
Makers_F 14.10.2011, 15:27
quelle

2 Antworten

1

Berechnen Sie die Anzahl der Summen von 1 & lt; = Seite # & lt; = N, wobei N die Anzahl der Seiten ist. Es ist weit weniger als 10.000, weil 1 und 10 und 100 und 1000 und 10000 alle der Summe 1 zugeordnet werden. Der maximale Wert, den Sie haben werden, kommt von 9999 = & gt; 36. Sie können mit einer Karte beginnen, bei der die Seite # der Schlüssel ist und die Summe der Wert ist, dann umkehren und eine Karte haben, wo summe der Schlüssel ist und eine Liste von Seiten, deren Zahlensumme gleich dem Schlüssel ist, ist der Wert.

Bei 10.000 Seiten liegen alle möglichen Summen zwischen 1 und 36.

Wenn Sie also eine Zufallszahl aus einem Bereich auswählen, verwenden Sie diese als Schlüssel für die umgekehrte Karte, um die Liste der Seiten zu erhalten, die dieser Summe zugeordnet sind. Die Länge dieser Liste geteilt durch die Anzahl der Seiten ist die gewünschte Wahrscheinlichkeit.

So würde ich es machen:

%Vor%     
duffymo 14.10.2011, 18:41
quelle
0

So würde ich es machen.

Definieren Sie eine Schnittstelle DigitCombinationStragtegy mit einer einzigen Methode: Set<Integer> combineDigits(int pageNumber) .

Schreiben Sie eine Implementierung dieser Schnittstelle für jede Art der Kombinierung der Ziffern: SumDigitCombinationStraggteg, SubtractionDigitCombinationStraggteg, usw. Jede Strategie gibt die Menge der erzeugten Kombinationen zurück. Dies ist der schwierigste Teil des Problems. Aber die Implementierung von nur kleinen Teilen ist einfacher als die ganze Sache, und Sie können leicht jede Strategie einzeln testen.

Schreiben Sie eine Implementierung dieser Strategie, die nur eine Reihe anderer Strategien verwendet und alle zurückgegebenen Mengen kombiniert.

Wenn Sie nach einem Buch und einer Zahl N gefragt werden, initialisieren Sie zwei Zahlen auf 0: hits und misses . Instanziieren Sie die entsprechende Strategie. Iterieren Sie durch die Seiten (oder Seitenpaare) und fragen Sie nach der Strategie, welche Zahlen erzeugt werden. für diese Seite (oder dieses Paar Seiten). Wenn die Menge N enthält, erhöhen Sie Treffer. Andernfalls erhöhen Sie die Anzahl der Fehler.

Die Wahrscheinlichkeit ist Treffer / (Treffer + Fehlschläge).

    
JB Nizet 14.10.2011 16:28
quelle

Tags und Links