网站大量收购独家精品文档,联系QQ:2885784924

余腊中,数据结构c++版,第9章集合与静态查找1.ppt

余腊中,数据结构c++版,第9章集合与静态查找1.ppt

  1. 1、本文档共91页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
余腊中,数据结构c版,第9章集合与静态查找1

copyright @ Yu Lasheng 集合及其表示 集合是成员(对象或元素)的一个群集。集合中的成员可以是原子(单元素),也可以是集合。 集合的成员必须互不相同。 在算法与数据结构中所遇到的集合,其单元素通常是整数、字符、字符串或指针,且同一集合中所有成员具有相同的数据类型。 colour = { red, orange, yellow, green, black, blue, purple, white } name = { “An”, “Cao”, “Liu”, “Ma”, “Peng”, “Wang”, “zhang” } 集合中的成员一般是无序的,没有先后次序关系。但在表示它时,常常写在一个序列里。 我们常设定集合中的单元素具有线性有序关系,此关系可记作“”,表示“优先于”。 若a, b是集合中的两个单元素,则ab, a==b, ab三者必居其一; 若a, b, c是集合中的三个单元素,且ab, bc,则ac。(传递性) 整数、字符和字符串都有一个自然的线性顺序。而指针也可以依据其在序列中安排的位置给予一个线性顺序。 集合操作有求集合的并、交、差、判存在等。 用有序链表来表示集合时,链表中的每个结点表示集合的一个成员。 各结点所表示的成员 e0, e1, …, en 在链表中按升序排列,即 e0 e1 … en。 在一个有序链表中寻找一个集合成员时,一般不用搜索整个链表,搜索效率可以提高很多。 集合成员可以无限增加。因此,用有序链表可以表示无穷全集合的子集。 等价类与并查集 在求解实际应用问题时常会遇到等价类问题。 从数学上看,等价类是一个对象(或成员)的集合,在此集合中所有对象应满足等价关系。 若用符号“?”表示集合上的等价关系,那么对于该集合中的任意对象x, y, z,下列性质成立: 自反性:x ? x (即等于自身)。 对称性:若 x ? y, 则 y ? x。 传递性:若 x ? y且 y ? z, 则 x ? z。 因此,等价关系是集合上的一个自反、对称、传递的关系。 “相等”(=)就是一种等价关系,它满足上述的三个特性。 一个集合 S 中的所有对象可以通过等价关系划分为若干个互不相交的子集 S1, S2, S3, …,它们的并就是 S。这些子集即为等价类。 算法的输出从编号 i = 0 的对象开始,对所有的对象进行检测。 在 i = 0 时,循第0个单链表先找出形式为( 0, j )的等价对,把 0 和 j 作为同一个等价类输出。再根据等价关系的传递性,找所有形式为( j, k )的等价对,把 k 也纳入包含 0 的等价类中输出。如此继续,直到包含 0 的等价类完全输出为止。 接下来再找一个未被标记的编号,如 i = 1,该对象将属于一个新的等价类,我们再用上述方法划分、标记和输出这个等价类。 在算法中使用了一个栈。每次输出一个对象编号时,都要把这个编号进栈,记下以后还要检测输出的等价对象的单链表。 并查集 (Union-Find Sets) 建立等价类的另一种解决方案是先把每一个对象看作是一个单元素集合,然后按一定顺序将属于同一等价类的元素所在的集合合并。 在此过程中将反复地使用一个搜索运算,确定一个元素在哪一个集合中。 能够完成这种功能的集合就是并查集。它支持以下三种操作:? Union (Root1, Root2) //并操作;? Find (x) //搜索操作; ? UFSets (s) //构造函数。 在树的那一章已经讨论了并查集的内容。 DynamicSet { 数据: 同类元素的有限汇集,其最大允许长度为MaxSetSize。元素由关键字标识,集合的元素各不相同。 运算: void Create(int mSize); 后置条件:已创建一个空集合。 …… 顺序表集合类 template class T class ListSet:public DynamicSetT { //顺序表集合类 public: ListSet(int mSize); ~ListSet(){delete []l;} …… private: T *r; //动态一维数组 int maxSize; int n; ? }; 折半查找判定树:描述折半查找过程的二叉树 有序顺序表:a1,a2,a3,a4,a5,a6,a7,a8 查找失败 折半查找的效率分析 折半查找的效率分析 折半查找的效率分析 斐波那契查找 根据斐波那契序列的特点对有序表分割 0.618法 斐波那契

文档评论(0)

yaocen + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档