码迷,mamicode.com
首页 > 其他好文 > 详细

并查集

时间:2017-08-19 20:09:45      阅读:145      评论:0      收藏:0      [点我收藏+]

标签:src   压缩   alt   mil   img   并查集   合并   enter   技术   

并查集

引入:

技术分享

有6个小球。

命令

  1、把1和2所在的集合合并。

  2、把2和3所在的集合合并。

  3、把3和4所在的集合合并。

  ……

  5、   把5和6所在的集合合并。

  按照以前的想法,可能会更改下标,把1的下标改为2。

执行命令1、

技术分享

2、

技术分享

......

5、技术分享

  这样虽然能够达到目的,但是,时间复杂度为o(n),每一次把小球拿出来,又放进去……

 

  我们又想,那能不能把个数小集合的合并到个数大的集合那边呢。

 

  这叫做启发式排序:把小的拿到大的。虽然看上去好像也没省多少时间…(⊙_⊙;) 但事实上,省了很多时间,时间复杂度变成了n log n。(⊙o⊙)目瞪口呆

 

  不过呢,这还不是最省时间的方案哦,老大登场:并查集。[铛铛铛]

 

  其实所谓的并查集,就是找祖宗ancestor,一路深搜下去,看自己的祖先是谁,当然,祖先的祖先就是自己啦。再返回。

 

  虽然每一次都一路深搜下去,会很慢,所以就要用到“路径压缩”,在退回来的同时,把自己的根节点变为祖先。这样子就省了“前辈”的时间啦。

但是,别忘了一开始所有节点的祖先都是自己。

 

并查集

标签:src   压缩   alt   mil   img   并查集   合并   enter   技术   

原文地址:http://www.cnblogs.com/yiyiyizqy/p/7397583.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!