Das ist eigentlich ein interessantes Problem. Ich wurde inspiriert, einen Blogbeitrag darüber zu verfassen, der im Detail faire von unfairen Münzwürfen bis hin zur Situation des OP mit einer unterschiedlichen Wahrscheinlichkeit für jede Münze behandelt. Sie benötigen eine Technik namens dynamische Programmierung, um dieses Problem in polynomieller Zeit zu lösen.
Allgemeines Problem: Gegeben C eine Reihe von n Münzen p zu pn wo pi stellt die Wahrscheinlichkeit von der i -th co im Kopf kommt, was ist die Wahrscheinlichkeit von k Köpfe aus dem Werfen aller Münzen kommen?
Dies bedeutet, die folgende Rekursionsformel Lösung:
P (n, k, C, i) = pi x P (n -1, k -1, C, i +1) + (1- pi) x P (n, k, C, i +1)
Ein Java-Codefragment, das Folgendes enthält:
private static void runDynamic() {
long start = System.nanoTime();
double[] probs = dynamic(0.2, 0.3, 0.4);
long end = System.nanoTime();
int total = 0;
for (int i = 0; i < probs.length; i++) {
System.out.printf("%d : %,.4f%n", i, probs[i]);
}
System.out.printf("%nDynamic ran for %d coinsin %,.3f ms%n%n",
coins.length, (end - start)/1000000d);
}
private static double[] dynamic(double... coins) {
double[][] table = new double[coins.length + 2][];
for (int i = 0; i < table.length; i++) {
table[i] = new double[coins.length + 1];
}
table[1][coins.length] = 1.0d; // everything else is 0.0
for (int i = 0; i <= coins.length; i++) {
for (int j = coins.length - 1; j >= 0; j--) {
table[i + 1][j] = coins[j] * table[i][j + 1] +
(1 - coins[j]) * table[i + 1][j + 1];
}
}
double[] ret = new double[coins.length + 1];
for (int i = 0; i < ret.length; i++) {
ret[i] = table[i + 1][0];
}
return ret;
}
Was dies tut, wird eine Tabelle erstellt, die die Wahrscheinlichkeit zeigt, dass eine Folge von Münzen aus p i zu p nk Köpfe enthalten.
Für eine tiefere Einführung in die Binomialwahrscheinlichkeit und eine Diskussion darüber, wie man dynamische Programmierung anwenden kann, werfen Sie einen Blick auf Coin Tosses, Binomials and Dynamic Programming.
Sie für eine geschlossene Form Ausdruck suchen sind? – dirkgently
Bitte beachten Sie den aktualisierten Beitrag. – cletus