Coursera_Algorithms,Part I,第一周笔记
来源:互联网 发布:阿里云修改主机名 编辑:程序博客网 时间:2024/04/29 13:26
目录
- 目录
- Dynamic Connectivity
- 疑问
- Quick Find
- Quick Union
- Quick-Union Improvements
- Union-Find Applications
- 练习测验Interview Questionsoptional
- 编程作业Percolation
注意:只在几年前上过一学期java基础过程,基本相当于不懂,这次学algorithm都用Java写的,所以试着两者一起学,对Java的很多描述可能都不专业
Dynamic Connectivity
视频中出现了一段代码
public static void main(String[] args) { int n = StdIn.readInt(); UF uf = new UF(n); while (!StdIn.isEmpty()) { int p = StdIn.readInt(); int q = StdIn.readInt(); if (uf.connected(p, q)) continue; uf.union(p, q); StdOut.println(p + " " + q); } StdOut.println(uf.count() + " components"); }
本想照着敲上,但是过程中发现 StdIn不知道是什么类,于是去booksite找了源代码过来
StdIn和StdOut都是algorithm写的类库,与UF.java文件放在同一个package就行,图片中的函数式UF类中的主函数,其他的看代码学习就懂了
- UF.java:
http://algs4.cs.princeton.edu/15uf/UF.java.html
- StdIn.java:
https://github.com/kevin-wayne/algs4/blob/master/src/main/java/edu/princeton/cs/algs4/StdIn.java
- StdOut.java:
https://github.com/kevin-wayne/algs4/blob/master/src/main/java/edu/princeton/cs/algs4/StdOut.java
疑问:
rank[] 表示什么?
->Quick-Union Improvements
Quick Find
快速查找,数组中直接存放联通节点,查找很快,但是合并时与该节点相关的节点也需要改变,因此合并效率太低。
Quick Union
快速合并,数组中存放根节点,合并时只需改变跟几点即可,但是容易形成瘦高的树,这样在查找时效率较低
Quick-Union Improvements
1.为节点添加rank[]属性,记录该根节点有多少子节点,在合并操作时将节点多的根节点作为新的根节点,这样可以有效的减少树的深度
2.
public int find (int p) { validate(p); while (p != parent[p]) { parent[p] = parent[parent[p]]; p = parent[p]; } return p;}
parent[p] = parent[parent[p]];
这一行代码在进行查找操作时顺便将树展开,即将叶子节点的parent[]直接对应为根节点,减少树的深度
Union-Find Applications
练习测验:Interview Questions(optional)
编程作业:Percolation
- Coursera_Algorithms,Part I,第一周笔记
- Algorithm, Part I Princeton University 公开课第一周 Introduction
- 暑假第一周 I
- Algorithm, Part I Princeton University 公开课第一周 Union-Find算法
- 第一周------部分笔记
- 第一周学习笔记
- Geekband001第一周笔记分享
- Android第一周实习笔记
- Android笔记—第一周
- Andrew学习笔记--第一周
- 机器学习第一周笔记
- 【GeekBand】第一周课程笔记
- 第一周+周三学习笔记
- Swift第一周~ Boolan笔记
- 第一周:Linux初学者笔记
- Python学习笔记[第一周]
- Stanford 算法 part II:第一周编程题
- 黑马程序员_java多线程笔记Part I
- 文本框(Textbox)和下拉框(Combobox)自动联想功能的实现
- live555客户端开发:解决客户端因同步超时被服务端踢掉的问题
- python 函数参数的传递(参数带星号的说明)
- jQuery实现li选中效果
- UDP协议java测试案例
- Coursera_Algorithms,Part I,第一周笔记
- jar包获取linux的kill命令的中断信号,安全停止
- Android-小小设置永久解决程序因为未捕获异常而异常终止的问题
- SpringMVC NamedThreadLocal
- 第十三周项目5-拓扑排序算法验证
- OpenWrt官方入门手册
- AsyncTask 小结
- linux 修改服务器时间
- 使用eclipse中Tab格式兼容问题