天天看点

6.3.2深度搜索

6.3.2深度搜索
6.3.2深度搜索

(ง●皿●)ง大点声!劳资听不见!没吃饭吗哈哈哈哈哈哈哈哈哈哈

大家好,本集我们来学习,深度优先搜索,首先我们先来复习一下,上节课所学习到广州,先搜索类似于树的层次遍历,假设我们现在有一个初始顶点一那么我们从该顶点出发一次的图当中的每一个顶点。当中的一个顶点,那么我们知道广州见搜索是优先访问离你较近的那些顶点的,这就是广州先搜索好广东人员搜索与术的层次,遍历小类似那深度元,搜索到其实深度人员搜索有树的先序遍历访问比较相似,我们先来复习一下树的先序遍历,首先这是一棵树,然后我们从中间截点一出发来访问的节点,然后访问根结点的一个子树的根节点也就是0.2,然后依旧访问0.2的一颗子数的根结点,也就是0.4,然后按照这样的规则访问0.7,那么顶点4的所有的节点已经反问d了,所以我们要反问顶点2的另一颗子数的根基点也就是0.5我们店看上一个图的话这样的车其实。点5,然后按照这样的规则,我们访问了a数当中的所有顶点,依旧如果把数看成一个图的话,那么这样的顺序其实就是这样一个图,它的深度优先搜索的顺序,我们在这样一个类似竖的图的例子当中发现,是不是广东一些搜索和深度优先搜索与他们的名字非常的符合阿广播电视,按照图的宽度的范围这样进行扩展,零点的深度优先搜索,这是按照这样一条路径的深度的走向去访问顶点的好,接下来我们要学习一下深度云搜索在书中是怎样描述的,那么这里是能源搜索中的缩写为dfsd代表的是深度的意思首先第一然后我们要出发任意一个大家注意下这一个符合条件的。深度的意思首先第1步我们要访问起始的这个顶点v,然后呢,然后我们要从v出发访问v到任意一个迎接且未被访问过的迎接0.5I,大家要注意一下,这里是任意任意一个符合条件的明确定点都可以没有次序的要求好,接着我们要从wI出发,再访问满足条件的一些景点,这里也是任意的一个临街前未被访问的一些顶点蜿蜒,那么如果咱们还没有符合这样的条件的一些景点呢,我们要退回到它的上一层顶点,也就是v,我们是从v到wi的,然后我们只要重复这样的过程,直到所有顶点被访问为止,这样我们就实现了深度有限搜索df明天。 Fx那么大家要注意一下,这个也与bfs我们的搜索一样,我们也强调了一定是未被访问过的这些一些景点,那么也是同样的要求,我们要为了避免某一个顶点访问了多次,这样就不符合图的便利的定义了,我们一起来看一下这一个的例子,我们从0.1出发,首先呢,我们要访问起始点点位也就是访问这个,其实顶点顶点e,然后我们要访问v的某一个零件,且微微访问过的敏捷定点,这里有0.2和0.3,我们访问哪一个都可以,他帮我们扫了0.2。0.1出发,首先呢,我们要访问,其实点点位也就是访问这个70 0.0.1,然后我们要访问v的某一个临界点位被访问过的敏捷顶点,这里有0.2和0.3,我们访问哪一个都可以,那么我们少问0.2,然后我们从0.2出发来访问点点2的,未被访问过的,任意的一个。来访问0.2的,未被访问过的任意的一个临界点,这里我们选取了0.4那么介绍,我们按照相同步骤访问了5.5,大家可能会有疑问,这里为什么我们要访问了0.5呢?0.5明明是0.2的连接顶点啊,我们发现其实0.5是不是也是0.4的,0.4的以及顶点啊,这里我们是通过0.4访问到5.5了,其实我们发现0.5是不是没有符合条件的理解顶点了,所以我们返回到了它的上一层顶点,也就是0.4,然后我们就从0.4开始进行访问访问顶点4的一个任意一个连接的且未被访问过的一些经典这里,我们只剩下了0.7,所以我们要访问点点击,然后点点71就没有符合条件的退役到0.40.4也没有符合条件的顶点了,我们要退回到点点21就退回到0.1有一个符合条件的。条件零点我们退回到0.40.4也没有符合条件的零点了,我们要退回到0.21就退回到0.1,那么0.1,有一个符合条件的零点就是0.3这里0.3没有被访问且与一连接,然后0.3我们依旧要访问它的一个符合条件的理解,零点就是0.6,好,这样我们就访问过了所有的顶点,实现了深度与线搜索好,这就是dfs深度优先搜索的一个过程,那么接下来我们就来讨论一下如何实现它呢,上一节课实现广度性搜索时,我们利用了一个对列,还有一个标记数组来实现了广推荐搜索,因为对列可以实现数的层次便利,那么这里呢,这里的深度优先搜索,他与树的先序遍历比较像,那么大家联想一下,其实深度研所他是不是可以用递归的形式。等一下其实深度研究所它是不是可以用递归的形式来实现啊,那么这里因为定规也可以转化为这样的形式,我们可以将先去便利转化为这样的形式,所以深度研究所一定也可以利用利用站来实现,那么除了地位或者是这样我们还缺了一个辅助的标记数组,这个与广播员搜索是一样的,那么我们有这两种数据结构就可以实现df的一个算法了,接下来我们学习一下深度云搜索是如何用代码来实现它的,那么这就是一个深度,原先搜索dfs代码,这给我们采用的是递归的形式,我们来看一下这个代码,首先还是与广东那些搜索一样,需要申请一个辅助的这个标签数组vc推导,然后你就有两个函数还说作用于变色一样的还是来看下第一个三。一样的,那么我们首先还是来看一下第2个函数dfs这个函数依旧它的参数表有两个参数,第1个参数为访问的这个图,第2个参数是我们其实顶点的这一个编号,我们用一个整形变量来表示,接下来首先我们要访问这个顶点,然后将它的标记数组的值值为x表示他已经反问过了,然后依旧是这样一个循环,大家看着是不是非常的眼熟啊,这与bfs的循环是一样的,我们也将一个变量复制为第1个敏捷的顶点,然后循环的过程也就是循环每一个临界的顶点,依旧用next number这样一个函数来求下一个连接定点,然后循环体的内容则是如果概念界定点未被反驳的话,满足这样的条件,我们则要对它调用一遍diss,也就是这样一个递归的过程是因为他。那所以要对它调用一遍,dfs也就是这样一个递归的过程,那么为什么我们可以采用递归形式的代码来实现它呢?那么这里是因为dfs它的搜索过程是不是语数的先驱便利比较像,所以数的像距变低,我们可以采用递归形成代码,那么dfs也是可以采用递归形式代码的,它的实现原理其实是一样的好,接下来我们只需要递归的调用这样一个dnf,然后这个因为涉及到了递归,我们还是来看一个小例子,可能递归的形式代码大家还是不太熟悉好,我们来看一下,这里头有相同的例子,那么我们依旧从顶点a出发,所以我们就要用这个函数时传递的参数是这一个有象图以及顶点a的编号v,然后我们访问顶点a,并把顶点a对应到直辅助下标的直至尾处表示,他已经被访问过了通过这样。访问首先我们找到第一。的一个路径可以到达顶点b啊,所以顶点b没有被访问到,那么这时候我们就需要第1个函数了,这个与变法s是相同的,我们来看一下这样一个函数当中有什么样的内容,首先第1个循环与afs一样,还是为这个数组初始化,也就是将每一个神初始化为false,然后是第二循环,依旧是循环的,对每一个顶点,每一个未被防破的顶点,最后一遍dfs函数我们来看一下,在这个偶像图当中,这样一个函数它是怎么样调用的,怎样循环的,首先我们一定是从第1个定点假设,第1个定点是定点a,我们按照abcd的顺序这样来排号,那么我们首先调用了顶点a的dfs实行了我们刚刚叙述的那一个过程,随着顶点a的dfs结束之后,我们是不是循环到下一个顶点啊,也就是顶点b,那么因为顶点b,我们通过这样的条件判断,发现他也没有被访问过对他进行调研。转化到下一个顶点啊,也就是顶点b,那么因为顶点b,我们通过这样的条件判断,发现它也没有被访问过,所以我们对它进行调用df s的操作这里传入到参数编号是零点d的编号,这时候我们就对点点b实行深度有限搜索也就是df,然后依旧是这样一个循环,在循环的时候发现顶点b有a和c两个点写顶点,但是这两个连接顶点在调用a的点face时,是不是都已经被访问过了,所以正因为我们不对它进行重访问,因为有这样一个条件判断语句好,这样我们就结束了零点b的点,fx接着我们依旧来看第1个函数的,这样一个循环循环到了顶点,b之后我们来循环到了下一个顶点,也就是顶点c是不是已经没有。呀,反思到序列这里,我们需要注意的一点是dfs或者是变反四在连接矩阵法下的序列是唯一的,而那些疗法下的修炼是不为一道为什么呢?其实与他们的过错方法是有很大关系的临界区,这样我们是按照顶点编号第1次的访问,下一个临界点点到,而Excel表法则是便利套道边表,那么在临界表法当中,根据我们生成边表就是输入边的次序不同,它的边表也会产生不同,所以这临时表法是不为一道而根据这些法则是唯一的好,这就是一个小知识点,接下来我们来分析一下df的算法性能,首先还是来看它的空间复杂度,它的空间复杂度与bfs相同第9位大OA这里v的绝对值代表的是节点的数量,它是以节点数量一个数量级还是采用我们都需要。算法实现,无论采用递归的形式还是采用这样的形式,我们都需要这样一个工作站的维护,那么在最坏的情况下,也就是该图类似于一个线性结构跟的节点,排上了一个类似于线性结构的这样一个图,我们从某一个景点出发,访问每一个零点时则需要一个节点数量大小的工作站,所以这里的空间复杂度与节点的数量是一个数量级的好,接下来我们来看时间复杂度,那么时间复杂度,我们依旧分为零件标法和理解矩阵法,首先我们来看总结矩阵法,一些确认反弹的时间复杂度依旧为达5为方,那么它与变反色原理其实是类似的,在电反应词当中,我们要访问每一个定点并且访问每个定点时我们要有一个for循环我们要找到他所有的方法就是所以都需要这样方法。那就好啊,所以到所有的顶点都需要这样的方法去找到明星经典时,那么它的时间复杂度则为达到潍坊,这就是导入潍坊的本来方法,那么离线标法也是与bfs是一样的,它是刀v加e就是零点的数量级加上e的数量级,那么它的方法和原理也与bfs是一样的,1就是我们要访问所有的定点,也要通过边访问所有的连接顶点,所以是w5b加e好,这就是dfs的算法性能,接下来我们学习深度优先生成数,那么它与广播线上上述其实是类似的,也就是说在深度奠定的过程当中,我们可以得到这样一颗生长的树或者是生成的森林,称为深度有限生成树,或者是生成森林,我们来看一个刚刚我们举的那一个例子,这是一个有相同的例子,我们依旧对它从0点a开始,深度优先便利。大家看,因为我们是从顶点a出发的,然后我们访问了顶点c,那么我们就从顶点c出发,访问了他的一个临界点点的点d点点d没有任何的一些经典,所以我们访问了点点c的下一个的一些经典的免疫,这样我们就生成了第1个这样一个有效图,接着我们用循环的从顶点b开始进行访问,然后访问了定点b,这样我们就得到了第2个有效图,那么这两个图组合在一起就是该有向图的生成,森林那么深度就先生成数与广东线上的数是一样的,也是当我们采用一些军事法师,它是唯一的采用一些表法是它是不唯一的原理,与国外搜索也是一样的,因为那些表法我们在生成它的边表时,根据输入顺序的不同,他身上编表也会不同。那边表示根据输入顺序的不同,它生成的编表也会不同,和最后面讨论一个问题,就是便利与联通性的问题,如何通过便利来判断该图的联动性,我们来看这样一个五象图的例子,我们依旧从0.1出发,无论是略带t型变反4还是d反c,我们都可以访问到该图当中的所有的顶点,因为每个顶点时间都是联通的,这是一个联通图,所以我们有这样的结论,在无项目当中在任意节点出发进行一次病例,也就是说我们调用了一次bfs函数或者是dfs函数姐姐是一个四十每个顶点我们都需要一个顶点。对每一个定点进行调用一次bfs或者是dfF4,那么通过这样的方法我们就有下一个结论,就是在五象图当中调用变电函数,也就是bfs或者是df函数函数的次数,则为联通分量的个数,我们来看这一个5象图,我们对顶点一调用了一遍dnf或者是bfs函数,那么点点e可以访问它下面到1~7这些景点,接着我们通过放射管那么1~7这些顶点,因为它已经被标记为已被否定过了,所以它们不再调用b反c或者是d反c了,我们直到0.8,那么0.8和0.9此时还是没有被标记为已被访问的,所以我们循环到0.8时,只会对它调用bfs或者是电反4,那么它是不是把0.8和0.9然后一到七。然后1~7是不是为一组啊,这样我们就得到了两条点的分量,所以我们说调用的次数被连通分量的个数好,这就是第2个结论,好可能同学们会发现,刚刚的那两个结论都是在5象图当中,它的前提条件一定都是5象图,那么在有项目当中会有类似的结论吗?我们来看一下,这是一个比上图的例子,我们从初始零点b出发开始进行,深度有限搜索,是不是可以仿照它所有的顶点啊,得到这样一个生成数,但是可以访问到所有的零件代表着它是一个墙面通道图吗,但是不是的,这个例子是不是不是一个财通的图啊?也就是说可以访问到所有零点,只是代表该顶点到剩下的其他的顶点有这样一条有效的路径,而并不能代表它的源头是一个墙面上的毒所以这是第一个结论。来看第2个结论,那么这里我们从顶点a为初始零点开始进行深度优先搜索,那么在第1个函数的负号循环当中,是不是也调用了两次dfs啊?第1次是针对于顶点a来讲的,第2次调用是输的是0点d的编号,那么这两次可以代表着该有象图的强硬方向的个数吧,答案是不是?不是的,是不是与该有相同的前面的分项个数完全的没有关系啊,所以第2个结论其实也是不成立的,所以在有效的当中无论是bfs还是dfs都没有上述在5项图当中的这两个结论,其实非常好理解,在无效当中我从某一个顶点出发到达另一个顶点,是不是反过来也可以从另一个顶点到达该初始顶点啊?但是在有项目当中是不是就没有这样的特点了吓到出发所以也就是没有。路径,所以也就是没有类似结论的原因好到本级,特别是我们学完了所有有关图的基础知识,接下来我们就来总结一下我学习了哪些重要的几个概念,首先我们来看图的逻辑节课,我们学习了图的定义,在途的电影当中,我们强调图的顶点集已经是一个非空到有限集这里的飞控则表示图当中一定是有顶点的,而边境是可以飞空的,也就是说图当中是可以没有边的好,这就是图的定义,接下来我们讲解了图的相关性的概念,这又列举了几个比较重要的,首先我们讲解了5相同和有相同,那么在接下来学习当中大家发现每一个点其实我们都有分5项图和有效图来进行讨论好,然后我们学习了完全图,大家要记着完全图n个节点的边的数量是多少,这个小考点然后学习了什么事比较特殊的就是或者是尿。这里强调的分量是针对于有乡土来讲的,而联通分量是针对于五象图来讲的,这一块的基本概念大家都特别清楚,然后我们学习了一种特殊的图叫做网,也就是每条边都带有一定的权重的好学习,完了逻辑结构,我们学习了图的层数结构以及它的相关操作,首先我们学习了两种最基本的存储结构就是连接矩阵,它是采用了顺序存储,然后水平接表,它采用的则是数据存储,加上面是存储,这个是运行数,存放的是顶点级,而液态存储存放的是编辑好,接下来我们学习了识字念表和笔记,读书表只有两种特殊的也是存储结构造识字列表针对的是有效图而连接多种表,针对的是存放五象图有深度类似啊但是他名字一样是从出发,然后最后我们相信了图的便利,有深度一些便利,第二反应是它类似啊树的心绪便利它与它的名字一样,是从初始点点出发按深的方向。电力有深度一些便利dfs它类似啊数的心绪便利,它与它的名字一样,是从初始点点出发,按深的方向进行一次的访问节点的,而第2个病例是广东立便返色,他也说的层次遍历比较相似,那么他的病历方向则是按照图的宽度的这个方向进行遍历的进行访问,所有定点的在广度性病例当中我们利用了广度性的病例bI反思到算法思想,实现了单元最短路径这一问题的解决方法,好无论是广东一些病例还是深度性病例,他们提供的都是我们一个解决问题的一个思想,我们可以运用它来解决实际问题,然后这就是本节课的全部内容。

6.3.2深度搜索
408

继续阅读