二叉树优先队列二叉堆可并堆左偏树并查集.PPT

二叉树优先队列二叉堆可并堆左偏树并查集.PPT

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

集合的特点:松散的数据关系,合并方便,效率不高。 五、并查集 用集合的思路来考虑这个问题: 对于每个人建立一个初始集合,表示一开始不知道任何人是他的亲戚。以后每次给出一个亲戚关系时,就将两个集合合并。这样实时地得到了在当前状态下的集合关系。如果有提问,就在当前得到的结果中判断两个元素是否属于同一集合。对于样例数据的解释如下图: 并查集:基于集合思想的数据结构,解决高效的合并集合与查 找元素的问题。 输入关系 分离集合 初始状态 {1}{2}{3}{4}{5}{6}{7}{8}{9}{10} (2,4) {1}{2,4}{3}{5}{6}{7}{8}{9}{10} (5,7) {1}{2,4}{3}{5,7}{6}{8}{9}{10} (1,3) {1,3}{2,4}{5,7}{6}{8}{9}{10} (8,9) {1,3}{2,4}{5,7}{6}{8,9}{10} (1,2) {1,2,3,4}{5,7}{6}{8,9}{10} (5,6) {1,2,3,4}{5,6,7}{8,9}{10} (2,3) {1,2,3,4}{5,6,7}{8,9}{10} 由上图可以看出,操作是在集合的基础上进行的,没有必要保存所有的边,而且每一步得到的划分方式是动态的。 1、并查集的概念 并查集是一种用于对分离集合进行操作的抽象数据类型。 它所处理的是“集合”之间的关系,即动态地维护和处理集合元素之间复杂的关系,当给出两个元素的一个无序对(a,b)时,需要快速“合并”a和b分别所在的集合,这其间需要反复“查找”某元素所在的集合。“并”、“查”和“集”三字由此而来。 在这种数据类型中,n个不同的元素被分为若干组。每组是一个集合,这种集合叫做分离集合。 并查集支持查找一个元素所属的集合以及两个元素各自所属的集合的合并。 并查集记录了一组分离的动态集合S,S={S1,S2,…,Sk},每个集合通过一个“代表”加以识别,代表即该集合中的某个元素(成员),哪一个成员被选做代表是无所谓的,重要的是:如果求某一动态集合的代表两次,且在两次请求间不修改此集合,则两次得到的答案应该是相同的。 动态集合中的每一元素是由一个对象来表示的,设x表示一个对象,并查集的实现需要支持如下操作: 2、并查集支持的操作 ① MAKE-SET(x) 建立一个新的集合,其仅有的成员(同时就是代表)是x。由于各集合是分离的,要求x没有在其它集合中出现过。 ② UNION(x,y) 将包含x和y的动态集合(例如Sx和Sy)合并为一个新的集合,假定在此操作前这两个集合是分离的,结果的集合代表是Sx∪Sy的某个成员,一般都以Sx或者Sy的代表作为新集合的代表。此后,由新的集合S代替了原来的Sx和Sy。 ③ FIND-SET(x) 返回一个包含x的集合的代表。 并查集本身不具有结构,必须借助一定的数据结构以得到支持和实现。数据结构的选择是一个重要的环节,选择不同的数据结构可能会在查找和合并的操作效率上有很大的差别,但操作实现都比较简单高效。并查集的数据结构实现方法很多,一般用的比较多的是,数组实现、链表实现和树实现。 3、并查集的实现 (1)并查集的数组实现 用数组s[i]记录元素i所属集合的编号。 MAKE-SET(x):初始化只要s[i]:= i; FIND-SET(x):查找元素所属的集合时,只需读出s[i], 时间复杂度为O(1); UNION(x,y):合并两元素各自所属的集合时,需要将数组中属于其中一个集合的元素所对应的数组元素值全部改为另一个集合的编号值,时间复杂度为O(n)。 实现简单,实际使用较多。但是合并的代价太大,在最坏情况下,所有集合合并成一个集合的总代价会达到O(n2)。 输入样例: 10 7 2 4 5 7 1 3 8 9 1 2 5 6 2 3 3 3 4 7 10 8 9 UNION(x,y)过程演示: 1 2 3 4 5 6 7 8 9 10 S 1 2 3 4 5 6 7 8 9 10 1 1 1 1 5 5 5 8 8 10 S 1 2 3 4 5 6 7 8 9 10 (2)并查集的链表实现 每个集合对应一个链表,它有一个表头(代表),每一个元素有一个指针指向表头,表明了它所属的类,另有一个指针指向它的下一个元素,同时为了方便实现,再设一个指针last表示链表中的最后一个元素(

文档评论(0)

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

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

1亿VIP精品文档

相关文档