ধরুন আমাদের একটি সংখ্যা N আছে এটি সংখ্যা রেখায় ব্যক্তির প্রাথমিক অবস্থানকে প্রতিনিধিত্ব করে। আমাদের কাছে L আছে যা ব্যক্তির বাম দিকে যাওয়ার সম্ভাবনা। N বিন্দু থেকে N সরে যাওয়ার পরে আমাদের সংখ্যা রেখার সমস্ত বিন্দুতে পৌঁছানোর সম্ভাবনা খুঁজে বের করতে হবে। প্রতিটি পদক্ষেপ বাম বা ডান দিকে হতে পারে।
সুতরাং, যদি ইনপুট n =2, l =0.5 এর মত হয়, তাহলে আউটপুট হবে [0.25, 0, 0.5, 0, 0.25]
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
উচ্চ :=1 - কম
-
আকারের একটি অ্যারে সংজ্ঞায়িত করুন: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] * উচ্চ)
-
-
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 দ্বারা বাড়ান), করবেন −
-
A[n, i]
প্রদর্শন করুন
-
উদাহরণ
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
#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