Recuento de strings binarias de longitud N con X 0 e Y 1

Dados los números enteros positivos N , X e Y . La tarea es encontrar el conteo de strings binarias únicas de longitud N que tengan X 0 e Y 1 s.

Ejemplos:

Entrada: N=5, X=3, Y=2
Salida: 10
Explicación: Hay 10 strings binarias de longitud 5 con 3 0 y 2 1, como: 
00011, 00101, 01001, 10001, 00110, 01010, 10010, 01100, 10100, 11000.

Entrada: N=3, X=1, Y=2
Salida: 3
Explicación: Hay 3 strings binarias de longitud 3 con 1 0 y 2 1, como: 011, 101, 110

 

Enfoque ingenuo : genere todas las strings binarias de longitud N y luego cuente el número de strings con X 0 e Y 1.
Complejidad de Tiempo: O(2 N )
Espacio Auxiliar: O(2 N )

Mejor enfoque : este problema también se puede resolver usando combinatoria . Si la longitud es N, y dado X 0s, entonces habrá Y = (N – X) 1s. Entonces podemos pensar en esto como una string de longitud N con X 0 e Y 1. Necesitamos encontrar el número de combinaciones únicas para esto, que se pueden obtener como _ {X}^{N}\textrm{C} o _ {Y}^{N}\textrm{C}. Esto se puede hacer usando el triángulo de Pascal para calcular el valor de la combinación.
Complejidad de tiempo: O(N) 
Complejidad de espacio: O(N 2 )
Nota: Este enfoque es el mejor si hay múltiples consultas para X e Y. Entonces también tendrá la misma complejidad de tiempo y espacio.

Enfoque de espacio optimizado : el consumo de espacio en el enfoque anterior se puede optimizar si tomamos la ayuda de la fórmula _ {X}^{N}\textrm{C} = N!/(X!*(NX)!) y calculamos el valor usando los factoriales.

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

C++

#include <bits/stdc++.h>
using namespace std;
 
// Function to calculate factorial
long long int fact(int f)
{
    f++;
    long long int ans = 1;
 
    // Loop to calculate factorial of f
    while (--f > 0)
        ans = ans * f;
    return ans;
}
 
// Function to calculate combination nCr
long long int countWays(int N, int X, int Y)
{
    return (fact(N) / (fact(X) * fact(Y)));
}
 
// Driver code
int main()
{
    int N = 5, X = 3, Y = 2;
    cout << countWays(N, X, Y) << endl;
    return 0;
}

Java

// Java program for the above approach
public class GFG{
 
    // Function to calculate factorial
    static int fact(int f)
    {
        f++;
        int ans = 1;
     
        // Loop to calculate factorial of f
        while (--f > 0)
            ans = ans * f;
        return ans;
    }
 
    // Function to calculate combination nCr
    static int countWays(int N, int X, int Y)
    {
        return (fact(N) / (fact(X) * fact(Y)));
    }
 
    // Driver Code
    public static void main(String args[])
    {
        int N = 5, X = 3, Y = 2;
        System.out.println(countWays(N, X, Y));
    }
}
 
// This code is contributed by AnkThon

Python3

# Function to calculate factorial
def fact(f):
  ans = 1;
 
  # Loop to calculate factorial of f
  while (f):
    ans = ans * f;
    f -= 1
 
  return ans;
 
# Function to calculate combination nCr
def countWays(N, X, Y):
  return fact(N) // (fact(X) * fact(Y));
 
 
# Driver code
N = 5
X = 3
Y = 2
print(countWays(N, X, Y))
 
# This code is contributed by gfgking

C#

// C# program for the above approach
using System;
using System.Collections.Generic;
 
class GFG{
 
// Function to calculate factorial
static int fact(int f)
{
    f++;
    int ans = 1;
 
    // Loop to calculate factorial of f
    while (--f > 0)
        ans = ans * f;
    return ans;
}
 
// Function to calculate combination nCr
static int countWays(int N, int X, int Y)
{
    return (fact(N) / (fact(X) * fact(Y)));
}
 
 
// Driver Code
public static void Main()
{
    int N = 5, X = 3, Y = 2;
    Console.Write(countWays(N, X, Y));
}
}
 
// This code is contributed by sanjoy_62.

Javascript

<script>
// Function to calculate factorial
function fact(f) {
  f++;
  let ans = 1;
 
  // Loop to calculate factorial of f
  while (--f > 0)
    ans = ans * f;
  return ans;
}
 
// Function to calculate combination nCr
function countWays(N, X, Y) {
  return Math.floor(fact(N) / (fact(X) * fact(Y)));
}
 
// Driver code
let N = 5, X = 3, Y = 2;
document.write(countWays(N, X, Y))
 
// This code is contributed by saurabh_jaiswal.
</script>
Producción

10

Complejidad de tiempo: O(N)
Espacio auxiliar: O(1)
Nota: En caso de consultas múltiples (Q), este enfoque tendrá una complejidad de tiempo O(Q*N).

Publicación traducida automáticamente

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