首发于 数据结构和算法
深度和广度优先搜索算法

深度和广度优先搜索算法

在社交网络中,有一个 六度分割理论,具体是说,世界上任何互不相识的两人,平均只需要六步就能够建立起联系。一个用户的一度连接用户就是他的好友,二度连接用户就是他好友的好友,三度连接用户就是他好友好友的好友。

给定一个用户,如何找出这个用户的所有三度(包括一度、二度和三度)好友关系呢?

1. 什么是 “搜索” 算法

我们知道,算法都是作用于某种具体的数据结构上的,而深度优先搜索算法和广度优先搜索算法就是作用于图这种数据结构的。

图上的搜索算法,就是从图中的一个顶点出发,到另一个顶点的路径。图有两种存储方法,邻接矩阵和邻接表,在这里我们用邻接表来存储图,并以无向图作为例子,但这两种算法也同样都可以应用在有向图中。

2. 广度优先搜索(BFS)

广度优先搜索(Breadth-First-Search),一般简称为 BFS。直观地讲,它其实就是一种地毯式层层推进的搜索策略,即先查找离起始顶点最近的,然后是次近的,依次往外搜索。

下面这段代码的功能是搜索一条从顶点 s 到顶点 t 的一条最短的路径。

其中,有三个非常重要的辅助变量需要特别注意。



下面我们来看一下广度优先搜索的时间复杂度和空间复杂度。

最坏情况下,终止顶点 t 距离起始顶点 s 很远,需要遍历完整个图才能找到。这时候,每个顶点都要进出一遍队列,每条边也都会被访问一次。所以,广度优先搜索的时间复杂度为 O(V+E),V 为顶点个数,E 为边的条数。针对一个所有顶点都是联通的图,E 肯定要大于 V-1,所以时间复杂度可以简写为 O(V)。

空间复杂度主要是三个变量所占用的额外空间,和顶点个数成正相关,为 O(V)。

3. 深度优先搜索(DFS)

深度优先搜索(Depth-First-Search),简称 DFS,最直观的例子就是走迷宫。

假设你站在迷宫的某个分岔路口,你想找到出口。你随意选择一个岔路口来走,走着走着发现走不通的时候就原路返回到上一个分岔路口,再选择另一条路继续走,直到找到出口,这种走法就是深度优先搜索的策略。

上图中,我们希望找到一条从 s 到 t 的路径,其中实线表示向前遍历,虚线表示回退。可以看到,深度优先搜索到的并不是从 s 到 t 的最短路径。

实际上,深度优先搜索用的是一种比较著名的思想——回溯思想,这种思想非常适合用递归来实现。深度优先搜索的代码里面有几个和广度优先搜索一样的部分 visited、prev 和 Print() 函数,它们的作用也都是一样的。此外,还有一个特殊的 found 变量,标记是否找到终止顶点,找到之后我们就可以停止递归不用再继续查找了。

在深度优先搜索算法中,每条边最多会被访问两次,一次是遍历,一次是回退。所以,深度优先搜索的时间复杂度为 O(E)。

visited、prev 数组的大小为顶点个数,而递归函数调用栈的最大深度不会超过顶点的个数,所以深度优先搜索的空间复杂度为 O(V)。

测试代码如下,对应图为上面广度优先搜索算法中的例图。

4. 查找三度好友?

查找用户的三度好友,也就是距离用户 3 条边以内的用户。也就是说,在广度优先算法中,我们只需要向外查找 3 层即可,可以通过一个数组记录当前顶点与起始顶点的距离来实现。在深度优先算法中,我们只需要控制最多只从起始顶点递归 3 次即可,可以通过一个变量记录递归深度来实现。

参考资料-极客时间专栏《数据结构与算法之美》

代开银行存款证明公司随州资金证明代开黄冈企业资信证明用途泰州本地企业资金证明呼伦贝尔企业资信证明哪里有汕头银行定期存单打印抚州打企业资金证明镇江出国留学资金证明贵阳出国留学存款证明样本儋州银行定期存单怎么打印滁州打印资金证明遂宁开资金证明舟山出国留学存款证明价格常州定做出国留学资金证明潮州企业资信证明定做聊城打印银行定期存单辽源定制留学存款证明运城企业资信证明图片忻州办理出国留学存款证明汕尾打印出国留学资金证明抚顺资金证明服务商淮北银行定期存单哪家专业襄阳出国留学资金证明公司平顶山企业资金证明公司汕尾定期存单代做芜湖企业资金证明哪家好朔州银行定期存单哪里有舟山存款证明广州银行定期存单定制成都资金证明多少钱河池做资信证明香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声汪小菲曝离婚始末卫健委通报少年有偿捐血浆16次猝死单亲妈妈陷入热恋 14岁儿子报警雅江山火三名扑火人员牺牲系谣言手机成瘾是影响睡眠质量重要因素男子被猫抓伤后确诊“猫抓病”中国拥有亿元资产的家庭达13.3万户高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了男孩8年未见母亲被告知被遗忘张家界的山上“长”满了韩国人?倪萍分享减重40斤方法许家印被限制高消费网友洛杉矶偶遇贾玲何赛飞追着代拍打小米汽车超级工厂正式揭幕男子被流浪猫绊倒 投喂者赔24万沉迷短剧的人就像掉进了杀猪盘特朗普无法缴纳4.54亿美元罚金周杰伦一审败诉网易杨倩无缘巴黎奥运专访95后高颜值猪保姆德国打算提及普京时仅用姓名西双版纳热带植物园回应蜉蝣大爆发七年后宇文玥被薅头发捞上岸房客欠租失踪 房东直发愁“重生之我在北大当嫡校长”校方回应护栏损坏小学生课间坠楼当地回应沈阳致3死车祸车主疑毒驾事业单位女子向同事水杯投不明物质路边卖淀粉肠阿姨主动出示声明书黑马情侣提车了奥巴马现身唐宁街 黑色着装引猜测老人退休金被冒领16年 金额超20万张立群任西安交通大学校长王树国卸任西安交大校长 师生送别西藏招商引资投资者子女可当地高考胖东来员工每周单休无小长假兔狲“狲大娘”因病死亡外国人感慨凌晨的中国很安全恒大被罚41.75亿到底怎么缴考生莫言也上北大硕士复试名单了专家建议不必谈骨泥色变“开封王婆”爆火:促成四五十对测试车高速逃费 小米:已补缴天水麻辣烫把捣辣椒大爷累坏了

代开银行存款证明公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化