求集合的幂集【转】
2014-01-17 11:52
134 查看
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个元素进行了取舍处理的当前状态(左分支表示取,右分支表示舍 )。因此求幂集元素的过程即为先序遍历这棵状态树的过程。
具体算法如下:
集合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个元素进行了取舍处理的当前状态(左分支表示取,右分支表示舍 )。因此求幂集元素的过程即为先序遍历这棵状态树的过程。
具体算法如下:
#include <iostream> #include <cstring> #include <ctype.h> #include <stdlib.h> #include <string> using namespace std; char a[100]; char b[100]; void GetPowerSet(int i, char a[]) { char x; int k; int len = strlen(a); if(i >= len) { if(b[0]) cout << b << endl; else cout << "XX" << endl; // 表示空集 } else { x = a[i]; k = strlen(b); b[k] = x; GetPowerSet(i+1, a); b[k] = 0; GetPowerSet(i+1, a); } } int main() { while(scanf("%s", a) != EOF) { printf("%s的幂集是:\n", a); printf("------------\n"); GetPowerSet(0, a); printf("------------\n"); } }
相关文章推荐
- javascript实现数据结构: 树和二叉树的应用--最优二叉树(赫夫曼树),回溯法与树的遍历--求集合幂集及八皇后问题
- C语言 集合运算 并、交,相对补,对称差,判断两个集合是否相等,求集合幂集
- C语言获取集合幂集
- 回溯法学习---求集合的幂集
- 非递归求集合的幂集
- 二进制方法 解 集合的幂集
- 怎么计算一个集合的幂集(所有子集形成的集合)的长度?涉及组合数学基础
- C语言 集合运算 并、交,相对补,对称差,判断两个集合是否相等,求集合幂集(改进幂集)
- C++ 递归艺术----求任意集合的幂集组合和子集合的总个数
- 集合幂集
- 关于集合幂集问题的递归算法
- C语言 回溯的应用 ---- 输出集合{1,2,...n}的幂集
- 求集合的幂集
- 利用二叉树先序遍历求含n个元素的集合的幂集(used stack and vector)
- 求集合的幂集
- 输出一个集合的幂集(所有子集)
- C语言 生成集合的幂集
- 设S是有n个元素的集合,S的幂集是S所有可能的子集组成的集合。
- 回溯法(深度优先搜索)求集合的幂集
- 回溯法之求n个集合的幂集