मान लीजिए कि हमारे पास एक संख्या N है, यह संख्या रेखा पर व्यक्ति की प्रारंभिक स्थिति को दर्शाता है। हमारे पास एल भी है जो व्यक्ति के बाएं जाने की प्रायिकता है। हमें बिंदु N से N चालें पूरी करने के बाद संख्या रेखा पर सभी बिंदुओं तक पहुँचने की प्रायिकता ज्ञात करनी है। प्रत्येक चाल या तो बाईं ओर या दाईं ओर हो सकती है।
इसलिए, यदि इनपुट n =2, l =0.5 जैसा है, तो आउटपुट [0.25, 0, 0.5, 0, 0.25]
होगा।इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
उच्च :=1 - निम्न
-
आकार की एक सरणी A परिभाषित करें:n+1 x 2*n+1 और 0 से भरें
-
A[1, n + 1] =उच्च, A[1, n - 1] =निम्न
-
इनिशियलाइज़ i :=2 के लिए, जब i <=n, अपडेट (i 1 से बढ़ाएँ), करें -
-
j :=1 को इनिशियलाइज़ करने के लिए, जब j -=2 * n, अपडेट करें (j को 1 से बढ़ाएँ), करें -
-
A[i, j] :=A[i, j] + (A[i-1, j-1] * high)
-
-
प्रारंभ करने के लिए j :=2 * n-1, जब j>=0, अद्यतन करें (j को 1 से घटाएं), करें -
-
A[i, j] :=A[i, j] + (A[i - 1, j + 1] * कम)
-
-
-
इनिशियलाइज़ i :=0 के लिए, जब i - 2*n+1, अपडेट करें (i को 1 से बढ़ाएँ), करें -
-
डिस्प्ले ए[एन, आई]
-
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
#include <bits/stdc++.h> using namespace std; void find_prob(int n, double low) { double high = 1 - low; double A[n + 1][2 * n + 1] = {{0}}; A[1][n + 1] = high; A[1][n - 1] = low; for (int i = 2; i <= n; i++) { for (int j = 1; j <= 2 * n; j++) A[i][j] += (A[i - 1][j - 1] * high); for (int j = 2 * n - 1; j >= 0; j--) A[i][j] += (A[i - 1][j + 1] * low); } for (int i = 0; i < 2*n+1; i++) cout << A[n][i] << endl; } int main() { int n = 2; double low = 0.6; find_prob(n, low); }
इनपुट
2, 0.6
आउटपुट
0.36 0 0.48 0 0.16