Algorithms 普林斯顿算法课程笔记(一)

本文介绍了动态连接性问题及其实现算法,包括Quick Find、Quick-Union及其优化:带权的快速合并。通过路径压缩进一步优化算法,降低查找和合并操作的时间复杂度。分析了各种算法的效率,强调了算法优化的重要性。
摘要由CSDN通过智能技术生成

本节将从动态连接性算法(并查集问题的模型)入手,引入算法分析和设计的整体思路和优化方法,为整个课程的引子部分。

主要内容包括 Quick Find和Quick union算法,以及这些算法的改进。

动态连接性

对于连接做如下定义:

  1. 自反:p 连接于自身
  2. 对称:若p连接于q,则q连接于p
  3. 传递:若p连接q,q连接r那么p连接r

我们的算法需要满足上述关于连接的定义。另外,引出了另一个概念:

连通分量:最大的可连通对象集合,有两个特点:1)连通分量内部任意两个对象都是相连通的;2)连通分量内部的对象不与外部对象相连通。

功能实现:

我们需要设计一个类,该模型具有如下功能:

  • 现有N个对象,可以任意连接任意两个对象
  • 有一个方法,可以得知任意两个对象是否连接
    图示如下:

image.png

先来看解决这类问题的第一种方法:Quick Find.

Quick Find

快速查找是基于贪心策略的一种算法,贪心策略是指在问题求解的时候,只找出当前最优解。

基于此,设计一种数据结构来存储实验对象。

  • 长度为N的整型数组

  • 如果p和q有相同的id,则表示他们有连接

image.png

定义一个类描述上述模型 该类的名称成为QuickFindUF

public class QuickFindUF
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值