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