확률은 사용 가능한 데이터 집합에서 원하는 결과를 얻을 확률입니다. 확률의 범위는 0과 1 사이이며 정수 0은 불가능 가능성을 나타내고 1은 확실성을 나타냅니다.
확률이란 무엇입니까?
수학의 확률은 사건과 이유의 불확실성을 알려주는 도구를 제공합니다. 다시 말해서 확률은 1과 0 사이의 숫자로 표현될 수 있는 주어진 이벤트의 발생 가능성을 계산하는 것과 관련이 있다고 말할 수 있습니다. 예를 들어, 공정하지 않은 동전을 던질 때 앞면이 나올 확률 또는 3 주사위를 던질 때.
이제 문제로 돌아가서 N개의 동전을 던질 때 적어도 k개의 앞면이 나올 확률을 찾아야 합니다.
3개의 동전이 있고 k가 2인 것처럼 동전을 던지는 방법은 23=8가지입니다. 즉 -
HHH, HTH, HHT, HTT, THH, THT, TTT, TTH.
그리고 적어도 2개의 헤드를 포함하는 세트는 -
허허허허허허허허허허
따라서 확률은 4/8 또는 0.5가 됩니다.
예시
Input: k = 1, n = 3 Output: 0.875 Input: k = 3, n = 6 Output: 0.65625
위의 문제를 해결하기 위해 따라야 할 접근 방식 -
- n과 k를 입력으로 사용합니다.
- factorial 값을 배열에 저장하고 필요할 때마다 호출합니다.
- 계산을 수행합니다.
- 결과를 반환합니다.
알고리즘
Step 1-> declare function to calculate the probability of getting at least k heads in n tosses double probability(int k, int n) Declare and set double check = 0 Loop For i = k and i <= n and ++i Set check += temp[n] / (temp[i] * temp[n - i]) End Call check = check / (1LL << n) return check Step 2-> declare function to precompute the value void precompute() Set temp[0] = temp[1] = 1 Loop For i = 2 and i < 20 and ++i Set temp[i] = temp[i - 1] * i Step 3-> In main Call precompute() Call probability(1, 3) Stop
예시
#include<bits/stdc++.h> using namespace std; #define size 21 double temp[size]; // calculate probability of getting at least k heads in n tosses. double probability(int k, int n) { double check = 0; for (int i = k; i <= n; ++i) check += temp[n] / (temp[i] * temp[n - i]); check = check / (1LL << n); return check; } void precompute() { temp[0] = temp[1] = 1; for (int i = 2; i < 20; ++i) temp[i] = temp[i - 1] * i; } int main() { precompute(); // Probability of getting 1 head out of 3 coins cout<<"probability is : "<<probability(1, 3) << "\n"; // Probability of getting 3 head out of 6 coins cout<<"probability is : "<<probability(3, 6) <<"\n"; return 0; }
출력
probability is : 0.875 probability is : 0.65625