“学习笔记”之《算法导论》----第六部分----图算法----第二十二章----基本的图算法

本人大四即将结束,于2018年12月18日购《算法导论》这本书,慢慢看,第一阶段先主要理解各个章节说的算法都是什么意思,书上的课后习题先不做,用得上什么算法我再详细学习。这是官方课后答案的链接

放在开头:没有好的算法,坏的算法之说,重点是针对不同的情况,针对不同的数据,针对不同的需求,去选择算法,改良算法。我的数学功底不强,太难的公式我看不懂,太高深的思想我理解不了,我主要以应用为主,不以解释数学公式为主。

 这是我第一次接触“图”这个概念。我认为这是集合的一种表示方法

定义:对于图G=(V,E),其中V代表vertex顶点,E代表edge边,像是无根树一样,有结点,有连同两个结点的边。

对下图而言,V是(1,2,3,4,5),E是{(1,2),(1,5),(5,4),(2,4),(4,3),(2,3)}。

无向图:两个结点之间没有谁指向谁的区别,上面这个就是个无向图。

有向图:两个结点之间的连接有方向,就上图而言,如果‘1’结点到‘2’结点有方向,那么就用一个‘→’代替这两个结点之间的连线,那么这个图就变成了一个有向图。

有向图的转置:结点位置不变,箭头方向全部换向。

图有两种表示方法,邻接链表和邻接矩阵

 广度优先搜索

这是最简单的图搜索算法之一,将来所要接触的Dijkstra的单元最短路径算法都使用了类似广度优先搜索的思想。

给定G=(V,E)这样一个图,和一个源节点s(可以是通过例子滤波方法确定的起点),该算法能计算s到每个可到达结点的距离,同时生成一颗“广度优先搜索树”。该树以s为树根,包含了所有可以从s到达的结点。

中心思想:算法需要在发现所有距离源节点s为k距离的所有结点之后,才会发现距离源结点s为k+1距离的结点。

深度优先搜索

只要可能,就在图中的某个结点尽量“深入”。

深度优先搜索总是对最近才发现的结点v的出发边进行探索,知道该结点的所有出发边都被发现为止。一旦结点v的所有出发边都被发现了,搜索则回到v的前驱结点,来搜索这个前驱结点的出发边。

与之前不同的是,该算法在每个结点上加了一个时间戳,每个结点有两个时间戳,第一个时间戳记录了结点第一次被发现的时间,第二个时间戳记录了完成对v的邻接链表扫描的时间。第一个是发现时间,第二个是完成时间。

拓扑排序

拓扑排序是通过深度排序得到的(前提,这个图必须是有向无环图)

拓扑排序中,所有的结点按照其完成时间的逆序被排成从左至右的一条水平线,所有的有向边都从左指向右。

强连通分量

大致意思就是,如果几个结点之间是存在循环关系:从某个结点出发,还会通过其他节点再回来,就叫循环关系,这几个节点叫这个图的强连通分量。

我们就可以把存在循环关系的结点群看成是一个节点,这样会使问题变得更简单。

经过合并处理后的图是一个无环图。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr.Naruto

你的鼓励是我的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值