一個矩陣機率的問題?
在本文中,我們將看到一個矩陣機率問題。我們有一個矩形矩陣。我們可以從當前單元格以相等的機率向四個方向移動。這四個方向是左、右、上、下。我們必須計算從位置 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
廣告
資料結構
網路技術
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 語言
C++
C#
MongoDB
MySQL
Javascript
PHP