logo

매트릭스 확률 질문

직사각형 매트릭스가 주어지면 전류 셀에서 4 방향으로 동일한 확률로 이동할 수 있습니다. 4 방향은 오른쪽 왼쪽 상단 또는 하단입니다. N이 매트릭스에서 주어진 위치 (I J)에서 이동 한 후 어느 시점에서나 매트릭스의 경계를 넘지 않을 확률을 계산합니다.

중앙 CSS의 버튼

브라우저를 최소화하고 먼저 직접 시도하는 것이 좋습니다.



아이디어는 DFS와 유사한 것을 수행하는 것입니다. 우리는 4 개의 허용 방향 각각에서 재귀 적으로 가로 지르고 각 셀에 대해 하나의 이동으로 필요한 확률을 계산합니다. 각 방향은 동일한 확률을 가지므로 각 방향은 해당 셀의 총 확률의 1/4, 즉 0.25에 기여합니다. 매트릭스 밖으로 나가면 0을 반환하고 매트릭스 경계를 ​​가로 지르지 않고 n 단계가 완료되면 1을 반환합니다.

아래는 위의 아이디어의 구현입니다. 

C++
/// C++ program to find the probability  // that we do not cross boundary of a  // matrix after N moves. #include    using namespace std; // check if (x y) is valid matrix coordinate bool isSafe(int x int y int m int n) {  return (x >= 0 && x < m &&   y >= 0 && y < n); } // Function to calculate probability  // that after N moves from a given  // position (x y) in m x n matrix  // boundaries of the matrix will not be crossed. double findProbability(int m int n int x   int y int N) {  // boundary crossed  if (!isSafe(x y m n))  return 0.0;  // N steps taken  if (N == 0)  return 1.0;  // Initialize result  double prob = 0.0;  // move up  prob += findProbability(m n x - 1   y N - 1) * 0.25;  // move right  prob += findProbability(m n x   y + 1 N - 1) * 0.25;  // move down  prob += findProbability(m n x + 1  y N - 1) * 0.25;  // move left  prob += findProbability(m n x   y - 1 N - 1) * 0.25;  return prob; } // Driver code int main() {  // matrix size  int m = 5 n = 5;  // coordinates of starting point  int i = 1 j = 1;  // Number of steps  int N = 2;  cout << 'Probability is '  << findProbability(m n i j N);  return 0; } 
C
/// C program to find the probability  // that we do not cross boundary of a  // matrix after N moves. #include  #include  // check if (x y) is valid matrix coordinate bool isSafe(int x int y int m int n) {  return (x >= 0 && x < m && y >= 0 && y < n); } // Function to calculate probability  // that after N moves from a given  // position (x y) in m x n matrix  // boundaries of the matrix will not be crossed. double findProbability(int m int n int x int y int N) {  // boundary crossed  if (!isSafe(x y m n))  return 0.0;  // N steps taken  if (N == 0)  return 1.0;  // Initialize result  double prob = 0.0;  // move up  prob += findProbability(m n x - 1 y N - 1) * 0.25;  // move right  prob += findProbability(m n x y + 1 N - 1) * 0.25;  // move down  prob += findProbability(m n x + 1 y N - 1) * 0.25;  // move left  prob += findProbability(m n x y - 1 N - 1) * 0.25;  return prob; } // Driver code int main() {  // matrix size  int m = 5 n = 5;  // coordinates of starting point  int i = 1 j = 1;  // Number of steps  int N = 2;  printf('Probability is %f'findProbability(m n i j N));  return 0; } // This code is contributed by kothavvsaakash. 
Java
// Java program to find the probability // that we do not cross boundary // of a matrix after N moves. import java.io.*; class GFG {   // check if (x y) is valid // matrix coordinate static boolean isSafe(int x int y   int m int n) {  return (x >= 0 && x < m &&   y >= 0 && y < n); } // Function to calculate probability // that after N moves from a given // position (x y) in m x n matrix // boundaries of the matrix will  // not be crossed. static double findProbability(int m int n   int x int y   int N) {    // boundary crossed  if (! isSafe(x y m n))  return 0.0;  // N steps taken  if (N == 0)  return 1.0;  // Initialize result  double prob = 0.0;  // move up  prob += findProbability(m n x - 1   y N - 1) * 0.25;  // move right  prob += findProbability(m n x y + 1  N - 1) * 0.25;  // move down  prob += findProbability(m n x + 1   y N - 1) * 0.25;  // move left  prob += findProbability(m n x y - 1  N - 1) * 0.25;  return prob; } // Driver code public static void main (String[] args) {  // matrix size  int m = 5 n = 5;  // coordinates of starting point  int i = 1 j = 1;  // Number of steps  int N = 2;  System.out.println('Probability is ' +   findProbability(m n i  j N)); } } // This code is contributed by KRV. 
Python3
# Python3 program to find the probability  # that we do not cross boundary of a  # matrix after N moves.  # check if (x y) is valid matrix coordinate  def isSafe(x y m n): return (x >= 0 and x < m and y >= 0 and y < n) # Function to calculate probability  # that after N moves from a given  # position (x y) in m x n matrix  # boundaries of the matrix will  # not be crossed.  def findProbability(m n x y N): # boundary crossed  if (not isSafe(x y m n)): return 0.0 # N steps taken  if (N == 0): return 1.0 # Initialize result  prob = 0.0 # move up  prob += findProbability(m n x - 1 y N - 1) * 0.25 # move right  prob += findProbability(m n x y + 1 N - 1) * 0.25 # move down  prob += findProbability(m n x + 1 y N - 1) * 0.25 # move left  prob += findProbability(m n x y - 1 N - 1) * 0.25 return prob # Driver code  if __name__ == '__main__': # matrix size  m = 5 n = 5 # coordinates of starting po i = 1 j = 1 # Number of steps  N = 2 print('Probability is' findProbability(m n i j N)) # This code is contributed by PranchalK 
C#
// C# program to find the probability // that we do not cross boundary // of a matrix after N moves. using System; class GFG  {   // check if (x y) is valid // matrix coordinate static bool isSafe(int x int y   int m int n) {  return (x >= 0 && x < m &&   y >= 0 && y < n); } // Function to calculate probability // that after N moves from a given // position (x y) in m x n matrix // boundaries of the matrix will  // not be crossed. static double findProbability(int m int n   int x int y   int N) {    // boundary crossed  if (! isSafe(x y m n))  return 0.0;  // N steps taken  if (N == 0)  return 1.0;  // Initialize result  double prob = 0.0;  // move up  prob += findProbability(m n x - 1   y N - 1) * 0.25;  // move right  prob += findProbability(m n x y + 1  N - 1) * 0.25;  // move down  prob += findProbability(m n x + 1   y N - 1) * 0.25;  // move left  prob += findProbability(m n x y - 1  N - 1) * 0.25;  return prob; } // Driver code public static void Main () {  // matrix size  int m = 5 n = 5;  // coordinates of starting point  int i = 1 j = 1;  // Number of steps  int N = 2;  Console.Write('Probability is ' +   findProbability(m n i  j N)); } } // This code is contributed by nitin mittal. 
PHP
 // PHP program to find the probability  // that we do not cross boundary of a  // matrix after N moves. // check if (x y) is valid // matrix coordinate function isSafe($x $y $m $n) { return ($x >= 0 && $x < $m && $y >= 0 && $y < $n); } // Function to calculate probability  // that after N moves from a given  // position (x y) in m x n matrix  // boundaries of the matrix will  // not be crossed. function findProbability($m $n $x $y $N) { // boundary crossed if (!isSafe($x $y $m $n)) return 0.0; // N steps taken if ($N == 0) return 1.0; // Initialize result $prob = 0.0; // move up $prob += findProbability($m $n $x - 1 $y $N - 1) * 0.25; // move right $prob += findProbability($m $n $x $y + 1 $N - 1) * 0.25; // move down $prob += findProbability($m $n $x + 1 $y $N - 1) * 0.25; // move left $prob += findProbability($m $n $x $y - 1 $N - 1) * 0.25; return $prob; } // Driver code // matrix size $m = 5; $n = 5; // coordinates of starting point $i = 1; $j = 1; // Number of steps $N = 2; echo 'Probability is ' findProbability($m $n $i $j $N); // This code is contributed by nitin mittal.  ?> 
JavaScript
<script> // JavaScript program to find the probability  // that we do not cross boundary of a  // matrix after N moves. // check if (x y) is valid matrix coordinate function isSafe(x y m n){  return (x >= 0 && x < m &&   y >= 0 && y < n); } // Function to calculate probability  // that after N moves from a given  // position (x y) in m x n matrix  // boundaries of the matrix will not be crossed. function findProbability( m n x   y N){  // boundary crossed  if (!isSafe(x y m n))  return 0.0;  // N steps taken  if (N == 0)  return 1.0;  // Initialize result  let prob = 0.0;  // move up  prob += findProbability(m n x - 1   y N - 1) * 0.25;  // move right  prob += findProbability(m n x   y + 1 N - 1) * 0.25;  // move down  prob += findProbability(m n x + 1  y N - 1) * 0.25;  // move left  prob += findProbability(m n x   y - 1 N - 1) * 0.25;  return prob; } // Driver code // matrix size let m = 5 n = 5; // coordinates of starting point let i = 1 j = 1; // Number of steps let N = 2; document.write( 'Probability is '  +findProbability(m n i j N)); </script> 

산출
Probability is 0.875