提高篇-图论-《算法笔记》同步笔记总结与补充

专题要点:

  • 点权和边权:顶点和边均可具有权值,根据题意判断。邻接矩阵:边的权值可以存入矩阵中,点的权值需要另存储在一位数组中;邻接表:点权边权都可以用结构体存储
  • 图的遍历dfs,bfs
    • 遍历时,要对所有顶点进行搜索,防止出现图不连通的情况。
    • 搜索的次数即为图中连通块的个数
  • 最短路径问题:求源点到其他顶点的最短距离
    传送门:提高篇-最短路径问题(图论)-《算法笔记》同步笔记总结与补充
    • Dijkstra算法:解决无负环的单源最短路问题
    • Bellman-Ford算法:解决一般(含负环)的单源最短路问题
    • SPFA算法:优化Bellman-Ford算法
    • Floyd算法:解决全源最短路问题
    • 暴力Dijkstra算法:解决全源最短路问题(对每个顶点做Dijkstra算法)
  • 最小生成树问题:在无向图G中求出一棵包含G所有顶点和部分边(边权之和最小)的树型结构
    • Prim算法:思想类似Dijkstra,解决稠密图
    • Kruskal算法:解决稀疏图
  • 拓扑排序:图结构(其为AOV图,DAG)中具有明确前后顺序的顶点的序列
    • 入度是拓扑排序的关键:顶点入度为0,说明当前顶点是其他顶点的先导,排在其他顶点前
    • 方法思想:输出入度为0的顶点,并不断调整与其相连其他顶点的入度
  • AOE与关键路径:同为DAG有向无环图。相比于编程方法,这一节的概念内容容易理解的多(编程方法要绕晕了)
    • 明确“事件”与“活动”:“活动:是指确确实实的行为,动作;事件:在AOE中并不是做了一件事情,而是说明一种状态(中介状态),即完成活动后,达到可以做下一件事情的状态,这才是事件的含义。
    • 理解“最长”与“最短”:“关键路径是AOE中的最长路径,其长度却也是整个整个工程的最短完成时间。”
      *最长:是从距离上讲的长短,路径长度最长;最短:是从时间上讲的早晚,项目结束的最早。既然关键路径不能拖延,则必然使项目结束最早

算法比较:

  • Dijkstra算法:贪心法,对其他顶点与源点之间最短距离的贪心
  • Floyd算法:O(N3),计算量小于暴力Dijkstra算法
  • 暴力Dijkstra算法:O(N3)
  • Prim算法:贪心法,类似Dijkstra,对其他顶点与已访问过的顶点集合S之间最短距离的贪心
  • Kruskal算法:贪心法,对边权值(最小)贪心,使用并查集

可解问题:

在解图论有关题目时,一道题会涉及多种数据结构,多个数据存储容器或变量,需要做好注释,明确命名规范

几点注意:

  • 首先要注意图中点和边虽然不同,却又息息相关:如点权边权,和删除点或删除边
  • 遍历过程中需要删除边时:可以将权值改为0,-1等表示不存在的数值
  • 遍历过程中需要删除点时:可以将与点有关的边全部修改为不存在,或是不必真的删除点,而是当访问到该点时跳过即可。
  • 连通块个数:实际上就是集合个数,类比并查集;且对一个图进行搜索的次数即为该图的连通块个数
  • 广搜:遍历时注意inq[]的标记位置,防止重复访问
  • Kruskal是对边进行遍历的,因此边越少效率越高,即稀疏图
  • 明确Prim与Dijkstra算法的区别:见上文算法比较
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值