子集subset問題

子集subset問題

 

集即組合的集合

例如求ABCD的子集,即求ABCD中任取0個的情況+ABCD中任取1個的情況+ABCD中任取2個的情況+ABCD中任取3個的情況+ABCD中任取4個的情況。

 

遇到集問題,首先想到暴力求法,即所有元素均有兩種情況:取或不取。

因此暴力求法可以使用四層for循環解決上述問題。

 

然而是否有更簡單的方法?

答案顯然是肯定的,即利用前面討論的位運算的方法。

爲何想到位運算的方法?因爲前面暴力求解的過程中,我們遇到了取或不取得抉擇,用計算機的頭腦來思考,即0,1問題。

 

好了,上述問題可以變爲下面的情況:

ABCD  總共情況爲2的4次方,即16種。

因此對應的整形數位0~15

將這16個數字寫成4位二進制數爲:

0      0000

1      0001

2      0010

3      0011

4      0100

5      0101

6      0110

7      0111

8      1000

9      1001

10     1010

11     1011

12     1100

13     1101

14     1110

15     1111

其中位爲1表示選擇該位對應的字符,例如1101對應ABCD,表示選取ABD。

當遇到棋盤類型的問題,格子比較少,一般32個格子以內,且表示方法只有0,1兩種的情況,適合轉換爲整形數,使用位運算,集問題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章