- 1、本文档共4页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
简单不相交集的合并算法
本节的假定前提:
1、为算法书写方便起见,设任一集合都是{1,2,…n}的子集;
2、任意两个被合并的集合都是不相交的;
3、集合上的运算只有Union和Find。
Union(I,J,K):把名为I与J的集合进行合并,合并后的集合名为K。
∵初始总共有n个单元素集,故Union最多可执行n-1次。
Find(a):给出a所在的集合名(算法中大多用数字表示集合名)。
通常Find指令的执行也有O(n)次,故此类问题通常都是
讨论执行O(n)条Union和Find指令所需要的时间。
可以用来表示集合的数据结构很多,
用什么样的算法和结构才能使得完成上述任务的时间最少?
Union(I,J,K) 算法中的数组说明
为加快处理速度,每个集合给予一个内部名和一个外部名。
内部名与外部名1-1对应。例如:
外部名 1 2 3 集合 {1,3,5,7} {2,4,8} {6} 内部名 2 3 1 External-Name[S]:内部名为S(数字)的集合所对应的外部名。
Internal-Name[L]:外部名为L(数字)的集合所对应的内部名。
R[i]:给出元素i所属集合的内部名。(Find指令O(1)时间完成)
Next[i]:给出与元素i同在一个集合中的下一个元素,内容为0时,
表示无下一元素(即元素i是该集合的最后一个元素)。
List[S]:给出内部名为S的集合中的第一个元素。
Size[S]:给出内部名为S的集合中的元素个数。
A←Internal-Name[I]; /*将集合外部名I,J转为内部名A和B*/
B←Internal-Name[J];
wlg assume Size[A] ? Size[B] /* A为小集合,B为大集合*/
otherwise interchange roles of A and B in
{ELEMENT←List[A]; /*找出集合A的第一个元素*/
while ELEMENT ? 0 do
/*不断把A中元素的所在集合名改为B,直到全部改完为止*/
{R[ELEMENT]←B; /*改名*/
LAST←ELEMENT; /*记下当前元素*/
ELEMENT←Next[ELEMENT]; /*当前元素更新*/
}
/*循环结束时,LAST中记录了原集合A中的最后一个元素*/
Next[LAST]←List[B];
/*置该元素的下一个元素为原B中的第一个元素,*/
/*从而实现A和B的合并*/
List[B]←List[A]; /*置合并后的首元素为原A中首元素*/
Size[B]←Size[A] + Size[B];
/*置集合大小为2集合的规模之和*/
Internal-Name[K]←B;
/*建立新集合的内部名与外部名的对应关系*/
External-Name[B]←K
} Union算法除6-9行以外,其余均为常数时间。
在最坏情况下,即当A和B的规模均为n/2时,
6-9行要执行n/2次, 以完成其中一个集合的元素所属集改名。
即最坏情况下执行1次Union需要的时间为?(n)。
在最坏情况下,执行n-1次Union需要的时间是否为?(n2)?
对6-9行进行总体分析,即考虑执行n-1次Union需要的总时间。
∵每次总是小集合中的元素所属集合改名,
∴每执行一次Union被改名元素所在集合的规模至少扩大一倍。
考虑任意一个元素i能够被改名的次数:
初始时i所在集合只有一个元素,
改名一次以后,i所在集合的元素至少有2个,
再改名一次以后,i所在集合的元素至少有4个,…
故当i改名k次后,i所在集合的元素至少有2k个,
而2k ? n是必须满足的,故有k ? Log2n,
即任一元素i最多被改名Log2n次(i=1,2,…,n)。
故n个元素的改名总次数不会超过nLog2n,
即在n-1次Union中,6-9行执行改名的次数不超过?(n logn)。
在最坏情况下,改名总次数是可能达到?(n logn)的:
E.g. 设n=2k, 先把单元素集两两合并为双元素集;
再把双元素集两两合并为4元素集;……
最后把两个n/2元素集合并为一个总的n元素集。
在上述每一轮,需要改名的元素恰好为n/2个,
共执行k=Log2n轮,故改名的总次数为1/2*nLog2n。
说明:若没有内部名,
则每次合并时两个集合中的所有元素均要改名(改为K),
这样,在n-1次Union中改名的次数就会大大超过上述方式。
另外,如果合并时不进行外部命名,即用Union(I,J)的形式,
则不需要另外再建立内部名,
合并时仍然是小集合中
您可能关注的文档
- 08-2012感动中国人物.doc
- 0808260113巴哈达提.doc
- 0802广州机床与工具.doc
- 081214逻辑运算初稿.doc
- 082《醴泉笔录》宋·江休复.doc
- 088对更年期综合征的认识和治疗.doc
- 08中考北京密云ff3.doc
- 08中考浙江省衢州.doc
- 08年大学生就业形式.doc
- 08年选调生申论.doc
- 人教版英语5年级下册全册教学课件.pptx
- 部编人教版2年级上册语文全册教学课件含单元及专项复习.pptx
- 人教版8年级上册英语全册教学课件(2021年8月修订).pptx
- 教科版(2017版)6年级上册科学全册课件+课时练.pptx
- 人教版PEP版6年级英语下册全册教学课件(2022年12月修订).pptx
- 部编人教版2年级下册语文全册课件(2021年春修订).pptx
- 人教版数学6年级下册全册教学课件(2023年教材).pptx
- 湘少版5年级下册英语全册教学课件(2021年春修订).pptx
- 人教PEP4年级下册英语全册教学课件 [2}.pptx
- 人教版6年级上册英语全册教学课件.pptx
文档评论(0)