一个矩阵概率的问题?


在本文中,我们将看到一个矩阵概率问题。我们有一个矩形矩阵。我们可以从当前单元格以相等的概率向四个方向移动。这四个方向是左、右、上、下。我们必须计算从位置 M[i, j] 移动 N 步后的概率。

这里我们将做一些与 DFS 相关的事情。我们将从当前房间递归地遍历四个可能的房间中的每一个。然后,我们将计算移动次数少一次时的概率。由于四个方向的概率相同,因此每个方向将贡献 0.25 的总概率。如果我们越过矩阵边界,我们将返回 0,当完成 N 次移动时,将返回 1。让我们看一下算法来了解这个想法。

算法

matProb(m, n, x, y, N)

Begin
   if x,y is not in matrix boundary m, n, then return 0
   if N is 0 , then return 1
   prob := 0
   prob := prob + matProb(m, n, x-1, y, N-1) * 0.25
   prob := prob + matProb(m, n, x+1, y, N-1) * 0.25
   prob := prob + matProb(m, n, x, y+1, N-1) * 0.25
   prob := prob + matProb(m, n, x, y-1, N-1) * 0.25
   return prob
End

示例

#include<iostream>
using namespace std;
bool isSafe(int x, int y, int m, int n) { //function to check whether (x,y)
   is in matrix or not
   if(x >= 0 && x < m && y >= 0 && y < n){
      return true;
   }
   return false;
}
double matProb(int m, int n, int x, int y, int N) {
   if (!isSafe(x, y, m, n)) //if coundary is crossed
      return 0.0;
   if (N == 0) //when N is 0, or N is completed, return 1
      return 1.0;
   double probability = 0.0;
   probability += matProb(m, n, x - 1, y, N - 1) * 0.25; //move left
   probability += matProb(m, n, x, y + 1, N - 1) * 0.25; //move up
   probability += matProb(m, n, x + 1, y, N - 1) * 0.25; //move right
   probability += matProb(m, n, x, y - 1, N - 1) * 0.25; //move down
   return probability;
}
int main() {
   int m = 7, n = 8;
   int x = 1, y = 1;
   int N = 4;
   cout << "Matrix Probability is " << matProb(m, n, x, y, N);
}

输出

Matrix Probability is 0.664062

更新时间:2019-07-31

127 次浏览

开启你的 职业生涯

完成课程获得认证

开始
广告