단체 내에서 같은 생일을 맞은 사람의 짝짓기 확률을 계산해 봤어요.
5047 단어 Python
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에 출력 도표를 삽입하면 완성됩니다
Reference
이 문제에 관하여(단체 내에서 같은 생일을 맞은 사람의 짝짓기 확률을 계산해 봤어요.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Raiu1210/items/316538f4d34a6a691c84텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)