用蠻力法(窮舉法)求解冪集問題
用蠻力法(窮舉法)求解冪集問題
【問題描述】對於給定的正整數n(n>=1),求1~n構成的集合的冪集(即由1~n的集合中所有子集構成的集合,包括全集和空集)
直接窮舉法
設集合a[0..2]={1.2.3},其所有集合元素對應的二進位制位及其十進位制數如表所示。
集合元素 | 對應的二進位制位 | 對應的十進位制數 |
{} | 000 | 0 |
{1} | 100 | 4 |
{2} | 010 | 2 |
{1,2} | 110 | 6 |
{3} | 001 | 1 |
{1,3} | 101 | 5 |
{2,3} | 011 | 3 |
{1,2,3} | 111 | 7 |
其實就是輸出{1,2,3}在0~7所表示的二進位制的所在的1的位置。
源程式如下:
#include <iostream>
using namespace std;
//二進位制數變化
void inc(int b[],int n) {
for (int i = 0; i < n;i++) {
if (b[i]) { //將元素1改為0
b[i] = 0;
}
else { //將元素0改為1並退出for迴圈
b[i] = 1;
break;
}
}
}
//求冪集
void PSet(int a[],int b[],int n) {
int i, k;
int pw = (int)pow(2, n); //求2的n次方
cout << "1~"<<n<<"的冪集為:" << endl;
for ( i = 0; i < pw;i++) {
cout << "{";
for (k = 0; k < n;k++) {
if (b[k]) { //輸出二進位制位中為1的所對應的{1,2,3..n}所在的位置的數
cout <<" "<< a[k];
}
}
cout << "}";
inc(b, n); //變更二進位制數
}
cout << endl;
}
int main() {
int n = 0;
cout << "請輸入n的數" << endl;
cin >> n;
int *a=new int [n]; //用陣列a表示1-n的十進位制數
int *b = new int[n]; //用陣列b表示二進位制位
for (int i = 0; i < n;i++) {
a[i] = i + 1; //a初始化為1,2,3..n
b[i] = 0; //b初始化為{0,0,0..}
}
PSet(a,b,n);
system("pause");
return 0;
}
輸出結果為:
請輸入n的數
5
1~5的冪集為:
{}{ 1}{ 2}{ 1 2}{ 3}{ 1 3}{ 2 3}{ 1 2 3}{ 4}{ 1 4}{ 2 4}{ 1 2 4}{ 3 4}{ 1 3 4}{ 2 3 4}{ 1 2 3 4}{ 5}{ 1 5}{ 2 5}{ 1 2 5}{ 3 5}{ 1 3 5}{ 2 3 5}{ 1 2 3 5}{ 4 5}{ 1 4 5}{ 2 4 5}{ 1 2 4 5}{ 3 4 5}{ 1 3 4 5}{ 2 3 4 5}{ 1 2 3 4 5}
請按任意鍵繼續. . .
【演算法分析】
演算法中pw迴圈次,不考慮冪集輸出,inc()的時間複雜度為O(n),所以演算法的時間複雜度為O(n*),屬於指數級的演算法。
相關文章
- 窮舉法解決0/1揹包問題——pythonPython
- 分治法求解問題
- 二分法和窮舉法
- C語言-for迴圈之窮舉法練習C語言
- 【力扣】排列問題(回溯法)(去重)力扣
- 快速冪的寫法
- 淺談倍增法求解LCA
- 大數翻倍法求解CRT
- 無重複字元的最長子串問題 (移動視窗法求解)字元
- 通過窮舉法快速破解excel或word加密文件最高15位密碼Excel加密密碼
- goroutine 語法問題Go
- 強化學習(四)用蒙特卡羅法(MC)求解強化學習
- 冪等性問題
- 暴力法求解“微信群覆蓋”?
- [靈性程式設計]這想要那也想要的需求解決,2^ n次方列舉法程式設計
- 踩坑日誌--CEPH叢集常見問題解決辦法
- 回溯法求迷宮問題
- 華納雲:如何解決hadoop叢集無法啟動的問題?Hadoop
- 搭建Kubernetes叢集時DNS無法解析問題的處理過程DNS
- VMware Fusion 13無法使用問題
- 跨域問題解決辦法跨域
- [20200227]使用tcpdump or and ()語法問題.txtTCP
- json無法序列化問題JSON
- Linux無法解析主機問題Linux
- 樹遞迴問題的求解遞迴
- python+gurobi求解排班問題Python
- NP難問題求解綜述
- latex 語法塊中字型加粗問題、換行問題
- 在聯網狀態下,有很多應用無法聯網問題,如360安全衛士, Smartscreen篩選器無法訪問, 部分網頁無法訪問等問題的解決方法網頁
- springboot中靜態頁面無法訪問及return無法重定向問題Spring Boot
- 關於Oracle 9i字符集問題的解決辦法FCOracle
- 排查 k8s 叢集 master 節點無法正常工作的問題K8SAST
- 用 Httprunner3 做介面測試遇到了問題,求解~HTTP
- 防止跨域問題無法訪問網址跨域
- React-Native 新版本無法Debug無法除錯問題React除錯
- svn相關問題解決辦法
- Windows Defender無法開啟的問題Windows
- ANSYS HFSS無法匯出dxf問題