并查集系列(一)——Social network connectivity

本文探讨了如何利用并查集解决社交网络中成员全连接的最早时间问题。通过对排序后的友谊形成时间戳进行处理,算法需在O(mlogn)时间内运行,并使用额外O(n)空间。解题思路涉及在每次连接操作时检查是否形成唯一父节点,以确定全连接状态。文章附带Java实现代码,适合算法初学者参考。
摘要由CSDN通过智能技术生成

  course并查集的课后题之一,看完之后没有开始没有什么思路,也没找到什么答案,想了想写了一下,感觉受益挺多的

问题描述:

  Social network connectivity. Given a social network containing n members and a log file containing m timestamps at which times pairs of members formed friendships, design an algorithm to determine the earliest time at which all members are connected (i.e., every member is a friend of a friend of a friend … of a friend). Assume that the log file is sorted by timestamp and that friendship is an equivalence relation. The running time of your algorithm should be mlogn or better and use extra space proportional to n.
解题思路:
  首先对于这样的问题我们肯定要使用并查集来求解,题目求是在散列刚刚全部连通的时候的状态,所以我们需要判断什么时候刚刚连通。这时候会想到,全部连通时只会有一个父节点的存在所以,当我们做一次连接操作的时候做一次父节点的判断就行了,当使用weight quick union 的查询父节点操作的时间复杂度为logn,总的复杂度m(logn+1)=mlogn所以可解,下面附上java实现代码,希望可以帮助和我一样的初学者。


                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值