Probabilidad de dar en el blanco N-ésima vez en M-ésimo lanzamiento

Dados los números enteros N, M y p , la tarea es encontrar la probabilidad de acertar en un objetivo por N -ésima vez en el M -ésimo lanzamiento, donde p es la probabilidad de acertar en el objetivo.

Ejemplos:

Entrada: N = 1, M = 2, p = 0.3
Salida: 0.21
Explicación: El objetivo puede ser alcanzado por primera vez en el segundo lanzamiento solo cuando el primer lanzamiento es fallido.
Entonces, la probabilidad es la multiplicación de la probabilidad de dar en el blanco en el segundo lanzamiento y la probabilidad de fallar el objetivo en el primer lanzamiento = 0.3 * 0.7 = 0.21
porque la probabilidad de fallar = 1 – probabilidad de acertar.

Entrada : N = 8, M = 17, p = 0,4, 
Salida : 0,07555569565040642

 

Enfoque: La idea para resolver el problema se basa en la distribución binomial de probabilidad

Para obtener el N -ésimo hit en el M -th lanzamiento, debe haber N-1 hits en los M-1 lanzamientos anteriores y el N-th throw debe ser un hit.
Digamos que p es la probabilidad de acertar y q es la probabilidad de fallar. q = 1 – pág.
Entonces, la probabilidad de acertar N-1 en M-1 lanzamientos es: 
X = M-1 C N-1 (p N-1 q M-1-(N-1) ) = M-1 C N-1 ( p N-1 q M-N )
Por lo tanto, la probabilidad de acertar N -ésima vez es p*X = M-1 C N-1 (p N qMN )

Siga los pasos a continuación para implementar la idea anterior:

  • En primer lugar, obtenga la probabilidad de no dar en el blanco.
  • Obtenga el valor de X como se muestra arriba.
  • Multiplique el valor de ‘p’ con él para obtener la respuesta real.

A continuación se muestra la implementación del enfoque anterior.

C++

// Cpp code to implement the approach
 
#include <bits/stdc++.h>
using namespace std;
 
// Function to find the factorial of a number
int fact(int f)
{
    int fact = 1;
    for (int i = 1; i <= f; i++)
        fact = i * fact;
    return fact;
}
 
// Function to find the probability
// of Nth hit at Mth throw
double probab(double p, int m, int n)
{
    double q = 1 - p;
    double res = fact(m - 1) / fact(n - 1) / fact(m - n)
                 * pow(p, (n - 1)) * pow(q, (m - n)) * p;
    return res;
}
 
// Driver code
int main()
{
    double p = 0.3;
    int M = 2;
    int N = 1;
   
    // Function call
    cout << probab(p, M, N);
    return 0;
}
 
// This code is contributed by ANKITKUMAR34.

Java

// Java code for above approach
 
import java.util.*;
 
class GFG {
    // Function to find the factorial of a number
    public static int fact(int f)
    {
        int fact = 1;
        for (int i = 1; i <= f; i++)
            fact = i * fact;
        return fact;
    }
 
    // Function to find the probability
    // of Nth hit at Mth throw
    public static double probab(double p, int m, int n)
    {
        double q = 1 - p;
        double res = fact(m - 1) / fact(n - 1) / fact(m - n)
                     * Math.pow(p, (n - 1))
                     * Math.pow(q, (m - n)) * p;
        return res;
    }
 
    // Driver code
    public static void main(String[] args)
    {
        double p = 0.3;
        int M = 2;
        int N = 1;
 
        // Function call
        System.out.println(probab(p, M, N));
    }
}
 
// This code is contributed by Pushpesh Raj.

Python3

# Python code to implement the approach
 
# Function to find the probability
# of Nth hit at Mth throw
def probab(p, m, n):
    q = 1-p
    res = fact(m-1)/fact(n-1)/fact(m-n)*p**(n-1)*q**(m-n)*p
    return res
 
# Function to find the factorial of a number
def fact(f):
    fact = 1
    for i in range(1, f + 1):
        fact = i * fact
    return fact
 
 
# Driver code
if __name__ == '__main__':
    p = 0.3
    M = 2
    N = 1
     
    # Function call
    print(probab(p, M, N))

C#

// C# code for above approach
using System;
 
public class GFG
{
 
  // Function to find the factorial of a number
  public static int fact(int f)
  {
    int fact = 1;
    for (int i = 1; i <= f; i++)
      fact = i * fact;
    return fact;
  }
 
  // Function to find the probability
  // of Nth hit at Mth throw
  public static double probab(double p, int m, int n)
  {
    double q = 1 - p;
    double res = fact(m - 1) / fact(n - 1) / fact(m - n)
      * Math.Pow(p, (n - 1))
      * Math.Pow(q, (m - n)) * p;
    return res;
  }
 
  // Driver code
  public static void Main(string[] args)
  {
    double p = 0.3;
    int M = 2;
    int N = 1;
 
    // Function call
    Console.WriteLine(probab(p, M, N));
  }
}
 
// This code is contributed by AnkThon

Javascript

<script>
 // Javascript code to implement the approach
 
 
// Function to find the factorial of a number
function fact(f) {
    let fact = 1;
    for (let i=1; i<=f; i++ )
        fact = i * fact;
    return fact;
}
 
// Function to find the probability
//of Nth hit at Mth throw
function probab(p, m, n) {
    let q = 1-p;
    let res = fact(m-1) / fact(n-1) / fact(m-n) * Math.pow(p, (n-1)) * Math.pow(q, (m-n)) * p;
    return res;
}
 
// Driver code
 
    let p = 0.3;
    let M = 2;
    let N = 1;
     
    // Function call
    document.write(probab(p, M, N))
 
// This code is contributed by Saurabh Jaiswal
</script>
Producción

0.21

Tiempo Complejidad: O(M)
Espacio Auxiliar: O(1)

Publicación traducida automáticamente

Artículo escrito por Atul_kumar_Shrivastava y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *