博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
并查集
阅读量:6081 次
发布时间:2019-06-20

本文共 531 字,大约阅读时间需要 1 分钟。

并查集

引入:

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

 

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

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

 

转载于:https://www.cnblogs.com/yiyiyizqy/p/7397583.html

你可能感兴趣的文章
SDL做的一个简单Button
查看>>
php utf8和utf-8的区别
查看>>
近期遇到电脑问题几则
查看>>
lvs nginx 负载均衡
查看>>
Nginx IP纯洁库功能测试
查看>>
H3C MSR 20-10 / 900的×××拨号组网模板
查看>>
Java学习路线
查看>>
恶心的问题: error while loading shared libraries: libstdc++-libc6.2-2.so.3:
查看>>
体验竞争:何以成为家用市场竞争焦点?
查看>>
HttpURLConnection学习
查看>>
开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
查看>>
oracle11g安装
查看>>
我的友情链接
查看>>
GNU screen视频教程
查看>>
mysql-front远程连接自己linux服务器上的mysql服务器
查看>>
zookeeper安装与配置
查看>>
redis和memcached区别
查看>>
c primer plus(第五版)读书笔计 第七章(6)
查看>>
PHP缓存技术
查看>>
kubernetes集成calico网络
查看>>