Narayana number
Last Updated :
17 Jul, 2022
In combinatorics, the Narayana numbers N(n, k), n = 1, 2, 3 …, 1 ? k ? n, form a triangular array of natural numbers, called the Narayana triangle. It is given by :
Narayana numbers N(n, k) can be used to find the number of expressions containing n-pairs of parentheses, which are correctly matched and which contain k distinct nesting.
For instance, N(4, 2) = 6 as with four pairs of parentheses six sequences can be created which each contain two times the sub-pattern ‘()’ :
()((())) (())(()) (()(())) ((()())) ((())()) ((()))()
Examples:
Input : n = 6, k = 2
Output : 15
Input : n = 8, k = 5
Output : 490
Below is the implementation of finding N(n, k) :
C++
#include<bits/stdc++.h>
using namespace std;
int productofCoefficient( int n, int k)
{
int C[n + 1][k + 1];
for ( int i = 0; i <= n; i++)
{
for ( int j = 0; j <= min(i, k); j++)
{
if (j == 0 || j == i)
C[i][j] = 1;
else
C[i][j] = C[i - 1][j - 1] + C[i - 1][j];
}
}
return C[n][k] * C[n][k - 1];
}
int findNN( int n, int k)
{
return (productofCoefficient(n, k)) / n;
}
int main()
{
int n = 8, k = 5;
cout << findNN(n, k) << endl;
return 0;
}
|
Java
class GFG
{
static int productofCoefficient( int n,
int k)
{
int C[][] = new int [n + 1 ][k + 1 ];
for ( int i = 0 ; i <= n; i++)
{
for ( int j = 0 ;
j <= Math.min(i, k); j++)
{
if (j == 0 || j == i)
C[i][j] = 1 ;
else
C[i][j] = C[i - 1 ][j - 1 ]
+ C[i - 1 ][j];
}
}
return C[n][k] * C[n][k - 1 ];
}
static int findNN( int n, int k)
{
return (productofCoefficient(n, k)) / n;
}
public static void main (String[] args)
{
int n = 8 , k = 5 ;
System.out.println(findNN(n, k));
}
}
|
Python3
def productofCoefficient(n, k):
C = [[ 0 for x in range (k + 1 )] for y in range (n + 1 )]
for i in range ( 0 , n + 1 ):
for j in range ( 0 , min (i + 1 ,k + 1 )):
if (j = = 0 or j = = i):
C[i][j] = 1
else :
C[i][j] = C[i - 1 ][j - 1 ] + C[i - 1 ][j]
return C[n][k] * C[n][k - 1 ]
def findNN(n, k):
return (productofCoefficient(n, k)) / n
n = 8
k = 5
print ( int (findNN(n, k)))
|
C#
using System;
class GFG {
static int productofCoefficient( int n,
int k)
{
int [, ] C = new int [n + 1, k + 1];
for ( int i = 0; i <= n; i++) {
for ( int j = 0;
j <= Math.Min(i, k); j++) {
if (j == 0 || j == i)
C[i, j] = 1;
else
C[i, j] = C[i - 1, j - 1]
+ C[i - 1, j];
}
}
return C[n, k] * C[n, k - 1];
}
static int findNN( int n, int k)
{
return (productofCoefficient(n, k)) / n;
}
public static void Main()
{
int n = 8, k = 5;
Console.WriteLine(findNN(n, k));
}
}
|
PHP
<?php
function productofCoefficient( $n , $k )
{
$C = array ( array ());
for ( $i = 0; $i <= $n ; $i ++)
{
for ( $j = 0; $j <= min( $i , $k ); $j ++)
{
if ( $j == 0 || $j == $i )
$C [ $i ][ $j ] = 1;
else
$C [ $i ][ $j ] = $C [ $i - 1][ $j - 1] +
$C [ $i - 1][ $j ];
}
}
return $C [ $n ][ $k ] * $C [ $n ][ $k - 1];
}
function findNN( $n , $k )
{
return (productofCoefficient( $n , $k )) / $n ;
}
$n = 8;
$k = 5;
echo findNN( $n , $k ) ;
?>
|
Javascript
<script>
function productofCoefficient(n, k)
{
let C = new Array(n + 1);
for ( var i = 0; i < C.length; i++) {
C[i] = new Array(2);
}
for (let i = 0; i <= n; i++)
{
for (let j = 0;
j <= Math.min(i, k); j++)
{
if (j == 0 || j == i)
C[i][j] = 1;
else
C[i][j] = C[i - 1][j - 1]
+ C[i - 1][j];
}
}
return C[n][k] * C[n][k - 1];
}
function findNN(n, k)
{
return (productofCoefficient(n, k)) / n;
}
let n = 8, k = 5;
document.write(findNN(n, k));
</script>
|
Output:
490
Time Complexity: O(n*n)
space complexity: O((n+1)*(k+1))
Share your thoughts in the comments
Please Login to comment...