File tree Expand file tree Collapse file tree 1 file changed +48
-0
lines changed
algorithm/bit_manipulation Expand file tree Collapse file tree 1 file changed +48
-0
lines changed Original file line number Diff line number Diff line change 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+ }
You can’t perform that action at this time.
0 commit comments