本文转载自 个人公众号文章,原文是 lee 神写的,已获原文做者受权。
本期给你们带来图论基础知识的最后一部分总结。算法
Slides 的制做素材大部分来源于网络,出处大多无从查起,这里感谢原创内容。但我相信知识的分享是无价的,正如鲁迅所说:“有人翻印,功德无量。”网络
咱们重点来介绍一下邻接矩阵。数据结构
这里插播一道例题,骑士拨号器。ide
这题最朴素的思路是把电话号码转化成图,用有memo的DFS来作这道题。下面给出Discussion区@peritan的答案。优化
这题同时很好诠释DP & BFS & DFS 三者之间微妙的关系,读者能够悉心体会甄别其间异同。在上一期的讲解中咱们提到了这几者的关系。spa
下面咱们再来看一下,一样很Straight Forward的iteration解法。能够看到,迭代计算的部分,就是图的边的关系。3d
下面的图表中,给出了每一个号码的初始值,和他们增加的效果。我我的以为有点像马尔可夫链的效果,很容易和矩阵运算联系到一块儿。 code
因此咱们能够把他们的转化关系用矩阵来表示,每一步的路径数目,用矩阵幂运算来计算。矩阵幂运算能够优化到O(logN),矩阵运算的模版网上不少,不是模版党暂且不表,手撸也至关好写。一样的方法也能够用在不少地方,个别题难点会体如今关系矩阵的构造上,其本质就是线性变化,能递推就能够快速幂。blog
回到咱们的主题,下面讲一下,算法题中我常常使用的,存储图的数据结构,邻接表。token
以上就是咱们图论基础知识的总结。练好图中通常的DFS和BFS写法,就成功了一大半。常涉及的进阶图论知识,还有一些用人名命名的各类算法,包括不限于: 两种最小生成树MST,三种最短路径,公共祖先LCA。鉴于我和他们这些人也不太熟,暂且不表啦,期待其余老师投稿啦。