演算法學習 子集生成

2021-10-03 07:15:03 字數 1392 閱讀 8847

//子集生成

#include

#include

#include

#include

#include

#include

using

namespace std;

//快速冪運算

/*巧算 m=1010(利用二進位制)*/

intmypow_4

(int n,

int m)

return result;

}//逐步生成(迭代)

setint>>

getsubset_1

(int arr,

int n)

res = new_res;

//更新大集合

}return res;

}//遞迴解法

//cur表示當前元素的下標

setint>>

getsubset_2

(int arr,

int cur)

setint>> oldset =

getsubset_2

(arr, cur -1)

;//遍歷舊集合的每乙個元素(子集),對於當前的元素(陣列裡的元素),可以選擇加或者不加

for(set<

int> s : oldset)

return newset;

}//二進位制解法(可以按字典序逆序)

listint>>

getsubset_3

(int arr,

int n)

} res.

push_back

(s);

}return res;

}int

main()

; setint>> s =

getsubset_2

(arr,4)

;//如果只要求非空子集,就把大集合中的空集刪除即可

//setempty_set;//新建乙個空集便於刪除結果集合中的空集------刪除方法1

//set>::iterator it = s.begin();//指向第乙個元素(即空集)的迭代器-------刪除方法2

//列印所有的子集

for(set<

int> ss : s)

cout <<

"]"<< endl;

}//二進位制解法

int arr_2[3]

=;listint>> l =

getsubset_3

(arr_2,3)

;for

(list<

int> lis : l)

cout <<

"]"<< endl;

}return0;

}

演算法學習之子集生成問題

在暴力求解演算法中,子集生成問題是乙個很重要的演算法,在乙個陣列中找到各種子集,然後篩選出符合題目條件的子集,比如n sum等問題,現在寫乙個位向量法生成子集的通用模板 include include include include using namespace std visit是乙個標記陣列,...

子集生成演算法

劉汝佳書上的內容 下文提到的集合 其元素預設為0 n 1 n 個 意思就是一次選乙個 放到 裡 include include include include include include include include include include include include includ...

子集生成演算法

子集生成演算法屬於暴力法中一類非常重要的演算法.給定乙個集合,請寫乙個演算法,得到其所有的子集.這裡假定該集合不存在重複的元素.舉個栗子,給定集合 1,2,3 你返回這樣一堆子集 1 2 3 1,2 1,3 2,3 1,2,3 根據離散數學的知識,我們可以知道,乙個長度為n的集合的子集有2n個,集合...