枚舉子集

對於一個用位來表示的集合,我們可以枚舉其子集。設集合爲sup,枚舉的子集爲sub

按照遞增的順序枚舉的話,如果只是簡單的(sub+1)&sup的話,會出現前後沒有發生變化的問題。應該用下面的形式:

for(int sub = 0; sub != sup; sub = (sub - sup) & sup)

具體原因:應該是利用了補碼的不對稱性,但是我好想解釋不清楚。。。

按照遞減的順序枚舉的話 ,(sub-1)&sup可以自動的忽略0,再減去1,形式爲:

for(int sub = sup & (sup - 1);sub;sub = (sub-1) & sup)


發佈了283 篇原創文章 · 獲贊 4 · 訪問量 17萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章