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:
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))