`
美丽的小岛
  • 浏览: 310783 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

基于二进制的集合(c语言)

 
阅读更多

用C去操作集合,有时候觉得十分的麻烦,不过,集合又一定要用。苦思了一些日子,当集合遇到了二进制,也当二进制到了位运算。这个就很好解决。建立这样的一个模型,当集合A有元素a,就用1在a相应的位表示出来,否则就为0 。

一个例子:A={a,b,c} --------7(111)

               A有一字集A1={a,c}-------------5(101)

就这样表示。

集合与二进制有一个很思意的相同点,n个元素的集合有2^n个子集;n位的二进制有2^n个表示方法,好吧,让他们对应起来吧。

对于集合B={a,b},看下面:

+--------+--------+--------+

|   集合  |  二进制|   整数  |

+--------+--------+--------+

|   空集  |  00     |   0      |

+--------+--------+--------+

|   {a}  |  01     |   1      |

+--------+--------+--------+

|   {b}  |  10     |   2      |

+--------+--------+--------+

| {a,b}  |  11    |   3      |

+--------+--------+--------+

就这样了。对于集合的操作也就是相应的操作了,写一个C代码看得具体一点。

 

#include<stdio.h>
void bin_to_set(unsigned int x , char e[]){
    int i = 0,f = 0 ;
    printf("{") ;
    while(x > 0){
        if((x & 1) == 1) {
            if(f == 0)  {printf("%c",e[i]) ; f = 1 ;}
            else printf(",%c",e[i]) ;
        }
        ++i ;
        x >>= 1 ;
    }
    printf("}") ;
}
unsigned int U(unsigned int x1 ,unsigned int x2){//并
    return ( x1 | x2 ) ;
}

unsigned int C(unsigned int x1 ,unsigned int x2){//交
    return ( x1 & x2 ) ;
}

unsigned int N(unsigned int x,int n){//非
    return (((1<< n) -1) ^ x) ;
}

int E(unsigned int x1 ,unsigned int x2){//x2是否包括x1
    return ( (x1 | x2) == x2 ) ;
}
void hind_set( char *c,int n){
    int m = 1 << n ;
    int i ;
    for(i = 0 ;i < m ; ++i){
        bin_to_set(i,c) ;
        printf("\n") ;
    }
}
int main(){
    char c[] = {'a','b','c'} ;
    printf("{a,b,c}的幂集:\n") ;
    hind_set(c,3) ;
    unsigned  x1 = 5 ;//{a,c}
    unsigned x2 = 3 ;//{a,b}
    unsigned x = 7 ;//{a,b,c}
    printf("{a,c}与{a,b}并:") ;
    bin_to_set(U(x1,x2),c) ;
    printf("\n{a,c}与{a,b}交:") ;
    bin_to_set(C(x1,x2),c) ;
    printf("\n{a,c}的非:") ;
    bin_to_set(N(x1,3),c) ;
    printf("\n{a,c}是{a,b}的子集吗? %d",E(x1,x2)) ;
    printf("\n{a,c}是{a,b,c}的子集吗? %d",E(x1,x)) ;
    return 0 ;
}

 看一看结果:



 
 

  • 大小: 10.8 KB
1
8
分享到:
评论

相关推荐

    (二进制 C语言)遗传算法

    在本案例中,我们关注的是使用C语言实现的二进制遗传算法。 一、遗传算法基础概念: 1. 个体:遗传算法中的每个解决方案称为个体,通常用一个编码串来表示,如二进制串。 2. 编码:个体的基因编码方式,对于二进制...

    设计算法把一个十进制整数转换为二至九进制之间的任意进制数输出

    任何数字系统都可以用基于某个基数(进制数)的符号集合来表示数字。例如,十进制系统使用0到9这十个符号,而二进制系统只使用0和1。要将十进制数转换为其他进制,我们可以采用“除基取余”方法,它分为以下步骤: ...

    基于C语言实现的欧洲集合预报解码转换系统.pdf

    GRIB(通用定标二进制格式)和NetCDF(网络通用数据格式)是气象数据常用的两种文件格式。GRIB格式是专为存储数值天气预报产品设计的二进制编码方式,它具有较强的数据压缩能力。NetCDF则是自描述的数据格式,不仅...

    基于C语言的课程设计

    C语言提供了丰富的文件操作接口,如`fopen`、`fclose`、`fread`、`fwrite`等,可用于读写文本文件或二进制文件。在课程设计中,可能需要实现文件数据的保存和加载功能。 8. **调试与优化** 在实际编程中,调试是...

    c语言前四章

    计算机的工作原理基于三个核心概念:二进制表示、存储程序方式以及五大组成部件。 - **二进制表示**:计算机内部所有信息均以二进制(0和1)的形式存在,这种表示方法易于硬件实现,通过电路的开关状态(闭合或断开...

    C语言程式认识程式语言PPT优秀资料.ppt

    - 计算机语言:基于二进制(0和1),从机器语言到高级语言。低级语言直接对应硬件指令,而高级语言如C语言则更接近人类思维,简化了程序员与计算机之间的交流。 2. **二进制、字节与机器语言** - 二进制:计算机...

    基于C语言的学生成绩管理系统

    在学生成绩管理系统中,我们可能会使用二进制文件(如 stu.dat)来持久化存储学生数据,通过读写文件函数来实现数据的保存和加载。 最后,项目中的Makefile.win文件用于自动化编译过程,这在大型项目中尤为重要,它...

    进制转换.zip

    在计算机科学中,二进制是最基本的表示方式,因为所有的计算都基于二进制电路。而其他进制则常用于简化表示或便于人类理解。 进制转换通常分为两种类型:从一种进制转换到另一种进制,以及从十进制转换到其他进制。...

    C经典算法之产生可能的集合

    根据给定的文件信息,我们可以总结出两个与...第一种方法基于二进制数的特性,更注重数学原理的应用;而第二种方法则更加直观,易于理解和实现。两种方法各有优缺点,具体选择哪一种取决于实际应用需求和个人偏好。

    2002—2003年度第二学期_C语言期末考试试题.

    - `printf`函数用于输出,格式化字符串中的`%d`表示输出十进制整数。 5. **流程控制**: - 条件语句如`if`用于基于条件执行不同的代码块。 - 循环结构如`while`和`for`用于重复执行一段代码直到满足特定条件。 ...

    浅析基于C语言的文件处理.pdf

    文件是指一组相关数据的集合,它可以在计算机内部以二进制形式存在,也可以通过特定的编码方式进行展示,例如ASCII码文件。C语言是一种广泛使用的编程语言,它提供了丰富的文件操作函数,允许程序员能够轻松地对文件...

    一种基于System C语言的模型检测方法.pdf

    UPPAAL建模语言通过引入有界整型变量、二进制、广播通道、紧迫位置和坚定位置的概念扩展了时间自动机。时空自动机被建模为一系列位置和连接这些位置的边的集合。 System C语言在模型检测中的应用主要体现在以下几...

    实现集合各种运算的程序

    这涉及到二进制计数和位运算,因为每个元素可以存在或不存在,对应二进制的0或1。 7. **元素测试(Element Test)**:检查一个元素是否属于某个集合。这可以通过简单的查找操作实现,如果找到元素则返回真,否则返回...

    用C语言显示字库用C语言显示字库

    字库,又称字体库,是一系列预定义的字符形状集合,通常以二进制格式存储。每个字符都有一个特定的编码,如ASCII或Unicode。在C语言中,我们可以使用字库来显示文本,通常是通过控制显示器的像素或调用图形库函数。 ...

    C语言实现Huffman树,Huffman编码

    对于输入文本中的每个字符,用对应的Huffman编码替换,得到压缩后的二进制字符串。解压缩时,根据编码表逆向操作,将二进制字符串还原为原始文本。 在提供的压缩包文件`HuffmanTree`中,可能包含了实现以上过程的源...

    tc-c语言编程环境

    在压缩包中,"BIN"通常表示二进制文件的集合,这可能包含了Turbo C的所有可执行文件和其他支持文件,如动态链接库、头文件、库文件等。这些文件对于构建完整的TC编程环境至关重要。 使用Turbo C,开发者可以利用其...

    江苏省计算机二级C语言真题

    - **最大10位无符号二进制整数**:最大10位无符号二进制整数为`1111111111`(即`2^10 - 1`),其值为1023。将其转换为八进制,结果为1777。 #### 三、PC机CPU基础知识 - **CPU供应商**:Intel和AMD是全球领先的CPU...

    基于c语言 遗传算法代码(NSGA-II).rar

    1. **编码方式**:遗传算法中的个体通常用二进制编码或浮点数编码来表示可能的解。在C语言实现中,可以使用结构体存储每个个体的基因,如double数组表示解的各个维度值。 2. **初始种群**:算法开始时需要生成一个...

Global site tag (gtag.js) - Google Analytics