Find the probability of reaching all points after N moves from point N in C++


Suppose we have a number N this represents the initial position of the person on the number line. We also have L which is the probability of the person of going left. We have to find the the probability of reaching all points on the number line after completing N moves from point N. Each move can be either to the left or to the right.

So, if the input is like n = 2, l = 0.5, then the output will be [0.25, 0, 0.5, 0, 0.25]

To solve this, we will follow these steps −

  • high := 1 - low

  • Define an array A of size: n+1 x 2*n+1 and fill with 0

  • A[1, n + 1] = high, A[1, n - 1] = low

  • for initialize i := 2, when i <= n, update (increase i by 1), do −

    • for initialize j := 1, when j −= 2 * n, update (increase j by 1), do −

      • A[i, j] := A[i, j] + (A[i - 1, j - 1] * high)

    • for initialize j := 2 * n - 1, when j >= 0, update (decrease j by 1), do −

      • A[i, j] := A[i, j] + (A[i - 1, j + 1] * low)

  • for initialize i := 0, when i − 2*n+1, update (increase i by 1), do −

    • display A[n, i]

Example

Let us see the following implementation to get better understanding −

 Live Demo

#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);
}

Input

2, 0.6

Output

0.36
0
0.48
0
0.16

Updated on: 27-Aug-2020

51 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements