【Algorithms 4】算法(第4版)学习笔记 01 - 1.5 案例研究:union-find算法

文章目录

    • 前言
    • 参考目录
    • 学习笔记
      • 1:动态连通性
      • 2:UF 实现 1:快速查找 quick-find
      • 2.1:demo 演示 1
      • 2.2:demo 演示 2
      • 2.3:quick-find 代码实现
      • 3:UF 实现 2:快速合并 quick-union
      • 3.1:demo 演示 1
      • 3.2:demo 演示 2
      • 3.3:demo 演示 3
      • 3.4:quick-union 代码实现
      • 4:UF 实现 3:加权 quick-union 算法
      • 4.1:demo 演示
      • 4.2:加权 quick-union 算法代码实现
      • 5:带路经压缩的加权 quick-union 算法
      • 6:所有 UF 实现算法的对比

前言

开始之前先简单扯几句,算法一直是我觉得很难也不太愿意主动去接触的,《算法(第四版)》这本书我大概几年前就知道了,一翻开就跟天书一样(当然现在也没好到哪里去),不过就是得要逼着自己不断学习嘛。

想要强调的是,学习笔记是比较个人以及主观的学习总结,没有任何的盈利目的,只是为了自我学习的提高,所以在文章里面我都会贴出来我所找到以及用到的资料,没有的或者是拓展性的内容请自行搜索。
(我非常需要在这里吐槽一下:偶尔有评论问我要源码……开源项目就不能动动手搜索一下???)

再次声明,学习笔记的受众首先是我本人,并不是为了教会各位成为大神,所以建议各位自己去看相关资料,自行总结,代码多敲多 debug 几遍,资料多看几遍,也许您的收获会比我多得多。

参考目录

  • B站 普林斯顿大学《Algorithms》视频课
    (请自行搜索。主要以该视频课顺序来进行笔记整理,课程讲述的教授本人是该书原版作者之一 Robert Sedgewick。)
  • 微信读书《算法(第4版)》
    (本文主要内容来自《1.5 案例研究:union-find算法》)
  • 官方网站
    (有书本配套的内容以及代码)

学习笔记

注1:下面引用内容如无注明出处,均是书中摘录。
注2:所有 demo 演示均为视频 PPT demo 截图。

(截图自视频 PPT)【Algorithms 4】算法(第4版)学习笔记 01 - 1.5 案例研究:union-find算法_第1张图片

开发一个有用算法的步骤:

  • 建立问题模型。
  • 找到一个解决算法。
  • 这个算法是否够快?存储空间是否足够?
  • 如果上面的问题是否,搞清楚原因。
  • 找到这些问题的根源。
  • 提出新的算法,循环直到满意为止。

本章节主要是对 union-find 算法的实现以及分析。

1:动态连通性

动态连通性的特性说明:

我们假设“相连”是一种等价关系,这也就意味着它具有:

  • 自反性:p和p是相连的;
  • 对称性:如果p和q是相连的,那么q和p也是相连的;
  • 传递性:如果p和q是相连的且q和r是相连的,那么p和r也是相连的。

方法 API:

【Algorithms 4】算法(第4版)学习笔记 01 - 1.5 案例研究:union-find算法_第2张图片

edu.princeton.cs.algs4.UF

【Algorithms 4】算法(第4版)学习笔记 01 - 1.5 案例研究:union-find算法_第3张图片

edu.princeton.cs.algs4.UF#find

【Algorithms 4】算法(第4版)学习笔记 01 - 1.5 案例研究:union-find算法_第4张图片

edu.princeton.cs.algs4.UF#union

【Algorithms 4】算法(第4版)学习笔记 01 - 1.5 案例研究:union-find算法_第5张图片

2:UF 实现 1:快速查找 quick-find

基于数组的实现。

连通性检查:两个下标元素的值是否相同。

2.1:demo 演示 1

【Algorithms 4】算法(第4版)学习笔记 01 - 1.5 案例研究:union-find算法_第6张图片

2.2:demo 演示 2

【Algorithms 4】算法(第4版)学习笔记 01 - 1.5 案例研究:union-find算法_第7张图片

2.3:quick-find 代码实现

edu.princeton.cs.algs4.QuickFindUF#union

【Algorithms 4】算法(第4版)学习笔记 01 - 1.5 案例研究:union-find算法_第8张图片

union(p,q):
将下标为p的元素的值(pID)替换为下标为q的元素的值(qID),且集合中与pID相同的值都需要替换为qID。

3:UF 实现 2:快速合并 quick-union

基于树的实现。

连通性检查:两个下标元素的值的 根节点 是否相同。

3.1:demo 演示 1

【Algorithms 4】算法(第4版)学习笔记 01 - 1.5 案例研究:union-find算法_第9张图片

3.2:demo 演示 2

【Algorithms 4】算法(第4版)学习笔记 01 - 1.5 案例研究:union-find算法_第10张图片

3.3:demo 演示 3

【Algorithms 4】算法(第4版)学习笔记 01 - 1.5 案例研究:union-find算法_第11张图片

3.4:quick-union 代码实现

edu.princeton.cs.algs4.QuickUnionUF#union

【Algorithms 4】算法(第4版)学习笔记 01 - 1.5 案例研究:union-find算法_第12张图片

union(p,q):
将p的根节点改为q的根节点。

edu.princeton.cs.algs4.QuickUnionUF#find

【Algorithms 4】算法(第4版)学习笔记 01 - 1.5 案例研究:union-find算法_第13张图片

4:UF 实现 3:加权 quick-union 算法

基于树的实现,对快速合并的优化。

4.1:demo 演示

【Algorithms 4】算法(第4版)学习笔记 01 - 1.5 案例研究:union-find算法_第14张图片

4.2:加权 quick-union 算法代码实现

edu.princeton.cs.algs4.WeightedQuickUnionUF#union

【Algorithms 4】算法(第4版)学习笔记 01 - 1.5 案例研究:union-find算法_第15张图片

5:带路经压缩的加权 quick-union 算法

这个压缩路径的作用实际上是把树展平,因而在加权 quick-union 算法的基础上只是增加了一行代码即可实现。

【Algorithms 4】算法(第4版)学习笔记 01 - 1.5 案例研究:union-find算法_第16张图片

配套源码中没有这个算法的源码,教授说这个算法的分析超出了这门课的范围……

6:所有 UF 实现算法的对比

【Algorithms 4】算法(第4版)学习笔记 01 - 1.5 案例研究:union-find算法_第17张图片

(完)

你可能感兴趣的:(算法学习,算法)