Coursera_Algorithms,Part I,第一周笔记

这篇博客记录了Coursera算法课程第一周的学习笔记,重点介绍了动态连接概念,包括快速查找(Quick Find)和快速联合(Quick Union)算法,并探讨了快速联合的改进方法,如添加rank属性来平衡树结构。此外,还提及了Union-Find的应用以及编程作业——渗流问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

注意:只在几年前上过一学期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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值