数据结构算法总结(2023下学期)

本文介绍了树和二叉树的基础概念,重点讲解了并查集的两种优化方法——路径压缩和秩合并。同时涵盖了图的存储结构(邻接矩阵和邻接表),以及深度优先搜索(DFS)和广度优先搜索(BFS)等图遍历算法。此外,还涉及了拓扑排序、最短路径和Prim算法、Kruskal算法在解决最优化问题中的应用,特别强调了它们在稠密图和稀疏图场景下的适用性。
摘要由CSDN通过智能技术生成

树和二叉树的应用

并查集

Father[];判断两节点是否处于同一集合,高效地对集合进行合并;
优化:
(1)路径压缩:在Find(x)找代表元时,把x到代表元路径上的所有结点的父亲都改成代表元;
(2)按秩合并:“秩”,理解为对高度的估计;由于路径压缩时高度的减少很难计算(我也不知道为啥),所以只保存高度的上界(曾经最大高度),即“秩”;秩以相反数形式保存在father[代表元]中;注意并查集一般从1开始计数,若要用0,把father数组初值设为-1,且find中递归条件设置成<=-1;

图的存储结构

邻接矩阵
邻接表

图的遍历

DFS
BFS

拓扑排序与关键路径

最短路径

最小支撑树

Prim算法

S[v], Lowcost[v], pre[v];在集合V-S中选Lowcost值最低的点加入集合S,更新V-S中剩余点的Lowcost值,pre值;直到所有点在S中;
Prim算法更适合稠密图

Kruskal算法

边集E[],并查集Father[];对边集排序,每次取权值最小的边,若该边的两端点不在同一集合内(不形成环)则把该边加入最小支撑树;
Kruskal算法更适合稀疏图

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值