Probabilidad de obtener K caras en N lanzamientos de moneda

Dados dos números enteros N y R . La tarea es calcular la probabilidad de obtener exactamente r caras en n lanzamientos sucesivos. 
Una moneda justa tiene la misma probabilidad de caer cara o cruz en cada lanzamiento.

Ejemplos: 

Input : N = 1, R = 1 
Output : 0.500000 

Input : N = 4, R = 3
Output : 0.250000 

Enfoque 
La probabilidad de obtener K caras en N lanzamientos de moneda se puede calcular utilizando la siguiente fórmula de distribución binomial de probabilidad: 
[^{n}C_{k} * p^{k} * q^{n-k}] donde p = probabilidad de obtener cara yq = probabilidad de obtener cruz. pyq ambos son 1/2. Entonces la ecuación se convierte en [\frac{1}{2^n} * \frac{n!}{ r! * (n-r)!}]

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

C++

#include <bits/stdc++.h>
using namespace std;
 
// function to calculate factorial
int fact(int n)
{
    int res = 1;
    for (int i = 2; i <= n; i++)
        res = res * i;
    return res;
}
 
// apply the formula
double count_heads(int n, int r)
{
    double output;
    output = fact(n) / (fact(r) * fact(n - r));
    output = output / (pow(2, n));
    return output;
}
 
// Driver function
int main()
{
    int n = 4, r = 3;
     
    // call count_heads with n and r
    cout << count_heads(n, r);
    return 0;
}

Java

class GFG{
  
// function to calculate factorial
static int fact(int n)
{
    int res = 1;
    for (int i = 2; i <= n; i++)
        res = res * i;
    return res;
}
  
// apply the formula
static double count_heads(int n, int r)
{
    double output;
    output = fact(n) / (fact(r) * fact(n - r));
    output = output / (Math.pow(2, n));
    return output;
}
  
// Driver function
public static void main(String[] args)
{
    int n = 4, r = 3;
      
    // call count_heads with n and r
    System.out.print(count_heads(n, r));
}
}
 
// This code is contributed by 29AjayKumar

Python3

# Python3 program to find probability
# of getting K heads in N coin tosses
 
# Function to calculate factorial
def fact(n):
     
    res = 1
    for i in range(2, n + 1):
        res = res * i
    return res
 
# Applying the formula
def count_heads(n, r):
     
    output = fact(n) / (fact(r) * fact(n - r))
    output = output / (pow(2, n))
    return output
 
# Driver code
n = 4
r = 3
 
# Call count_heads with n and r
print (count_heads(n, r))
 
# This code is contributed by Pratik Basu

C#

using System;
 
public class GFG{
   
// Function to calculate factorial
static int fact(int n)
{
    int res = 1;
    for (int i = 2; i <= n; i++)
        res = res * i;
    return res;
}
   
// Apply the formula
static double count_heads(int n, int r)
{
    double output;
    output = fact(n) / (fact(r) * fact(n - r));
    output = output / (Math.Pow(2, n));
    return output;
}
   
// Driver function
public static void Main(String[] args)
{
    int n = 4, r = 3;
       
    // Call count_heads with n and r
    Console.Write(count_heads(n, r));
}
}
// This code contributed by sapnasingh4991

Javascript

<script>
 
// Function to calculate factorial
function fact(n)
{
    var res = 1;
    for(var i = 2; i <= n; i++)
        res = res * i;
         
    return res;
}
 
// Apply the formula
function count_heads(n, r)
{
    var output;
    output = fact(n) / (fact(r) * fact(n - r));
    output = output / (Math.pow(2, n));
    return output;
}
 
// Driver Code
var n = 4, r = 3;
 
// Call count_heads with n and r
document.write(count_heads(n, r));
 
// This code is contributed by noob2000
 
</script>
Producción: 

0.250000

 

Complejidad del tiempo: en esta implementación, tenemos que calcular el factorial en función del valor n , por lo que la complejidad del tiempo sería O(n)  
Espacio auxiliar: en esta implementación, no usamos ningún espacio adicional, por lo que el espacio auxiliar requerido es O(1 )
 

Publicación traducida automáticamente

Artículo escrito por siddhanthapliyal 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 *