冪集問題(即求全組合,全部子集問題)

2021-07-25 00:27:26 字數 1333 閱讀 9724

8、若s

是n個元素的集合,則

s的冪集

p(s)

定義為s

的所有子集的集合。例如,

s=(a,b,c),p(s)=

。給定s

,寫一遞迴演算法求

p(s)

。(本題

20分)

#include #include // 《資料結構》嚴蔚敏p150 例6.3

void printpowerset(int i, int n)

std::cout << std::endl;

} else }

template void printpowerset(const t * a, int left, int right)

std::cout << std::endl;

} else }

int main()

; printpowerset(a, 0, 5);

return 0;

}

9. 對輸入的任意正整數n,列印出集合的所有非空子集

#include int main()

的全部非空子集

unsigned m = 1;

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

m *= 2;

m--;

printf("m = %d\n", m);// 非空子集數

for (unsigned i = 1; i <= m; i++)

printf("\n"); }

return 0;

}

方便:將問題轉化為利用algorithm中的排列方法對01陣列排列,目測優點是可以對付數量很大的情況

#include #include // 顯示在長度為n的陣列a中取m個元素的全部取法

template void disppowerset(const t a, unsigned n, unsigned m)

陣列的全排列,如果為1,則a中相應下標元素被選中

for (size_t i = 0; i < m; i++)

for (size_t i = m; i < n; i++)

do } printf("\n");

} while (std::prev_permutation(mark, mark + n));

free(mark);

}int main()

; disppowerset(a, 5, 3);

return 0;

}

求集合的冪集

集合的冪集a 則a的冪集為 對於求a集合的冪集,a中的元素它只有兩中狀態,它或屬於冪集的元素集,或者不屬於冪集的元素集。求冪集的過程可以看成是對a中元素進行 取 或 舍 的過程。狀態樹如下 葉子節點表示終結狀態,而第i層的分支節點,則表示已對集合a中前i 1個元素進行了取 舍處理的狀態。求冪集的過程...

求集合的冪集

這是朋友叫我幫他寫的,足足幹了兩天,終於在養好精神後把它做出來了,雖然是遞迴實現的,但總算是弄出來了,兩天時間裡搞了好多遍迴圈來實現,但是寫著寫著就迷糊了,洗了個頭,刷了把臉,人精神了,換了遞迴刺溜一下就寫出來了,手動開心 哈哈哈哈。但是據說還可以用分治法 回溯法 窮舉法來實現哦 include i...

求整數冪問題

問題 過程演示 x 3 x x x,x 9 x 3 x 3 x 3,x x 9 x 9 x 9 x 2 x x,x 4 x 2 x 2,x 8 x 4 x 4,x x 8 x 8,x x x 8 x 2 x 上面的方法利用的其實就是分治思想 x n begin displaystyle quad n...