단체 내에서 같은 생일을 맞은 사람의 짝짓기 확률을 계산해 봤어요.

5047 단어 Python
'풍문에 20여명이 있으면 50% 확률로 한 쌍의 생일이 온다'이런 얘기를 들었다면 실제로 계산해 봤다
same_birthday.py
import matplotlib.pyplot as plt
import numpy as np

print("Find the probability of existing person of same birth day in a group")
print("n: the number of people in a group")

x = np.linspace(2, 366, 364)
y = []
no_match = 1
for n in range(2, 366):
    no_match *= (366-n) / 365
    match = 1 - no_match
    y.append(match)
    print("n = %3d: %f" % (n, match))

plt.plot(x, y)
plt.show()
이 프로그램을 시작하면
Find the probability of existing person of same birth day in a group
n: the number of people in a group
n =   2: 0.002740
n =   3: 0.008204
n =   4: 0.016356
n =   5: 0.027136
n =   6: 0.040462
n =   7: 0.056236
n =   8: 0.074335
n =   9: 0.094624
n =  10: 0.116948
n =  11: 0.141141
n =  12: 0.167025
n =  13: 0.194410
n =  14: 0.223103
n =  15: 0.252901
n =  16: 0.283604
n =  17: 0.315008
n =  18: 0.346911
n =  19: 0.379119
n =  20: 0.411438
n =  21: 0.443688
n =  22: 0.475695
n =  23: 0.507297
n =  24: 0.538344
n =  25: 0.568700
n =  26: 0.598241
n =  27: 0.626859
n =  28: 0.654461
n =  29: 0.680969
n =  30: 0.706316
n =  31: 0.730455
n =  32: 0.753348
n =  33: 0.774972
n =  34: 0.795317
n =  35: 0.814383
n =  36: 0.832182
n =  37: 0.848734
n =  38: 0.864068
n =  39: 0.878220
n =  40: 0.891232
n =  41: 0.903152
n =  42: 0.914030
n =  43: 0.923923
n =  44: 0.932885
n =  45: 0.940976
n =  46: 0.948253
n =  47: 0.954774
n =  48: 0.960598
n =  49: 0.965780
n =  50: 0.970374
n =  51: 0.974432
n =  52: 0.978005
n =  53: 0.981138
n =  54: 0.983877
n =  55: 0.986262
n =  56: 0.988332
n =  57: 0.990122
n =  58: 0.991665
n =  59: 0.992989
n =  60: 0.994123
n =  61: 0.995089
n =  62: 0.995910
n =  63: 0.996604
n =  64: 0.997190
n =  65: 0.997683
n =  66: 0.998096
n =  67: 0.998440
n =  68: 0.998726
n =  69: 0.998964
n =  70: 0.999160
n =  71: 0.999321
n =  72: 0.999453
n =  73: 0.999561
n =  74: 0.999649
n =  75: 0.999720
n =  76: 0.999777
n =  77: 0.999824
n =  78: 0.999861
n =  79: 0.999891
n =  80: 0.999914
.
.
.
.
.

이렇게 콘솔에 출력.
이런 그림을 화면으로 출력합니다.

확실히 이걸 보면 23명이 50%를 넘을 확률이에요.
50명이면 거의 100% 한 쌍이다.
그럼 프로그램 설명 좀 해주세요.
얼렁뚱땅 한 일
• 전원 생일의 다른 확률 찾기
· 기타 현상을 찾다
오직
먼저
x = np.linspace(2, 366, 364)
y = []
이것은
"x를 2에서 366으로 364 분할"
이런 명령
no_match = 1
for n in range(2, 366):
    no_match *= (366-n) / 365
    match = 1 - no_match
    y.append(match)
    print("n = %3d: %f" % (n, match))
여기는 일단 노.match를 1로 초기화
그리고 n을 2~365로 돌려요.
2명 이상이 아니면 당첨 확률은 0
366명 이상이면 무조건 한 팀이 존재한다(윤년은 고려하지 않는다)
이 범위 내에서
두 번째 생일과 첫 번째 생일이 다를 확률은.
364/365
세 번째 생일, 첫 번째와 두 번째 모두 다른 확률은
363/365
따라서 세 사람의 생일이 다른 확률은
1-(364/365)*(363/365) 그래서
다음 순환
.
.
.
그리고 매번 계산해야 한다
Y에 기록하고 컨트롤러에 출력합니다.
순환이 끝난 후 x와 y의 데이터가 완성되었다
matplotlib의 x, y에 출력 도표를 삽입하면 완성됩니다

좋은 웹페이지 즐겨찾기