- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
1-简单不相交集的合并算法
简单不相交集的合并算法
本节的假定前提:
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)的形式,
则不需要另外再建立内部名,
合并时仍然是小集合中
您可能关注的文档
最近下载
- 数学(中考总复习)第六章第27课时《尺规作图》复习课件.pptx
- hse检查表范本.doc VIP
- GBT709—2019热轧钢板和钢带的尺寸、外形、重量及允许偏差.docx VIP
- 4.1文物中的乘法口诀 (课件) 2025-2026学年北师大版数学二年级上册.pptx VIP
- 课题申报书:体育游戏与竞技中学生合作意识的培养研究.docx VIP
- 人教版小学五年级数学上册《第七单元 数学广角-植树问题》大单元整体教学设计[2022课标].docx
- 高考英语句子成分及句子基本结构(共32张PPT).pptx VIP
- 消防安全评估检查记录表.doc VIP
- CWI衔接CSWIP3.1课程教材.pdf VIP
- HK-328W型pH分析仪说明书V3.0.pdf VIP
原创力文档


文档评论(0)