Originally Posted by
Cacarulo
No, I used the same model that I used for the coin toss, but obviously with the corresponding probabilities. I added the probability of a tie to the probability of winning.
You can also check those numbers on the website suggested by Don:
https://sites.google.com/view/krapstuff/home
I think you also know that my results were simulated, although they coincide quite accurately with the results obtained from online calculators.
There is no combinatorial analysis involved.
Sincerely,
Cac
This is my implementation.
Code:
#include <iostream>
#include <vector>
#include <cmath>
long long binomialCoefficient(int n, int k) {
std::vector<long long> dp(k + 1, 0);
dp[0] = 1;
for (int i = 1; i <= n; ++i) {
for (int j = std::min(i, k); j > 0; --j) {
dp[j] = dp[j] + dp[j - 1];
}
}
return dp[k];
}
double binomialProbability(int n, int k, double p) {
long long coeff = binomialCoefficient(n, k);
double prob = coeff * std::pow(p, k) * std::pow(1 - p, n - k);
return prob;
}
// Function to calculate the binomial cumulative distribution function
double binomialCDF(int k, int n, double p) {
double cdf = 0.0;
for (int i = 0; i <= k; ++i) {
cdf += binomialProbability(n, i, p);
}
return cdf;
}
// Function to calculate the probability of exactly one streak of length l in n trials
double probabilityOfExactStreak(int l, double p, int n) {
if (l > n) return 0; // No streaks possible if l > n
double q = 1.0 - p;
double totalProbability = 0.0;
// Calculating the probability of having exactly one streak starting at position k
for (int k = 0; k <= n - l; ++k) {
// Probability of a streak of exactly length l starting at position k
double probStreak = (k + l < n) ? std::pow(p, l) * q : std::pow(p, l);
// Probability that there are no streaks of length l before k
double probNoStreakBeforeK = 1 - binomialCDF(l - 1, k, p);
// Probability that there are no streaks of length l after k + l
double probNoStreakAfterKL = (k + l < n) ? 1 - binomialCDF(l - 1, n - (k + l) - 1, p) : 1;
// Adding the contribution of the streak starting at k and no other streaks of the same length
totalProbability += probStreak * probNoStreakBeforeK * probNoStreakAfterKL;
}
return totalProbability;
}
Bookmarks