동전을 던졌을 때 앞면이 나올 확률은 어떻게 될까요?
숫자를 사용해서 확률을 구해보겠습니다.
0 : 동전의 뒷면
1 : 동전의 앞면
0 , 1 중 랜덤으로 하나를 선택할 확률은
동전을 던졌을 때 앞면과 뒷면이 나올 확률과 같습니다.
### Python 동전 앞면 나올 확률 구하기
## Random module
파이썬의 랜덤 모듈을 사용합니다.
자세한 내용은 아래 주소에서 확인할 수 있습니다!
https://docs.python.org/3/library/random.html
1. 0 or 1 랜덤으로 뽑아내기
2. 뒷면이 나올 확률 : 0 나온 횟수 / 전체 시행 횟수
앞면이 나올 확률 : 전체 시행 횟수 - 0 나온 횟수 / 전체 시행 횟수
3. 시각화
import random
import matplotlib.pyplot as plt
cnt=[0,0]
for _ in range(100):
cnt[0]+=random.randint(0,1)
cnt[1]=100-cnt[0]
plt.pie(cnt,labels=['count 0','count 1'],autopct='%1.2f%%')
10번 던졌을 때 앞면이 0 ~ 10번 나올 확률은 ?
import random
import matplotlib.pyplot as plt
res=[0]*11
for i in range(100000):
cnt=sum([random.randint(0,1) for _ in range(10)])
res[cnt]+=1
for i in range(11):
print('앞면이 %s번 나올 확률 - %s'%(i,res[i]/100000))
plt.bar(range(11),res,tick_label=range(11))
plt.title('coin prob')
plt.ylabel('prob')
plt.xlabel('count')
" 동전을 10번 던져서 앞면이 나온 횟수 세보기 작업 "을
" 10만번 반복 " 한 결과입니다.
시각화를 하니 반반인 경우(5회)가 가장 많은 것을
한 눈에 알 수 있습니다.
### SQL 동전 앞면 나올 확률 구하기
파이썬처럼 0과 1 두 수를 랜덤으로 확인합니다.
이 과정을 통해 동전의 앞면과 뒷면이 나올 확률을 확인해 보겠습니다.
## DBMS_RANDOM
파이썬의 random모듈 처럼 랜덤으로 숫자를 생성해주는
오라클 SQL의 패키지 입니다.
자세한 정보는 다음 링크에서 확인하시면 됩니다.
https://docs.oracle.com/database/121/ARPLS/d_random.htm#ARPLS67491
1. 0 or 1 중 랜덤으로 수를 생성
2. grouping 작업을 통해 0과 1의 개수를 count
3. 뒷면 나올 확률 : count(0) / 전체 시행 횟수
앞면 나올 확률 : count(1) / 전체 시행 횟수
-- 동전 한 번 던지기 입니다.
select dbms_random.value(0,1)
from dual;
--
select 동전의면, count(*)/&&수 확률
from
(select round(dbms_random.value(0,1)) 동전의면
from dual
connect by level<=&수)
group by 동전의면;
위의 쿼리대로 하시면 &수 에 대한 입력을 두 번 해야합니다.
( select 절에서 한 번 , from 절의 서브쿼리의 connect by 구문에서 한 번 )
다음과 같이 해결합니다.
※ 숫자 입력 1회로 바꾸기
하나의 치환변수에 치환 변수 1개 추가(&&)
select 동전의면, count(*)/&&수 확률
from
(select round(dbms_random.value(0,1)) 동전의면
from dual
connect by level<=&수)
group by 동전의면;
※ 매번 숫자를 입력하기
undefine 사용
undefine 수
select 동전의면, count(*)/&&수 확률
from
(select round(dbms_random.value(0,1)) 동전의면
from dual
connect by level<=&수)
group by 동전의면;
오늘은 동전의 한 면이 나올 확률을 구하는 알고리즘을 구현해보았습니다.
파이썬은 matplotlib 라이브러리를 사용해서 시각화까지 진행해 보았습니다.
읽어주셔서 감사합니다.
'알고리즘' 카테고리의 다른 글
[Python&SQL] 적어도 불량품 1개일 확률 ? (7) | 2021.01.14 |
---|---|
[Python & SQL] 몬테 카를로 | 원주율 구하기 (1) | 2021.01.09 |
[Python] 없는 수가 뭘까 ? 빠진수 찾기 (6) | 2021.01.07 |
[Python] 주사위 던지기 (2) | 2021.01.05 |
[Python&SQL] 재귀 함수 팩토리얼 구구단 (0) | 2021.01.03 |
[Python] 소인수 분해하기 (2) | 2021.01.02 |
[Python] 최소공배수(LCM) 구하기 (0) | 2021.01.02 |
[Python & SQL ] 최대 공약수 구하기 (0) | 2020.12.31 |