第6单元 集合与字典.pptVIP

第6单元 集合与字典.ppt

此“教育”领域文档为创作者个人分享资料,不作为权威性指导和指引,仅供参考
  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第6单元 集合与字典

第六章 集合与字典 从逻辑结构上看,集合和字典都是最简单的数据结构,它们的元素之间没有任何确定的依赖关系。字典是关联的集合。 作为抽象数据类型,集合和字典之间的主要区别,在于它们的操作。 集合主要考虑集合之间的并、交和差操作;字典主要关心其元素的检索、插入和删除。 6.1 集合及其抽象数据类型 6.1.1 基本概念 数学中集合是一些互不相同元素的无序汇集。这些元素称为该集合的成员。集合中的成员可以是一个原子(不可再分解);也可以是一个结构,甚至又是一个集合。集合中的各个元素应该是互不相同的。 元素是或不是集合A的成员,可表示为 列举法:定义一个有穷集,可以将成员放在一对花括号中,成员之间用逗号隔开。 例如{1,2,4} 谓词描述法: 集合的大小: 集合中所包含的元素的个数。 空集不包含任何元素的集合,记作Ф。 数据结构中讨论的集合,一般有以下限制:数据结构讨论的集合总限制为有穷集;假定集合中所有元素属同一类型;并且假设元素之间存在一个小于关系“<”,也称为有序集。 6.1.2 主要运算 集合可以定义测试一个元素是否存在于集合中、增加一个元素、删除一个元素等运算,但集合更加关心下面的一些运算。 求并集: 求交集: 求差集: 子集: A是B的子集 如果集合A是B的子集,反过来也称集合B是A的超集。 相等:两个集合互为子集,则称它们相等。 例如:若A={a,b,c},B={b,d},则有A∪B={a,b,c,d},A∩B={b},A-B={a,c}。另外,A不等于B,同时A和B相互都不是子集关系。 6.2 集合的实现 6.2.1 位向量表示 在实际应用中的许多集合,往往都存在一个公认的超集。例如,ASCII码字符集是各种算机能够表示的字符集的超集;所有大小写英文字母的集合是各种字母集合的超集。 对于字母集合,如果按集合中每个字符的ASCII码将它们存储到一个字符数组中,则集合将占用较多的存储空间(最多需要8*26*2=416bit)。 如果英文字母超集中的每个字母对应1-56中的一个数值,则字母集可以表示为一个有52个分量的向量,每个分量的1或0表示相应数值的字母是否在该集合中。这样每个字母集合只占用很少的存储空间(52bit)。 位向量是一种每个元素都是二进制位(即0/1值)的数组。当表示的集合存在某个不太大的公共超集时,采用位向量的方式来表示这种集合往往十分有效。 存储结构 假设需要表示的集合的公共超集中,共有n个不同的元素,为叙述的方便,不妨假设这些元素就是整数0,1,2,…,n-1等。 每个集合可以采用一个有n位的位向量来表示。若整数i是这个集合的一个元素,则位向量中对应的位为1(真),否则为0(假)。 由于C语言中无法直接定义位数组,要定义位向量需要借助其它方式。一种比较自然的方式,是用长度为n/8的字符数组表示长度为n的字位数组。一个字符用8位二进制编码,它实际上包含了8个二进制位。 typedef struct { int size; //字符数组的长度 char * array; //位向量空间。每一数组元素保存8位。 } BitSet; 假设n是为向量的位数,因为n不一定是8的整数倍,所以由表达式(n+7)/8计算出来的是能保证容纳下所有的位向量的最少字节数。 为了便于操作的实现,位向量的下标在字符的8位中应该从右至左递增排列。 如图给出了公共超集从0到9的整数集合采用位向量表示的存储结构示意图,以及集合S={1,3,5,7,9}的实际存储。 当用位向量表示集合时,所占空间的大小与公共超集的大小n成正比,而与要表示的集合的大小无关。 算法实现 以位向量表示集合,只有两个集合都是某个公共集合的子集时,它们互相运算才是有效的。由于在位向量定义里并没有关于集合元素的实际信息,只能要求参与运算的两个位向量长度相同。 位运算 假设x和y都是8位的字符,其值分别是: X= Y= 对x和y做各种字位运算,得到的结果如下: ~x x y x ^ y x | y x 3 y 5 空集合的创建 与空顺序表的的创建类似,不同之处在于这里省略了每个集合中实际元素个数的变量: BitSet * createEmptySet (int n) 将整数index的元素插入集合 将值为index的元素插入集合S的过程,通过将位向量中下标为index的位置为1来完成: int insert (BitSet * s, int index) 将整数

文档评论(0)

panguoxiang + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档