ধরুন আমাদের একটি সংখ্যা 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