एक व्यक्ति "A" शुरुआती स्थिति X = 0 से चल रहा है, कार्य ठीक X = num पर पहुंचने की प्रायिकता ढूंढना है, यदि वह 2 या 3 चरण ले सकता है। चरण लंबाई 2 के लिए प्रायिकता P है, चरण लंबाई 3 के लिए प्रायिकता 1 - P है।
इनपुट
num = 5, p = 0.2
आउटपुट
0.32
व्याख्या
num यानी 5 तक पहुंचने के 2 तरीके हो सकते हैं: 2+3 प्रायिकता 0.2 × 0.8 = 0.16 के साथ 3+2 प्रायिकता 0.8 × 0.2 = 0.16 के साथ तो, कुल प्रायिकता 0.16 + 0.16 = 0.32 होगी
इनपुट
num = 2, p = 0.1
आउटपुट
0.1
समस्या को हल करने के लिए नीचे दिया गया दृष्टिकोण
हम समस्या को हल करने के लिए डायनामिक प्रोग्रामिंग दृष्टिकोण का उपयोग करेंगे।
समाधान में हम:
- एक प्रायिकता ऐरे घोषित करें जिसका आकार num+1 हो और इसके मान निर्दिष्ट करें: probab[0] = 1, probab[1] = 0, probab[2] = p, probab[3] = 1 - p
- i को 0 से num तक पुनरावृत्त करें, जबकि इसका मान बढ़ाते रहें
- प्रत्येक i के लिए, probab[i] = p * probab[i - 2] + (1 - p) * probab[i - 3] सेट करें
- probab[num] रिटर्न करें
- परिणाम प्रिंट करें।
एल्गोरिदम
Start
Step 1→ 2 या 3 चरणों से एक बिंदु पर पहुंचने की प्रायिकता की गणना करने के लिए फंक्शन घोषित करें
float probab(int num, float p)
double probab[num + 1] घोषित करें
probab[0] = 1 सेट करें
probab[1] = 0 सेट करें
probab[2] = p सेट करें
probab[3] = 1 - p सेट करें
Loop for int i = 4 to i <= num, ++i
probab[i] = p * probab[i - 2] + (1 - p) * probab[i - 3] सेट करें
return probab[num]
Step 2→ main() में
int num = 2 घोषित करें
float p = 0.1 घोषित करें
probab(num, p) कॉल करें
Stop
उदाहरण
#include <bits/stdc++.h>
#include <vector>
using namespace std;
// 2 या 3 चरणों से एक बिंदु पर पहुंचने की प्रायिकता की गणना करने का फंक्शन
float probab(int num, float p) {
vector<double> dp(num + 1, 0.0);
dp[0] = 1;
dp[1] = 0;
if (num >= 2) dp[2] = p;
if (num >= 3) dp[3] = 1 - p;
for (int i = 4; i <= num; ++i) {
dp[i] = p * dp[i - 2] + (1 - p) * dp[i - 3];
}
return dp[num];
}
int main() {
int num = 5;
float p = 0.2;
cout << "Probability is: " << probab(num, p);
return 0;
}
आउटपुट
Probability is: 0.32