重庆交通大学官网网站/网站产品怎么优化

重庆交通大学官网网站,网站产品怎么优化,浙江做公司网站多少钱,wordpress开发小程序408答疑 文章目录 三、图的遍历图的遍历概述图的遍历算法的重要性图的遍历与树的遍历的区别图的遍历过程中的注意事项避免重复访问遍历算法的分类遍历结果的不唯一性 广度优先搜索广度优先搜索(BFS)概述BFS 的特点广度优先遍历的过程示例图遍历过程 BFS …

408答疑


文章目录

  • 三、图的遍历
    • 图的遍历概述
      • 图的遍历算法的重要性
      • 图的遍历与树的遍历的区别
      • 图的遍历过程中的注意事项
        • 避免重复访问
        • 遍历算法的分类
        • 遍历结果的不唯一性
    • 广度优先搜索
      • 广度优先搜索(BFS)概述
      • BFS 的特点
      • 广度优先遍历的过程
        • 示例图
        • 遍历过程
      • BFS 算法的性能分析
        • 基于邻接表存储的 BFS 的效率
      • BFS 算法求解单源最短路径问题
      • 广度优先生成树
    • 深度优先搜索
      • 深度优先搜索(DFS)概述
      • 深度优先遍历的过程
        • 示例图
        • 遍历过程
      • DFS 算法的性能分析
      • 深度优先的生成树和生成森林
    • 注意事项
    • 图的遍历与图的连通性
  • 六、参考资料
    • 鲍鱼科技课件
    • 26王道考研书


三、图的遍历

图的遍历概述

图的遍历是指从图中的某一项点出发,按照某种搜索方法沿着图中的边对图中的所有顶点访问一次,且仅访问一次。
注意到树是一种特殊的图,所以树的遍历实际上也可视为一种特殊的图的遍历。

图的遍历算法的重要性

图的遍历算法是求解图的连通性问题、拓扑排序和求关键路径等算法的基础。

图的遍历与树的遍历的区别

图的遍历比树的遍历要复杂得多,因为图的任意一个顶点都可能和其余的顶点相邻接,所以在访问某个顶点后,可能沿着某条路径搜索又回到该顶点。

图的遍历过程中的注意事项

避免重复访问

为避免同一顶点被访问多次,在遍历图的过程中,必须记下每个已访问过的顶点,为此可以设一个辅助数组 visited[] 来标记顶点是否被访问过。

遍历算法的分类

图的遍历算法主要有两种:

  • 广度优先搜索(BFS)
  • 深度优先搜索(DFS)
遍历结果的不唯一性

图的遍历结果顺序是不唯一的,跟选择的起始结点和所求邻接结点的顺序有关。

广度优先搜索

广度优先搜索(BFS)概述

广度优先搜索(Breadth-First-Search, BFS)类似于二叉树的层次遍历算法。基本思想是:首先访问起始顶点 v v v,接着由 v v v 出发,依次访问 v v v 的各个未访问过的邻接顶点 w 1 , w 2 , ⋯ , w r w_1, w_2, \cdots, w_r w1,w2,,wr,然后依次访问 w 1 , w 2 , ⋯ , w r w_1, w_2, \cdots, w_r w1,w2,,wr 的所有未被访问过的邻接顶点;再从这些访问过的顶点出发,访问它们所有未被访问过的邻接顶点,直至图中所有顶点都被访问过为止。若此时图中尚有顶点未被访问,则另选图中一个未曾被访问的顶点作为始点,重复上述过程,直至图中所有顶点都被访问到为止。Dijkstra 单源最短路径算法和 Prim 最小生成树算法也应用了类似的思想。

BFS 的特点

广度优先搜索遍历图的过程是以 v v v 为起始点,由近至远依次访问和 v v v 有路径相通且路径长度为 1, 2, … 的顶点。广度优先搜索是一种分层的查找过程,每向前走一步可能访问一批顶点,不像深度优先搜索那样有往回退的情况,因此它不是一个递归的算法。为了实现逐层的访问,算法必须借助一个辅助队列,以记忆正在访问的顶点的下一层顶点。

广度优先遍历的过程

示例图

如下图所示,一个无向图 G G G

在这里插入图片描述

遍历过程

假设从顶点 a a a 开始访问, a a a 先入队。此时队列非空,取出队头元素 a a a,因为 b , c b, c b,c a a a 邻接且未被访问过,于是依次访问 b , c b, c b,c,并将 b , c b, c b,c 依次入队。队列非空,取出队头元素 b b b,依次访问与 b b b 邻接且未被访问的顶点 d , e d, e d,e,并将 d , e d, e d,e 入队(注意: a a a b b b 也邻接,但 a a a 已置访问标记,所以不再重复访问)。此时队列非空,取出队头元素 c c c,访问与 c c c 邻接且未被访问的顶点 f , g f, g f,g,并将 f , g f, g f,g 入队。此时,取出队头元素 d d d,但与 d d d 邻接且未被访问的顶点为空,所以不进行任何操作。继续取出队头元素 e e e,将 h h h 入队列……最终取出队头元素 h h h 后,队列为空,从而循环自动跳出。遍历结果为 a b c d e f g h abcdefgh abcdefgh

从上例不难看出,图的广度优先搜索的过程与二叉树的层次遍历是完全一致的,这也说明了图的广度优先搜索遍历算法是二叉树的层次遍历算法的扩展。

BFS 算法的性能分析

无论是邻接表还是邻接矩阵的存储方式,BFS 算法都需要借助一个辅助队列 Q Q Q n n n 个顶点均需入队一次,在最坏的情况下,空间复杂度为 O ( ∣ V ∣ ) O(|V|) O(V)

基于邻接表存储的 BFS 的效率

遍历图的过程实质上是对每个顶点查找其邻接点的过程,耗费的时间取决于所采用的存储结构。采用邻接表存储时,每个顶点均需搜索(或入队)一次,时间复杂度为 O ( ∣ V ∣ ) O(|V|) O(V),在搜索每个顶点的邻接点时,每条边至少访问一次,时间复杂度为 O ( ∣ E ∣ ) O(|E|) O(E),总的时间复杂度为 O ( ∣ V ∣ + ∣ E ∣ ) O(|V| + |E|) O(V+E)。采用邻接矩阵存储时,查找每个顶点的邻接点所需的时间为 O ( ∣ V ∣ ) O(|V|) O(V),总时间复杂度为 O ( ∣ V ∣ 2 ) O(|V|^2) O(V2)

BFS 算法求解单源最短路径问题

若图 G = ( V , E ) G = (V, E) G=(V,E) 为非带权图,定义从顶点 u u u 到顶点 v v v 的最短路径 d ( u , v ) d(u, v) d(u,v) 为从 u u u v v v 的任何路径中最少的边数;若从 u u u v v v 没有通路,则 d ( u , v ) = ∞ d(u, v) = \infty d(u,v)=

使用 BFS,我们可以求解一个满足上述定义的非带权图的单源最短路径问题,这是由广度优先搜索总是按照距离由近到远来遍历图中每个顶点的性质决定的。

广度优先生成树

在广度遍历的过程中,我们可以得到一棵遍历树,称为广度优先生成树,如下图所示。

在这里插入图片描述

需要注意的是,同一个图的邻接矩阵存储表示是唯一的,所以其广度优先生成树也是唯一的,但因为邻接表存储表示不唯一,所以其广度优先生成树也是不唯一的。

深度优先搜索

深度优先搜索(DFS)概述

深度优先搜索(Depth-First-Search, DFS)是一种尽可能“深”地搜索图的算法。其基本思想如下:

  1. 借助临时空间:借助 n n n 个临时空间来标记结点是否被访问过。
  2. 访问顶点:首先访问图中的某一顶点 v v v,接着访问 v v v 的邻接顶点 w w w,访问 w w w 的下一邻接顶点,依次类推,重复上述过程。
  3. 回溯:当不能再继续向下访问顶点时,依次退回到最近被访问的顶点,如果还有其他邻接顶点没有被访问,则继续从该结点出发开始上述的遍历过程,直到图的所有结点被访问完为止。

深度优先遍历相当于二叉树中的前序遍历。

深度优先遍历的过程

示例图

如下图所示,一个无向图 G G G

在这里插入图片描述

遍历过程

深度优先搜索的过程如下:

  1. 首先访问 a a a,并置 a a a 访问标记。
  2. 然后访问与 a a a 邻接且未被访问的顶点 b b b,置 b b b 访问标记。
  3. 然后访问与 b b b 邻接且未被访问的顶点 d d d,置 d d d 访问标记。
  4. 此时 d d d 已没有未被访问过的邻接点,所以返回上一个访问的顶点 b b b,访问与其邻接且未被访问的顶点 e e e,置 e e e 访问标记,以此类推,直至图中所有顶点都被访问一次。遍历结果为 a b d e h c f g abdehcfg abdehcfg

DFS 算法的性能分析

DFS算法是一个递归算法,需要借助一个递归工作栈,所以其空间复杂度为 O ( ∣ V ∣ ) O(|V|) O(V)。遍历图的过程实质上是通过边查找邻接点的过程,因此两种遍历方式的时间复杂度都相同,不同之处仅在于对顶点访问顺序的不同。采用邻接矩阵存储时,总时间复杂度为 O ( ∣ V ∣ 2 ) O(|V|^2) O(V2)。采用邻接表存储时,总的时间复杂度为 O ( ∣ V ∣ + ∣ E ∣ ) O(|V| + |E|) O(V+E)

深度优先的生成树和生成森林

与广度优先搜索一样,深度优先搜索也会产生一棵深度优先生成树。当然,这是有条件的,即对连通图调用DFS才能产生深度优先生成树,否则产生的将是深度优先生成森林,如下图所示。

在这里插入图片描述

与BFS类似,基于邻接表存储的深度优先生成树是不唯一的。

注意事项

图的邻接矩阵表示是唯一的,但对邻接表来说,若边的输入次序不同,则生成的邻接表也不同。因此,对同样一个图,基于邻接矩阵的遍历得到的 DFS 序列和 BFS 序列是唯一的,基于邻接表的遍历得到的 DFS 序列和 BFS 序列是不唯一的。

图的遍历与图的连通性

图的遍历法可以用来判断图的连通性。对于无向图来说,若无向图是连通的,则从任意一个结点出发,仅需一次遍历就能够访问图中的所有顶点;若无向图是非连通的,则从某一个顶点出发,一次遍历只能访问到该顶点所在连通分量的所有顶点,而对于图中其他连通分量的顶点,则无法通过这次遍历访问。对于有向图来说,若从初始顶点到图中的每个顶点都有路径,则能够访问到图中的所有顶点,否则不能访问到所有顶点。

因此,在BFSTraverse()或DFSTraverse()中添加了第二个for循环,再选取初始点,继续进行遍历,以防止一次无法遍历图的所有顶点。对于无向图,上述两个函数调用BFS(G, i)或DFS(G, i)的次数等于该图的连通分量数;而对于有向图则不是这样,因为一个连通的有向图分为强连通的和非强连通的,它的连通子图也分为强连通分量和非强连通分量,非强连通分量一次调用BFS(G, i)或DFS(G, i)无法访问到该连通分量的所有顶点,如下图所示。

在这里插入图片描述

六、参考资料

鲍鱼科技课件

b站免费王道课后题讲解:
在这里插入图片描述

网课全程班:
在这里插入图片描述

26王道考研书

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/73447.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端解决方案:实现网页截图并导出PDF功能

前端解决方案:实现网页截图并导出PDF功能 在前端开发中,我们经常会遇到需要将网页内容导出为PDF的需求。本文将以一个准考证预览和导出的例子,带你一步步实现这个功能。我们会处理包括跨域图片、Canvas绘图、PDF生成等多个技术要点。 一、基…

【MySQL】表操作

表操作 一、创建表 1、语句2、语句介绍3、注意事项4、介绍5、示例 二、查看表结构 1、语句2、介绍3、返回的信息4、示例 三、添加字段 1、语句2、语句介绍3、示例 四、修改 1、语句2、语句介绍3、示例 五、删除 1、语句2、示例 六、修改表名 1、语句2、语句介绍3、示例 七、删…

响应“一机两用”政策 ,实现政务外网安全

在数字化办公的浪潮下,企业与政务机构面临着既要保障数据安全,又要高效访问互联网的双重需求。“一机两用”成为解决这一难题的关键。 政策驱动,需求迫切 随着《网络安全法》《数据安全法》等法律法规的相继出台,网络安全防护的要…

文生图语义识别插件使用(controlnet)

1. 插件下载(github) https://github.com/Mikubill/sd-webui-controlnet https://github.com/lllyasviel/ControlNet2. 模型下载(hugging face) https://github.com/Mikubill/sd-webui-controlnet/wiki/Model-download https://huggingface.co/bdsqlsz/qinglong_controlnet-l…

学者观察 | web3.0产业发展与技术融合——北京大学研究员肖臻

导语 肖臻老师认为在未来很长一段时间内,Web 3.0将和现在的Web 2.0共存。Web 3.0和人工智能(AI)的融合发展前景非常广阔,Web 3.0致力于打造去中心化的互联网生态系统,赋予用户更大的数据所有权和控制权,而…

【模型压缩+推理加速】知识蒸馏综述解读

知识蒸馏综述解读 论文: https://arxiv.org/abs/2006.05525 最近Deepseek R1的技术报告中,训练部分提到使用了知识蒸馏,就像系统性的看看蒸馏算法的原理。看了很多的博客,很多都没有详细把知识蒸馏系统的讲清楚。我们还是读一下…

vivo 湖仓架构的性能提升之旅

作者:郭小龙 vivo互联网 大数据高级研发工程师 导读:本文整理自 vivo互联网 大数据高级研发工程师 郭小龙 在 StarRocks 年度峰会上的分享,聚焦 vivo 大数据多维分析面临的挑战、StarRocks 落地方案及应用收益。 在 即席分析 场景&#xff0c…

2025年如何避免使用验证码求解器时被IP封禁

引言 2025年,验证码求解器已成为自动化网络抓取和其他在线流程的关键工具。然而,自动化用户面临的一个常见挑战是IP封禁。当网站检测到自动化活动时,通常会阻止发出请求的IP地址,导致验证码挑战无法解决。本文将探讨使用验证码求…

JVM详解(包括JVM内存模型与GC垃圾回收)

📖前言: 学会使用Java对于一个程序员是远远不够的。Java语法的掌握只是一部分,另一部分就是需要掌握Java内部的工作原理,从编译到运行,到底是谁在帮我们完成工作的? 接下来着重对Java虚拟机,也就…

【无标题】大亚湾文化体育场多美啊。

请推荐一些常用并且免费的,可直接在线运行【Python】代码的平台并列出对应网址 好的,用户想让我推荐一些常用且免费的、可以直接在线运行Python代码的平台,并且需要列出对应的网址。我需要先回想一下自己知道的在线Python运行环境&#xff0…

权限提升—Windows权限提升土豆家族溢出漏洞通杀全系

前言 OK,Java安全更新不下去了,实在是太难啦啊,想起来提权这一块没怎么更新过,接下来都主要是更新提权这一块的文章了,Java安全的话以后有耐心再搞了。 手动提权 今天主要是讲这个手动的提权,手动提权相…

python --face_recognition(人脸识别,检测,特征提取,绘制鼻子,眼睛,嘴巴,眉毛)/活体检测

dlib 安装方法 之前博文 https://blog.csdn.net/weixin_44634704/article/details/141332644 环境: python3.8 opencv-python4.11.0.86 face_recognition1.3.0 dlib19.24.6人脸检测 import cv2 import face_recognition# 读取人脸图片 img cv2.imread(r"C:\Users\123\…

禾赛盈利了,但激光雷达没有胜利

还远没有到激光雷达党欢呼的时候。 3月,随着禾赛科技公布2024年报,全世界第一家也是唯一一家实现全年盈利的激光雷达上市公司诞生,为了这个盈利目标,禾赛科技奋斗了十年。 但极大的出货量和不高的盈利水平,让禾赛科技…

关于金碟K3,禁用和启用需要流程审批后执行

真是难受,是设计师蠢呢自己问题比较多呢,现在都还没有弄好 点击禁用和启用,通过流程来执行 到底是蠢呢还是设计问题,搞了半日没有效果,搞那么复杂! 而且有样板都没有草鞋成功 BOS设计,表单属性,操作列表: 1、启用禁用流程

导入 Excel 规则批量修改或删除 PDF 文档内容

需要对 PDF 文档内容进行修改的时候,通常我们会需要借助一些专业的工具来帮我们完成。那我们如果需要修改的 PDF 文档较多的时候,有什么方法可以帮我们实现批量操作呢?今天这篇文章就给大家介绍一下当我们需要批量修改多个 PDF 文档的时候&am…

msyql--基本操作之运维篇

检查 root 用户的权限 查看该用户针对这个数据库的权限 -- 如果在终端连接mysql时需要 mysql -u root -p -- 查看用户权限 SELECT user, host FROM mysql.user WHERE user root;可以看的出来root有他的访问权限,如过没有localhost或者% 说明没有访问权限 添加…

云计算:探索现代科技的未来之云

文章目录 云计算基本概念云计算是什么注意 云计算的价值云计算的部署模式云计算的服务模式主流的云计算技术AWS简介AWS建立了广阔的合作伙伴生态 VMware简介VMware服务介绍 华为云简介华为云Stack模式 云计算基本概念 云计算是什么 云计算是一种模型,它可以实现随时…

STM32蜂鸣器播放音乐

STM32蜂鸣器播放音乐 STM32蜂鸣器播放音乐 Do, Re, Mi, Fa, 1. 功能概述 本系统基于STM32F7系列微控制器,实现了以下功能: 通过7个按键控制蜂鸣器发声,按键对应不同的音符。每个按键对应一个音符(Do, Re, Mi, Fa, Sol, La, Si&a…

网络地址转换技术(2)

NAT的配置方法: (一)静态NAT的配置方法 进入接口视图配置NAT转换规则 Nat static global 公网地址 inside 私网地址 内网终端PC2(192.168.20.2/24)与公网路由器AR1的G0/0/1(11.22.33.1/24)做…

【Linux网络-多路转接select】

代码:https://gitee.com/nanyi-c/linux/tree/master/day50 一、I/O多路转接之select 1.初始select 系统提供select函数来实现多路复用输入/输出模型 select系统调用是用来让我们的程序监视多个文件描述符的状态变化的程序会停在select这里等待,直到被…