Week 1
Social Network Connectivity
原题
Given a social network containing n n n members and a log file containing m m 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 m log n m\log n mlogn or better and use extra space proportional to n n n.
分析
就是在整个网络中尝试寻找两个人之间是否存在关系
思路
使用并查集,使用加权的快速归并,就能达到时间要求
Union-find with Specific Canonical Element
原题
Add a method f i n d ( ) \mathtt{find()} find() to the union-find data type so that f i n d ( i ) \mathtt{find(i)} find(i) returns the largest element in the connected component containing i i i. The operations, u n i o n ( ) \mathtt{union()} union(), c o n n e c t e d ( ) \mathtt{connected()} connected(), and f i n d ( ) \mathtt{find()} find() should all take logarithmic time or better.
For example, if one of the connected components is { 1 , 2 , 6 , 9 } \{1, 2, 6, 9\} { 1,2,6,9}, then the f i n d ( ) \mathtt{find()} find()method should return 99 for each of the four elements in the connected components.
分析
寻找连通分量的最大值,可以使用路径压缩的相同思路,在更新连通分量情况时同时更新分量内的最大值
思路
使用一个额外的数组,用于储存对应节点所在通量最大值,其更新过程和路径压缩一致
Successor with Delete
原题
Given a set of n n n integers S = { 0 , 1 , . . . , n − 1 } S = \{ 0, 1, ... , n-1 \} S={ 0,1,.