二進位制輸出所有的子集

2021-08-03 11:49:34 字數 378 閱讀 3817

參考的書是劉汝佳《演算法競賽入門經典》

對於乙個二進位制數,從右往左,第一位代表數字0,第二位代表數字1,第三位代表數字2,以此類推,這樣乙個二進位制數就可以代表乙個子集了。例如0100011000110111表示對應的子集為

最重要的好處是,利用二進位制數表示子集,可以很方便的表示集合的交並補運算。二進位制數的&對應交運算,|對應並運算,all_bits^a對應補運算,all_bits = (1<

#include using namespace std;

void print_subset(int n, int s)

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

if(s&(1<>n;

for(int i = 0; i < (1<

二進位制子集生成

之前看 演算法競賽入門經典 這本書,看到了子集生成部分,以為自己沒有看二進位制法。誰知整理部落格的時候發現很早之前就學習過了,然而我描述的不完整,看了半天沒看懂什麼意思,果然欠下的都是要還的。用二進位制表示子集,其中從右往左第i位 從0開始編號 表示元素i是否在集合中。在集合表示法中,1 i 表示第...

二進位制輸出

將1 byte 數,以二進位制輸出.注意是1byte數,如果是int之類的,應注意大小端問題.include define bytetobinarypattern d d d d d d d d define bytetobinary byte byte 0x80 1 0 byte 0x40 1 0...

二進位制列舉子集

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