:)

Birthday Problem 본문

Algorithm

Birthday Problem

andre99 2024. 9. 11. 15:50
  • 생일 문제(Birthday Problem)
    : 임의로 모인 사람들 중 생일이 같은 두 명이 존재할 확률을 구하는 문제
  • Algorithms - Birthday Data.csv
    : 학생들의 이름, 서로 식별 가능한 ID, 생일 날짜 저장
  • 사용 언어 : Python

생일이 같은 두 사람을 수동으로 결정하기 위해 pseudo code 작성

bd_problem 함수를 만듦
def bd_problem(총 모인 사람의 인원수):
		n_p 변수 정의
        for문 시작
        for i in range(n_p, 365):
        p 변수 정의
        n_p와 p간의 관계
        최종적인 확률을 probability 변수에 저장
    임의로 모인 사람들의 총 인원수와 그 중 2명 이상의 생일이 겹칠 확률 출력

 

k명의 학생으로 구성된 반에서 생일이 같은 학생이 두 명 이상 있을 확률을 계산하는 코드 작성 (여러 가지 다른 ks를 적용)


아래 코드를 실행하면 2명부터 365명의 학생으로 구성된 반에서 생일이 같은 학생이 두 명 이상 있을 확률을 각각 모두 출력한다.

def bd_problem():
    n_p = 1
    for i in range(1, 365):
        p = i / 365
        n_p *= (1 - p)
        probability = 1 - n_p
        print ("{0}  {1}".format(i+1,probability))

만약 'k명의 학생으로 구성된 반'과 같이 전체 인원을 특정할 경우 함수를 다음과 같이 변경한다.

def bd_problem(n):
    n_p = 1
    for i in range(1, n): //range의 범위를 365에서 n으로 변경
        p = i / 365
        n_p *= (1 - p)
        probability = 1 - n_p
    print ("{0}  {1}".format(n,probability)) //n의 확률만 출력

 

한 교실에 100명의 학생이 있는 경우 생일이 같은 한 쌍의 학생이 있을 가능성이 99.999%임을 입증 (computational experiments 수행)

  • 접근 방법
    n_p : 학생들의 생일이 모두 다를 확률
    probability : 생일이 같은 한 쌍의 학생이 있을 확률

  • 예시
  • 함수 작성
def bd_problem(n):
    n_p = 1
    print ("{0}    {1}".format("n","probability"))
    for i in range(1, n):
        p = i / 365
        n_p *= (1 - p)
        probability = 1 - n_p
    print ("{0}  {1}".format(n,probability))
  • 함수 실행
bd_problem(100) // 100명의 학생이 있는 경우
  • 출력 결과
n    probability
100  0.9999996927510721

 

참고 자료

https://betterexplained.com/articles/understanding-the-birthday-paradox/
https://www.vitoshacademy.com/python-the-birthday-paradox-algorithm/

'Algorithm' 카테고리의 다른 글

Sorting (4)  (2) 2024.09.11
Sorting (3)  (0) 2024.09.11
Sorting (2)  (0) 2024.09.11
Sorting (1)  (1) 2024.09.11