来自普林斯顿大学 的 Coursera 课程《算法,第一部分》 ,课程地址:https://www.coursera.org/course/algs4partI
第一周的内容是 Union-Find算法和算法分析两个部分,这一篇只总结Union-Find。
问题描述:
有N个元素,从 0 ~ N-1 编号,假设用通路表示元素之间的连接,当执行多次任意两个元素的连接之后,如何判断某两个元素是否能够通过已有路径相连通。连接的动作我们称之为 union,判断两元素是否相连的操作称之为 find,类比下图:
从图上可以看出,0, 1, 2, 5, 6, 7 中任意两个元素都是相连的,同样 3, 4, 8, 9 中任意两个元素也是互连的,但是第一个集合和第二个集合的元素却是无法连通的。
实际操作中可用于在一个庞大的网路环境下,如何迅速判断某两个点是否相连,如下图:
开发有效算法的步骤:
1) 构建模型
2) 寻找算法
3) 方法的效率和内存使用
4) 效率差,内存使用率高,找出问题的原因所在
5) 寻找解决方法重复3
首先确认 union 和 find 操作应该满足什么样的条件:
find操作:确认两个对象是否连接&#