求一个集合所有子集的算法c语言,set theory(集合论)

1. 集合论简介

集合论,是数学的一个基本的分支学科,研究对象是一般集合。集合论在数学中占有一个独特的地位,它的基本概念已渗透到数学的所有领域。集合论或集论是研究集合(由一堆抽象物件构成的整体)的数学理论,包含了集合、元素和成员关系等最基本的数学概念。

在我们还在高中教育阶段,可能或多或少会接触到一些诸如集合并交差的运算,而集合论与我们C++的STL运算有很多相似而相同的关系。

2. 集合关系

我们假设有两个集合:

A={2,4,6}

B={1,2,3,4,5}

在数学上

交运算可以写为:

ae75e970f6dd30a97d5f5df4d1cb3096.png

并运算可以写为:

e79ffe43e7cc53ea5d3cb85e9338e24b.png

差运算可以写为:

f9cd4c7efe2e6e880d00c692b39354e3.png

我们以该内容为例,进行代码介绍。

3. Algorithm头文件

STL的算法头文件,STL中除了我们常用的这些容器文件以外,还有一个极其重要的头文件,Algorithm,他是我们常用的标准算法的集合,为我们预先封装了我们可能会用到的算法,比如说排序,使用Algorithm头文件中的sort函数可以快速帮我们进行数组排序,以下是实例代码:#include

#include

using namespace std;

int main(){

int a[6]={1,5,9,4,6,3};

sort(a,a+6);        //使用STL的快速排序算法

for(int i=0;i<6;i++){

cout<

}

}

4. 集合论与STL集合

在数学上的并运算我们可以使用set_union()函数进行实现,而交运算我们也可以使用set_intersection()函数进行实现,查集则使用set_difference()函数实现,以下是简单的实现代码,这个案例会同时提供一些前面所学的知识,当作一个汇总练习。#include 

#include 

#include 

#include         //使用算法头文件

using namespace std;

int main(){

set a, b;           //建立两个集合

vector c;           //建立一个向量,我们用这个向量存储运算结果

//a = {2,4,6};

a.insert(2);

a.insert(4);

a.insert(6);

//b = {1,2,3,4,5};

b.insert(1);

b.insert(2);

b.insert(3);

b.insert(4);

b.insert(5);

set_union(a.begin(), a.end(), b.begin(), b.end(), back_inserter(c));//并集

for(vector::iterator it=c.begin();it!=c.end();it++){

cout<

}

cout<

c.clear();

set_intersection(a.begin(), a.end(), b.begin(), b.end(), back_inserter(c));//交集

for(vector::iterator it=c.begin();it!=c.end();it++){

cout<

}

cout<

c.clear();

set_difference(a.begin(), a.end(), b.begin(), b.end(), back_inserter(c)); //差集 从B中减去A包含的元素

for(vector::iterator it=c.begin();it!=c.end();it++){

cout<

}

cout<

c.clear();

return 0;

}

可以见的,以上的三个函数,其使用方法均是第一个集合开始到结束,第二个集合开始到结束,然后使用back_inserter插入器将数据插入到某一个向量或者其他容器之中,并交差是我们集合运算中的最基本的运算,有了这几种运算,我们可以构建出非常多的集合论中的各种功能,以达到我们的数学功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值