首页 > 其他 > 详细

并查集

时间:2017-08-19 19:54:56      阅读:305      评论:0      收藏:0      [点我收藏+]

并查集

引入:

技术分享

有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,一路深搜下去,看自己的祖先是谁,当然,祖先的祖先就是自己啦。再返回。

 

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

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

 

并查集

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!