普林斯顿大学—算法4—学习记录

本文记录了普林斯顿大学算法课程中关于动态连通性问题,包括快速查找、快速合并及其改进。重点讨论了快速合并的效率问题,如权重法和路径压缩法,以及它们在并查集应用中的作用。同时,介绍了算法分析的基本步骤和性能评估方法,如观察、假设、预测和验证,以及内存使用量的估算。
摘要由CSDN通过智能技术生成

tips:https://www.cnblogs.com/onepixel/articles/7674659.html十大经典排序算法

 

开发有效算法的流程:

1-建立问题模型 

2-提出算法解决问题

3-运行时间、存储空间不足--找出问题所在--提出新算法

以上为设计和分析希算法的科学途径,找出问题的实质,通过实践验证模型,进而改进模型和方法。

 

2-1 动态连通性问题 Dynamic connectivity

即 并查集问题的模型

连接

连通分量:互相连接的对象的最大集合

java中:创建UF类,包含两个方法:1 实现合并;2 连接查找,返回一个布尔量。构建器需要对象的数量

 由此建立数据结构。

PS:当实现算法时,对象的数量和操作的数量是巨大的,可能有大量合并与连接查找的操作,此时算法的高效尤为重要

  测试:在处理更深层的问题之前,需要检查应用程序接口API的设计。

2-2-快速查找 Quick-find

attention here:

—> union(1,3)把1的内容改成3

—> 合并时,把if语句中的pid写成索引值p

快速查找算法的效率

查找:常数次

合并:查找他们是否连通-N²次,太慢不可取

2-3- 快速合并

合并具体示例:

attention—>union(根节点,子节点),当根节点在一个连通分量里,那么子节点连接在连通分量的根节点上;当子节点在一个连通分量里,那么连通分量的根节点连接在包含根节点的连通分量根节点上。

具体实现:

效率

虽然比快速查找法快速,但也很慢。

当树很高,查找操作代价很大。每个子节点都需要遍历。

 

2-4 快速合并的改进 Quick union improvement

方法1:权重weighting

           任意节点x的深度是以2为底N的对数

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值