二進位制子集生成

2021-07-10 11:27:06 字數 704 閱讀 3508

之前看《演算法競賽入門經典》這本書,看到了子集生成部分,以為自己沒有看二進位制法。誰知整理部落格的時候發現很早之前就學習過了,然而我描述的不完整,看了半天沒看懂什麼意思,果然欠下的都是要還的。

用二進位制表示子集,其中從右往左第i位(從0開始編號)表示元素i是否在集合中。    

在集合表示法中, 1 << i 表示第i個元素; s & (1int n = 4;

void subset()

{ for(int s = 0; s < (1<";

for(int i = 0; i < n; i++)

{if(s & (1《輸出:每乙個子集對應的編號和子集對應的元素的位置。

s : 0 => 

s : 1 => 0

s : 2 => 1

s : 3 => 0 1

s : 4 => 2

s : 5 => 0 2

s : 6 => 1 2

s : 7 => 0 1 2

s : 8 => 3

s : 9 => 0 3

s : 10 => 1 3

s : 11 => 0 1 3

s : 12 => 2 3

s : 13 => 0 2 3

s : 14 => 1 2 3

s : 15 => 0 1 2 3

二進位制列舉子集

利用二進位制的 開關 特性列舉 詳細為 如果給定集合a大小為n,則想象a 的每乙個元素相應乙個開關位 0或1 0表示不出現,1表示出現。當每乙個元素的開關位的值確定時,就得到乙個子集。因此共同擁有2 n 1種情況 全0為空集,這裡不考慮 我們利用區間 1,2 n 1 該區間上的每乙個整數相應乙個子集...

子集生成 二進位制方法與遞迴方法

二進位制方法 include include using namespace std int n vector con void get sub int input printf n int main int argc,char const argv int i 0 while 0 length i...

C 二進位制法生成子集

乙個有 n 個元素的集合 n 0,n為整數 可以生成 2 n個子集。例如 可以生成4個子集 二進位制法就是 從0到 2 n用二進位制表示,為1的對應的陣列位置元素 納入子集集合。例如 a 有 16 個子集,建立如下表 十進位制數 二進位制數 1對應的陣列元素 結果集0 0000空1 0001 a 3...