Número de lobby

En matemáticas combinatorias, el número de Lobb L m, n cuenta el número de formas en que n + m paréntesis abiertos pueden organizarse para formar el inicio de una secuencia válida de paréntesis equilibrados. 
El número de Lobb está parametrizado por dos enteros no negativos m y n con n >= m >= 0. Se puede obtener mediante: 
L_{m,n} = \frac{2\times m + 1}{m + n + 1}\binom{2\times n}{m + n}
El número de Lobb también se usa para contar el número de formas en que n + m copias del valor + 1 y n – m copias del valor -1 pueden organizarse en una secuencia tal que todas las sumas parciales de la secuencia no sean negativas.
Ejemplos: 
 

Input : n = 3, m = 2
Output : 5

Input : n =5, m =3
Output :35

La idea es simple, usamos una función que calcula coeficientes binomiales para valores dados. Usando esta función y la fórmula anterior, podemos calcular los números de Lobb. 
 

C++

// CPP Program to find Ln, m Lobb Number.
#include <bits/stdc++.h>
#define MAXN 109
using namespace std;
 
// Returns value of Binomial Coefficient C(n, k)
int binomialCoeff(int n, int k)
{
    int C[n + 1][k + 1];
 
    // Calculate value of Binomial Coefficient in
    // bottom up manner
    for (int i = 0; i <= n; i++) {
        for (int j = 0; j <= min(i, k); j++) {
            // Base Cases
            if (j == 0 || j == i)
                C[i][j] = 1;
 
            // Calculate value using previously stored values
            else
                C[i][j] = C[i - 1][j - 1] + C[i - 1][j];
        }
    }
 
    return C[n][k];
}
 
// Return the Lm, n Lobb Number.
int lobb(int n, int m)
{
    return ((2 * m + 1) * binomialCoeff(2 * n, m + n)) / (m + n + 1);
}
 
// Driven Program
int main()
{
    int n = 5, m = 3;
    cout << lobb(n, m) << endl;
    return 0;
}

Java

// JAVA Code For Lobb Number
import java.util.*;
 
class GFG {
     
    // Returns value of Binomial
    // Coefficient C(n, k)
    static int binomialCoeff(int n, int k)
    {
        int C[][] = new int[n + 1][k + 1];
      
        // Calculate value of Binomial
        // Coefficient in bottom up manner
        for (int i = 0; i <= n; i++) {
            for (int j = 0; j <= Math.min(i, k);
                                        j++) {
                // Base Cases
                if (j == 0 || j == i)
                    C[i][j] = 1;
      
                // Calculate value using
                // previously stored values
                else
                    C[i][j] = C[i - 1][j - 1] +
                              C[i - 1][j];
            }
        }
      
        return C[n][k];
    }
     
    // Return the Lm, n Lobb Number.
    static int lobb(int n, int m)
    {
        return ((2 * m + 1) * binomialCoeff(2 * n, m + n)) /
                                             (m + n + 1);
    }
     
    /* Driver program to test above function */
    public static void main(String[] args)
    {
        int n = 5, m = 3;
        System.out.println(lobb(n, m));
         
    }
}
 
// This code is contributed by Arnav Kr. Mandal.

Python 3

# Python 3 Program to find Ln,
# m Lobb Number.
 
# Returns value of Binomial
# Coefficient C(n, k)
def binomialCoeff(n, k):
 
    C = [[0 for j in range(k + 1)]
             for i in range(n + 1)]
 
 
    # Calculate value of Binomial
    # Coefficient in bottom up manner
    for i in range(0, n + 1):
        for j in range(0, min(i, k) + 1):
            # Base Cases
            if (j == 0 or j == i):
                C[i][j] = 1
 
            # Calculate value using
            # previously stored values
            else:
                C[i][j] = (C[i - 1][j - 1]
                            + C[i - 1][j])
         
    return C[n][k]
 
# Return the Lm, n Lobb Number.
def lobb(n, m):
 
    return (((2 * m + 1) *
        binomialCoeff(2 * n, m + n))
                      / (m + n + 1))
 
# Driven Program
n = 5
m = 3
print(int(lobb(n, m)))
 
# This code is contributed by
# Smitha Dinesh Semwal

C#

// C# Code For Lobb Number
using System;
 
class GFG {
 
    // Returns value of Binomial
    // Coefficient C(n, k)
    static int binomialCoeff(int n, int k)
    {
         
        int[, ] C = new int[n + 1, k + 1];
 
        // Calculate value of Binomial
        // Coefficient in bottom up manner
        for (int i = 0; i <= n; i++) {
            for (int j = 0; j <= Math.Min(i, k);
                j++) {
                     
                // Base Cases
                if (j == 0 || j == i)
                    C[i, j] = 1;
 
                // Calculate value using
                // previously stored values
                else
                    C[i, j] = C[i - 1, j - 1]
                                + C[i - 1, j];
            }
        }
 
        return C[n, k];
    }
 
    // Return the Lm, n Lobb Number.
    static int lobb(int n, int m)
    {
        return ((2 * m + 1) * binomialCoeff(
                 2 * n, m + n)) / (m + n + 1);
    }
 
    /* Driver program to test above function */
    public static void Main()
    {
        int n = 5, m = 3;
         
        Console.WriteLine(lobb(n, m));
    }
}
 
// This code is contributed by vt_m.

PHP

<?php
// PHP Program to find Ln,
// m Lobb Number.
 
$MAXN =109;
 
// Returns value of Binomial
// Coefficient C(n, k)
function binomialCoeff($n, $k)
{
    $C= array(array());
 
    // Calculate value of Binomial
    // Coefficient in bottom up manner
    for ($i = 0; $i <= $n; $i++)
    {
        for ($j = 0; $j <= min($i, $k); $j++)
        {
            // Base Cases
            if ($j == 0 || $j == $i)
                $C[$i][$j] = 1;
 
            // Calculate value using p
            // reviously stored values
            else
                $C[$i][$j] = $C[$i - 1][$j - 1] +
                             $C[$i - 1][$j];
        }
    }
 
    return $C[$n][$k];
}
 
// Return the Lm, n Lobb Number.
function lobb($n, int $m)
{
    return ((2 * $m + 1) *
             binomialCoeff(2 * $n, $m + $n)) /
                          ($m + $n + 1);
}
 
// Driven Code
$n = 5;$m = 3;
echo lobb($n, $m);
 
// This code is contributed by anuj_67.
?>

Javascript

<script>
// javascript code for Lobb Number
 
    // Returns value of Binomial
    // Coefficient C(n, k)
    function binomialCoeff(n, k)
    {
        let C = new Array(n + 1);
         
        // Loop to create 2D array using 1D array
        for (var i = 0; i < C.length; i++) {
            C[i] = new Array(2);
        }
        
        // Calculate value of Binomial
        // Coefficient in bottom up manner
        for (let i = 0; i <= n; i++) {
            for (let j = 0; j <= Math.min(i, k);
                                        j++) {
                // Base Cases
                if (j == 0 || j == i)
                    C[i][j] = 1;
        
                // Calculate value using
                // previously stored values
                else
                    C[i][j] = C[i - 1][j - 1] +
                              C[i - 1][j];
            }
        }
        
        return C[n][k];
    }
       
    // Return the Lm, n Lobb Number.
    function lobb(n, m)
    {
        return ((2 * m + 1) * binomialCoeff(2 * n, m + n)) /
                                             (m + n + 1);
    }
       
// Driver code
 
    let n = 5, m = 3;
    document.write(lobb(n, m));
     
    // This code is contributed by sanjoy_62.
</script>

Producción : 

 35

Complejidad temporal: O(2*n*(m+n))

Espacio Auxiliar: O((2*n)*(m+n))
 

Publicación traducida automáticamente

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