Binomial Coefficient in C++

C++Server Side ProgrammingProgramming

Binomial coefficient denoted as c(n,k) or ncr is defined as coefficient of xin the binomial expansion of (1+X)n.

The Binomial coefficient also gives the value of the number of ways in which k items are chosen from among n objects i.e. k-combinations of n-element set. The order of selection of items not considered.

Here, we are given two parameters n and k and we have to return the value of binomial coefficient nck .

Example

Input : n = 8 and k = 3
Output : 56

There can be multiple solutions to this problem,

General Solution

There is a method to calculate the value of c(n,k) using a recursive call. The standard formula for finding the value of binomial coefficients that uses recursive call is −

c(n,k) = c(n-1 , k-1) + c(n-1, k)

c(n, 0) = c(n, n) = 1

The implementation of a recursive call that uses the above formula −

Example

#include <iostream>
using namespace std;
int binomialCoefficients(int n, int k) {
   if (k == 0 || k == n)
   return 1;
   return binomialCoefficients(n - 1, k - 1) + binomialCoefficients(n - 1, k);
}
int main() {
   int n=8 , k=5;
   cout<<"The value of C("<<n<<", "<<k<<") is "<<binomialCoefficients(n, k);
   return 0;
}

Output

The value of C(8, 5) is 56

Another solution might be using overlapping subproblem. So, we will use dynamic programming algorithm to avoid subproblem.

Example

#include <bits/stdc++.h>>
using namespace std;
int binomialCoefficients(int n, int k) {
   int C[k+1];
   memset(C, 0, sizeof(C));
   C[0] = 1;
   for (int i = 1; i <= n; i++) {
      for (int j = min(i, k); j > 0; j--)
         C[j] = C[j] + C[j-1];
   }
   return C[k];
}
int main() {
   int n=8, k=5;
   cout<<"The value of C("<<n<<", "<<k<<") is "<<binomialCoefficients(n,k);
   return 0;
}

Output

The value of C(8, 5) is 56
raja
Published on 22-Nov-2019 13:51:17
Advertisements