Last active
January 8, 2018 21:28
-
-
Save AparaV/f5d9278e250331b5ca31a63db2a2d749 to your computer and use it in GitHub Desktop.
Companion code for my Number Guessing Game article - https://aparav.github.io/2018/01/08/the-number-guessing-game/
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
''' | |
Author: Aparajithan Venkateswaran | |
Companion Article: https://aparav.github.io/2018/01/08/the-number-guessing-game/ | |
''' | |
from scipy.special import comb | |
def conditional_prob(i, k, n, m): | |
''' | |
Calculates the probability of event C conditioned on Ri | |
''' | |
if m == 0: | |
return 0 | |
ans = i / m | |
ans *= comb(m, i) | |
ans *= comb(n - m, k - i) | |
ans /= comb(n, k) | |
return ans | |
def total_prob(n, m, k): | |
''' | |
Calculates the probability of event C | |
''' | |
probability = 0.0 | |
for i in range(0, k + 1): | |
probability += conditional_prob(i, k, n, m) | |
return probability | |
def checking_routine(): | |
''' | |
Function to check arbitrary values of n, m, k and verify our hypothesis is true | |
''' | |
for n in range(1, 101): | |
for k in range(1, n + 1): | |
print("n = {} k = {}".format(n, k)) | |
expected_prob = k / n | |
t_expected_prob = round(expected_prob, 7) | |
for m in range(1, n + 1): | |
probability = total_prob(n, m, k) | |
t_probability = round(probability, 7) | |
if t_probability != t_expected_prob: | |
print("Expected: {}\nGot: {}\nn = {} m = {} k = {}".format( | |
expected_prob, probability, n, m, k | |
)) | |
return | |
if __name__ == "__main__": | |
checking_routine() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment