Skip to content

Commit d4cf18f

Browse files
committed
feat: add powerSet algoritm
1 parent d2f04e1 commit d4cf18f

File tree

1 file changed

+48
-0
lines changed

1 file changed

+48
-0
lines changed
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
/**
2+
* @brief program untuk memsimulasikan algoritma powerSet yang digunakan
3+
* untuk mendapatkan semua sub himpunan dari semua himpunan.
4+
*
5+
* @author yusuf
6+
* @date 9 september 2025
7+
*/
8+
#include <bits/stdc++.h>
9+
/**
10+
* @brief powerSet adalah salah satu algoritma untuk mendapatkan semua subset
11+
* sebuah himpunan(set),ini dibutuhkan ketika menghadapi masalah/problem seperti
12+
* perfect sum.algoritma ini memiliki 2 metode untuk mengaplikasinnya yaitu
13+
* backtracking dan bitmasking,Contoh dibawah memakai bitmasking
14+
*
15+
* jika kita punya n element,maka banyak subset adalah 2^n.
16+
* bilangan biner dengan n bit dapat membentuk tepat 2^n kombinasi
17+
* misal n = 3,maka total subset adalah 2^3 = 8
18+
* semua bilangan biner 3 bit mulai 000(0) sampai 111(7) bisa dipakai untuk
19+
* mewakili subset
20+
*
21+
* aturannya:
22+
* bit ke-j = 1 ->element ke -j masuk subset
23+
* bit ke-j = 0 ->element ke j tidak masuk subset
24+
* @details Time complexity O(n^2),Space Complexity O(n)
25+
*/
26+
void PowerSet(){
27+
std::vector<int>nums = {1,2,3};
28+
int n = nums.size();
29+
for(int mask = 0;mask < (1 << n);mask++){ //iterasi sampai 2^n(banyak subset)
30+
std::vector<int>subset;
31+
for(int i = 0;i < n;i++){
32+
if(mask & (1 << i)){ // cek apakah bit ke i menyala
33+
subset.push_back(nums[i]);
34+
}
35+
}
36+
std::cout << "{ ";
37+
for(auto x: subset){
38+
std::cout << x << " ";
39+
}
40+
std::cout << "}";
41+
}
42+
43+
}
44+
int main(){
45+
PowerSet();
46+
std::cin.get();
47+
return 0;
48+
}

0 commit comments

Comments
 (0)