Pravdepodobnosť matrice
Vzhľadom na obdĺžnikovú matricu sa môžeme pohybovať z aktuálnej bunky v 4 smeroch s rovnakou pravdepodobnosťou. 4 smery sú vľavo vľavo hore alebo dole. Vypočítajte pravdepodobnosť, že po N sa presunie z danej polohy (I j) v matrici, v žiadnom momente nebudeme krížiť hranice matrice.
Dôrazne vám odporúčame, aby ste minimalizovali váš prehliadač a vyskúšali si to najskôr sami.
Cieľom je vykonať niečo podobné DFS. Rekurzívne prechádzame v každom zo 4 povolených smerov a pre každú bunku, s ktorou sa vyskytol, vypočítame požadovanú pravdepodobnosť s jedným menším pohybom. Pretože každý smer má rovnakú pravdepodobnosť, že každý smer prispeje k 1/4 celkovej pravdepodobnosti tejto bunky, t. J. 0,25. Vrátime sa 0, ak vstúpime mimo maticu a vrátime sa 1, ak sú n kroky dokončené bez hraníc matice matice.
Nižšie je uvedená implementácia vyššie uvedenej myšlienky:
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>
Výstup
Probability is 0.875