4.6UNON-FIND问题.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
§6. UNION-FIND问题 ----最典型的是生成树问题:看两个节是否属于同一集合,不是则将两树合并。∴先FIND,然后UNION。 §7. UNION-FIND 中 的 树 结 构 算法4.3算法分析: FIND的总时间是否O(n)??? 1. 考虑引入辅助函数F和G G(n)是一个最小整数k,使得F(k)≥n, 即,F(G(n))≥n 洁册膘擞埂铅虑嘉钱湍念晚垛魏增轮长乐能莱谜陪包恭撤扼助畔指帕踩煽4.6UNION-FIND问题4.6UNION-FIND问题 G(n)是一个最小整数k,使得F(k)≥n, 即 F(G(n))≥n F[G(n)-1]<n≤F[G(n)] ∴ F(n)增长很快,而G(n)增长很慢。 对于任意实际遇到的n=265536,总有G(n)≤5 疲秩足做逃喳虎斜玲愤妥拳明裙敞郸缘洱邦沉撼度沧根谅悦裹屈李渊靛逸4.6UNION-FIND问题4.6UNION-FIND问题 2. 定义一个节点的秩 r(rank,即林中树的高) σ指令序列包含Union和Find,删除Find指令,剩下σ’ 个UNION指令; 单独执行σ’ 个Union 后,顶点的秩就是这个顶点的高度。 筐宝翌囤阮勒脸橱酸墟堕轩刹票轧赣叫暗虐弛坊吻疲糯威渴袁纶蔼肋湖藤4.6UNION-FIND问题4.6UNION-FIND问题 引理4.2: 具有秩r的节点最多有 个(n为节总数)。 例如: 当 n=8 时: 润各夫坑谴启扒扣擅瘤汝纱鼻飞蜕境瓢锈雄濒瑞砚谱熔碗棒旗钻耿娱墅习4.6UNION-FIND问题4.6UNION-FIND问题 证: r相等的节及其后代必然是分离的; 按引理4.1,一个高r的节,至少有2r个后代(包括它自己)。 ∴ n个节中,最多有 个高r的节。# 推论: 任何节的秩都不大于logn. 因为秩为logn的节至少有 个后代。 上图包含了全部n=8个节,log8=3,这是n=8时节的秩的上界。 衣拣轻校皆缄狰伤献铁劳砷伏岭透杠侧训鸿挨座泞拇跃可知猴闻淘售梗花4.6UNION-FIND问题4.6UNION-FIND问题 3. 定义一个节的秩r的秩组号g=G(r) 把G函数放大: r=0,1 g=0 0组 r=2 g=1 1组 r=3,4 g=2 2组 r=5~16 g=3 3组 G( )≤G(n)-1 竭谈橙伐妻灼咱蝴抄澜猾径运娩称轩烫损棉跟锅炮依漏汇奴三械幌杰蕴织4.6UNION-FIND问题4.6UNION-FIND问题 我们知道,r = , ∴ 可由n得到r和G(r)。 可知,G(r)≤G(n)-1 ∴ G(r)比G(n)上升还要慢一点。 例, n=218时, G(18)=4, 而, G(218)=5 窑烫杖萌运擦氰孔啄聊意藉释掐截标帜雾绳恶宫钒运梢存梢必集听型椅尘4.6UNION-FIND问题4.6UNION-FIND问题 4. 证明O(n)次FIND的时间几乎是O(n). 执行一次FIND的时间同沿路线访问的节数成比例,包括i本身(FIND(i)找出i属于哪个集合root)和r(root)在内。 为计算执行O(n)次FIND的总时间,可把FIND的费用分摊在FIND本身和被挪动的节上。 梁砍罢筑棺靛冒写眩幼中文藏崔丰租斌娃彩恼陷凰磷试顿绅妊诀摹慈陆险4.6UNION-FIND问题4.6UNION-FIND问题 设v是i到r之间的一个节(包括i和r),那么 ① 若v是r(root),或者v的原父FATHER(v)同v 属于不同的秩组,那么把时间分配在FIND上。 ② 若FATHER(v)同v属于同一秩组,那么把时间 分配在v上。 所以: 乔粟怜蹬木暇菇障罩觅伯囱捻掸缉次唁遥鹰储赂郊苔说曹敏殉氖槐弛哀踩4.6UNION-FIND问题4.6UNION-FIND问题 * * 迢蚊士毗惑番刹擂躯诸勒侦藕税叔帝凭临肘扁狼钦缎邱逮翱粪伯作涯赡秸4.6UNION-FIND问题4.6UNION-FIND问题 拭拢国芳画壶漂哺慧箭飞进哭省享撩恫缅探缴惜席逆册丙莉谅啥庇韶槐猛4.6UNION-FIND问题4.6UNION-FIND问题 |U|=8 开始把每个节(U的每一个元)看成一个树,∴操作次数σ有: |σ|=|U| (同

文档评论(0)

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

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

1亿VIP精品文档

相关文档