算法导论-用于不相交集合的数据结构

21.2-4 对于图21-3中操作序列的运行时间,给出其紧确的渐近界。假定采用的是链表表示和加权合并启发式策略。

  解:make-set,O(n);加权合并启发,每次将较短链表链接到较长链表,即每次将长度为1的集合链接到另外的链表上,时间O(n)。总时间O(n)。

21.2-5 当采用链表表示时,给出对UNION的一个简单的改动,使得无需让tail指针指向每个链表中的最后一个对象。无论是否采用了加权合并启发式策略,你所做的修改不应改变UNION过程的渐进运行时间。

  解:设合并的链表为A, B,将B链接到A上。可以将A的第一个元素指向下一个元素的指针指向head[B],然后遍历B,更改B中元素指向链表第一个元素的指针。然后将B中最后一个元素的指向下一个元素的指针指向A中的第二个元素。

 

21.3-4 证明:在采用了按秩合并和路径压缩时,任意一个包含m个MAKE-SET, FIND-SET,LINK的操作序列(其中所有的LINK操作出现在FIND-SET操作之前)需要O(m)的时间。在同样情况下,如果仅用路径压缩启发式呢?

  解:采用记账法:对每个MAKE-SET(x)操作收取2元费用,1元用来支付MAKE-SET(x)操作,另外1元用来支付x出现在FIND-SET的路径上,并成为根节点的孩子的操作。FIND-SET(x)操作收取1元费用,LINK操作收取1元费用。这样m个操作的需要O(m)时间,其中并未用来按秩合并策略,故仅用路径压缩启发式所需的时间也为O(m)。

 

21-1 脱机最小值

  解:a) 4 3 2 6 8 1

              b) 略

         c) 使用不相交集合数据结构,并将所有合法的集合kj 按照j的顺序用单个链表相连。OFF-LINE-MINIMUM(m,n)第二行相当于find-set(i),第6行相当于在链表中合并两个相邻元素并执行union操作。每个操作的次数不超过n。又m = O(n),所以最坏情况下时间复杂度为O(mα(n))。

转载于:https://www.cnblogs.com/meteorgan/archive/2012/05/15/2499651.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值