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

0 0
原创粉丝点击