Given a number N which is the size of the set and a number K, the task is to find the count of subsets, of the set of N elements, having at most K elements in it, i.e. the size of subset is less than or equal to K.
Examples:
Input: N = 3, K = 2
Output: 6
Subsets with 1 element in it = {1}, {2}, {3}
Subsets with 2 elements in it = {1, 2}, {1, 3}, {1, 2}
Since K = 2, therefore only the above subsets will be considered for length atmost K. Therefore the count is 6.
Input: N = 5, K = 2
Output: 15
Approach:
- Since the number of subsets of exactly K elements that can be made from N items is (NCK). Therefore for “at most”, the required count will be
- Inorder to calculate the value of NCK, Binomial Coefficient is used. Please refer this article to see how it works.
- So to get the required subsets for length atmost K, run a loop from 1 to K and add the NCi for each value of i.
Below is the implementation of the above approach:
C++
// C++ code to find total number of// Subsets of size at most K#include <bits/stdc++.h>using namespace std;// Function to compute the value// of Binomial Coefficient C(n, k)int binomialCoeff(int n, int k){ int C[n + 1][k + 1]; int i, j; // 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 previously // stored values else C[i][j] = C[i - 1][j - 1] + C[i - 1][j]; } } return C[n][k];}// Function to calculate sum of// nCj from j = 1 to kint count(int n, int k){ int sum = 0; for (int j = 1; j <= k; j++) { // Calling the nCr function // for each value of j sum = sum + binomialCoeff(n, j); } return sum;}// Driver codeint main(){ int n = 3, k = 2; cout << count(n, k) << endl; n = 5, k = 2; cout << count(n, k) << endl; return 0;} |
Java
// Java code to find total number of// Subsets of size at most Kimport java.lang.*;class GFG{// Function to compute the value// of Binomial Coefficient C(n, k)public static int binomialCoeff(int n, int k){ int[][] C = new int[n + 1][k + 1]; int i, j; // Calculate value of Binomial Coefficient // in bottom up manner for (i = 0; i <= n; i++) { for (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];}// Function to calculate sum of// nCj from j = 1 to kpublic static int count(int n, int k){ int sum = 0; for (int j = 1; j <= k; j++) { // Calling the nCr function // for each value of j sum = sum + binomialCoeff(n, j); } return sum;}// Driver codepublic static void main(String args[]){ GFG g = new GFG(); int n = 3, k = 2; System.out.print(count(n, k)); int n1 = 5, k1 = 2; System.out.print(count(n1, k1));}}// This code is contributed by SoumikMondal |
Python3
# Python code to find total number of# Subsets of size at most K# Function to compute the value# of Binomial Coefficient C(n, k)def binomialCoeff(n, k): C = [[0 for i in range(k + 1)] for j in range(n + 1)]; i, j = 0, 0; # Calculate value of Binomial Coefficient # in bottom up manner for i in range(n + 1): for j in range( 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];# Function to calculate sum of# nCj from j = 1 to kdef count(n, k): sum = 0; for j in range(1, k+1): # Calling the nCr function # for each value of j sum = sum + binomialCoeff(n, j); return sum;# Driver codeif __name__ == '__main__': n = 3; k = 2; print(count(n, k), end=""); n1 = 5; k1 = 2; print(count(n1, k1));# This code is contributed by 29AjayKumar |
C#
// C# code to find total number of// Subsets of size at most Kusing System;class GFG{ // Function to compute the value // of Binomial Coefficient C(n, k) public static int binomialCoeff(int n, int k) { int[,] C = new int[n + 1, k + 1]; int i, j; // Calculate value of Binomial Coefficient // in bottom up manner for (i = 0; i <= n; i++) { for (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]; } // Function to calculate sum of // nCj from j = 1 to k public static int count(int n, int k) { int sum = 0; for (int j = 1; j <= k; j++) { // Calling the nCr function // for each value of j sum = sum + binomialCoeff(n, j); } return sum; } // Driver code public static void Main() { int n = 3, k = 2; Console.Write(count(n, k)); int n1 = 5, k1 = 2; Console.Write(count(n1, k1)); }}// This code is contributed by AnkitRai01 |
Javascript
<script>// Javascript implementation of the// above approach// Function for the binomial coefficientfunction binomialCoeff(n, k){ var 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(k + 1); } var i, j; // Calculate value of Binomial Coefficient // in bottom up manner for (i = 0; i <= n; i++) { for (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];} // Function to calculate sum of// nCj from j = 1 to kfunction count(n, k){ var sum = 0; for (var j = 1; j <= k; j++) { // Calling the nCr function // for each value of j sum = sum + binomialCoeff(n, j); } return sum;}// Driver codevar n = 3;var k = 2;document.write(count(n, k));var n = 5;var k = 2;document.write(count(n, k));// This code is contributed by ShubhamSingh10</script> |
6 15
Time Complexity: O(n2 * k)
Auxiliary Space: O(n + k)
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!
