http://www.wutianqi.com/?p=1157 集合A的冪集是由集合A的所有子集所組成的的集合。
如:A={1,2,3},則A的冪集P(A)={{1,2,3},{1,2},{1,3},{1},{2,3},{2},{3},{ }}。
求一個集合的冪集就是求一個集合的所有的子集,方法有窮舉法,分治法,回溯等,這里主要介紹一下回溯法。
回溯法是設計遞歸過程的一種重要的方法,它的求解過實質上是一個先序遍歷一棵“狀態樹”的過程,只是這棵樹不是遍歷前預先建立的,而是隱含在遍歷過程中的。
冪集中的每個元素是一個集合,它或是空集,或含集合A中一個元素,或含集合A中兩個元素…… 或等于集合A。反之,從集合A 的每個元素來看,它只有兩種狀態:它或屬冪集的無素集,或不屬冪集的元素集。則求冪集p(A)的元素的過程可看成是依次對集合A中元素進行“取”或“舍”的過程,并且可以用一棵二叉樹來表示過程中冪集元素的狀態變化過程,樹中的根結點表示冪集元素的初始狀態(空集);葉子結點表示它的終結狀態,而第i層的分支結點,則表示已對集合A中前i-1個元素進行了取舍處理的當前狀態(左分支表示取,右分支表示舍 )。因此求冪集元素的過程即為先序遍歷這棵狀態樹的過程。
具體算法如下:
C/C++描述: