深度优先搜索 (DFS) 与广度优先搜索 (BFS) 伪代码和复杂性

2024-04-03

我必须为计算连接数量的算法开发伪代码 给定顶点 V 和边 E,图中的分量 G = (V, E)。

我知道我可以使用深度优先搜索或广度优先搜索来计算连接组件的数量。

但是,我想使用最有效的算法来解决这个问题,但我不确定每个算法的复杂度。

下面是用伪代码形式编写 DFS 的尝试。

function DFS((V,E))
     mark each node in V with 0
     count ← 0
     for each vertex in V do
          if vertex is marked then
               DFSExplore(vertex)

function DFSExplore(vertex)
     count ← count + 1
     mark vertex with count
     for each edge (vertex, neighbour) do
          if neighbour is marked with 0 then
               DFSExplore(neighbour)

下面是用伪代码形式编写 BFS 的尝试。

function BFS((V, E))
     mark each node in V with 0
     count ← 0, init(queue)     #create empty queue 
     for each vertex in V do
          if vertex is marked 0 then
               count ← count + 1
               mark vertex with count
               inject(queue, vertex)             #queue containing just vertex
               while queue is non-empty do
                    u ← eject(queue)                          #dequeues u
                    for each edge (u, w) adjacent to u do
                         if w is marked with 0 then
                              count ← count + 1
                              mark w with count
                              inject(queue, w)     #enqueues w

我的讲师说BFS与DFS具有相同的复杂性。

然而,当我搜索深度优先搜索的复杂度时,它是 O(V^2),而广度优先搜索的复杂度是使用邻接表时的 O(V + E),使用邻接表时的复杂度是 O(V^2)。使用邻接矩阵。

我想知道如何计算 DFS / BFS 的复杂度,并且我想知道如何调整伪代码来解决问题。


如果使用邻接表,DFS 和 BFS 的时间复杂度是相同的,即 O(V+E)。因此,如果您问哪一个更好,那么这完全取决于您要解决的问题类型。假设您想要解决一个目标接近起始顶点的问题,那么 BFS 将是更好的选择。另外,如果考虑内存,那么 DFS 是更好的选择,因为不需要存储子指针。

图片提供 - Narasimha karumanchi 的 DSA Made Easy

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

深度优先搜索 (DFS) 与广度优先搜索 (BFS) 伪代码和复杂性 的相关文章

  • HTML 嵌入对象具有灰色背景。可以透明吗?

    我使用带有开源插件的 Firefox 来播放视频 视频被 尽可能好地 缩放以适应嵌入对象的宽度和高度中定义的可用空间 但有时右侧和 或底部会有一点灰色边框 看来这不是我的父 div 的背景颜色 因为更改它根本没有效果 这是 HTML div
  • Xcode 6.4 Swift 单元测试无法编译:“GPUImage.h 未找到”“无法导入桥接标头”

    我的 Xcode 项目构建并运行良好 它有 Swift 和 Objective C 代码 它已安装 GPUImage 我向它添加了单元测试 现在它将不再编译 找不到 GPUImage h 文件 导入桥接标头失败 以下是我发现并尝试过的解决方
  • 按列分组的数据帧上 R 中的行之间的差异

    我希望通过 app name 获得不同版本的计数差异 我的数据集如下所示 app name version id count difference 这是数据集 data structure list app name structure c
  • 使用 AWS MSK 连接器连接到 AWS VPC 内的 MongoDB atlas

    我正在尝试使用MongoDB使用更改流Kafka 我选择 AWS MSK 是因为我的整个基础设施都位于 AWS 内 并且可以轻松与其他 AWS 服务集成 I created an AWS MSK cluster within the VPC
  • d3.js 更新视觉效果

    我有一个与 d3 js 放在一起的树形图 我通过 getJSON 填充数据 效果很好 但是 我在 setInterval 方法中具有此功能 并且它似乎并没有刷新自身 var treemap d3 layout treemap padding
  • 安装 APK 时出现会话“应用程序”错误

    我在将 Android Studio 1 1 编写的项目导入 Android Studio 2 1 2 时遇到困难 每当在平板电脑上测试应用程序之前构建 gradle 时 我都会收到此错误 下面是错误的屏幕截图 有谁知道是什么问题 我尝试过
  • 为什么我们不能在函数式接口中重载抽象方法? (爪哇)

    所以我熟悉java中的函数式接口 以及它们与lambda表达式的使用 一个函数式接口只能包含一个抽象方法 当从 lambda 表达式使用这一孤独方法时 您不需要指定其名称 因为接口中只有一个抽象方法 编译器知道这就是您正在引用的方法 Exa
  • 当 Vuejs 中的 props 值发生变化时,DOM 不会更新

    我有父母和孩子 在父级中 我将 3 个变量作为 props 传递给子级 在孩子中我正在使用watch 寻找变量的变化 当孩子第一次被创建时watch按预期工作 但是当更新 props 中的数据时 子级的 DOM 不会更新 正在寻找变量数据变
  • 使用 wmi 获取活动会话(Win32_LogonSession 还返回非活动/旧会话)

    有没有办法只显示 wmi 的活动会话 问题是 Win32 LogonSession 还显示不活动 断开连接的会话 ManagementScope scope new ManagementScope ManagementPath Defaul
  • DELPHI 和 WANT 或 NANT

    We use 巡航控制 net http confluence public thoughtworks org display CCNET Welcome to CruiseControl NET在 Delphi 2006 应用程序中进行持
  • RetentionPolicy CLASS 与 RUNTIME

    两者之间有什么实际区别RetentionPolicy CLASS and RetentionPolicy RUNTIME 看起来两者都被记录到字节码中 并且无论如何都可以在运行时访问 无论如何 两者都可以在运行时访问 那不是那个javado
  • 扁平化/反规范化 SQL 查找表的最佳方法?

    我有很多这样的表 Lookup HealthCheckupRisks ID Name 1 Anemia 2 Anorexic 3 Bulemic 4 Depression 122 Syphilis PatientRisksOnCheckup
  • CSS - 为什么我无法设置 元素的高度和宽度?

    我正在尝试使用以下 html 标记创建 css 按钮 a href access php class css button red Forgot password a 但它最终不会比中间的文本大 即使我已经设置了班级的高度和宽度 顺便说一句
  • 如何将 c_uint 的 ctypes 数组转换为 numpy 数组

    我有以下 ctypes 数组 data ctypes c uint 100 我想创建一个 numpy 数组np data包含来自 ctypes 数组数据的整数值 ctypes 数组显然稍后会填充值 我看到numpy中有一个ctypes接口
  • 如何使用 Spark 2 屏蔽列?

    我有一些表 我需要屏蔽其中的一些列 要屏蔽的列因表而异 我正在读取这些列application conf file 例如 对于员工表如下所示 id name age address 1 abcd 21 India 2 qazx 42 Ger
  • 你将如何开始自动化我的工作? - 第2部分

    后续这个问题 https stackoverflow com questions 2796128 how would you start automating my job 在经历了第一波进货 9 小时的复制 粘贴 后 我现在相信我已经满足
  • KIOSK 系统的一台 PC 上有多个显示器

    我正在使用 PHP HTML5 和 Javascript 开发 KIOSK 系统 我想在一台 PC 上连接多个 触摸屏 显示器 我希望这些监视器以全屏模式显示浏览器 用户只能访问 我的网站 而无需任何其他控件 他们不会有鼠标或键盘 他们不应
  • C++20 范围太多 |运营商?

    我在这段代码中使用 g 10 2 有谁知道为什么我最后收到编译器错误std views reverse on results3 include
  • Swift - 在 TableView 单元格中使用步进器递增标签

    这里又是一个 Swift 初学者 我只是想在每个 TableView 单元格中使用一个步进器来增加同一单元格中的标签 我发现了关于这个主题的几个问题 但它们包含其他元素 我无法提取基本概念 Swift Stepper Action 更改同一
  • 为什么 DbSet 不是协变的?

    我有一个工厂函数来返回DbSet Of IItemType 实际的返回类型始终是一个实现IItemType 例如DbSet Of CategoryType 我认为泛型支持协方差 并且此方法可以正常工作 但是当我尝试运行代码时出现异常 无法转

随机推荐

  • 如何获取两个iframe内元素的属性

    div div a href http www blablabla com a div div
  • Angular 2 使用嵌套组件创建反应式表单

    我的要求是我需要创建一个带有嵌套组件的表单 我正在为每个表单字段创建组件 这意味着文本框将 作为一个组件 对于单选按钮来说 同样会有另一个组件
  • 是否有一个库可以根据元数据声明生成 UI,如下所示>>?

    你知道有一个库允许我们通过声明应该生成 UI 来生成它吗 我认为一定有人实现了一种机制 允许我们像这样转换代码 class Main Command int add int a int b return a b 比如说 一个带有 2 个文本
  • 如何从类库项目加载视图?

    我尝试创建一个VirtualPathProvider并将视图设置为嵌入资源 class AssemblyResourceVirtualFile VirtualFile string path public AssemblyResourceV
  • 我可以在 IIS 中配置 SMTP,以便它中继到远程 SMTP 服务器吗?

    我想在我的 Web 服务器上配置 SMTP 以便通过 SMTP 服务器发送的任何电子邮件都会中继到远程 SMTP 服务器 IIS SMTP 服务器必须使用 SMTP 身份验证 并使用主机名 用户名和密码 就像配置普通电子邮件客户端一样 有人
  • 正则表达式匹配具有不同数字和最小长度的数字

    我正在尝试编写一个正则表达式 以验证 c NET Core 模型上的属性 该模型生成 javascript 表达式 来匹配由至少两个不同数字和最小长度为 6 位数字组成的所有数字 例如 222222 无效 122222 有效 1111125
  • WPF ValidationRule 加载控件时验证

    我有一个带有此验证的控件
  • 使用环境变量识别 Cygwin、Linux、Windows

    当 makefile 需要在不同的操作系统上运行并且应根据操作系统正确设置各种设置 转义 路径分隔符等 时 就会出现问题 第一种方法是使用 Windows COMSPEC ifneq COMSPEC ComSpec in windows e
  • 在 WHERE 语句中使用子查询的别名

    我正在尝试在 WHERE 语句中使用在 SELECT 中创建的别名 它不起作用 我在另一个问题中读到了原因 如何在不重复子查询的情况下完成这项工作 SELECT p PatientID p PatientType p AccountNumb
  • 使用 axios 的 API 请求始终未经 Laravel API 的授权

    我正在使用一个个人项目Laravel https laravel com 5 6 和Axios https github com axios axios库 标准 Laravel5 6 https laravel com docs 5 6包裹
  • iOS 电影播放器​​可以在多大程度上进行定制和设计?

    我正在尝试完成类似于下图的事情 也就是说 我想添加一个滑出式覆盖导航栏和其他覆盖功能 一般来说 我也想知道电影播放器 可以进行什么样的定制 具体来说 我可以从顶部栏中添加 删除按钮吗 如何将这些点添加到播放栏 谢谢 http blog ho
  • MVC如何返回带参数的视图

    目前我有一个有效的方法 当单击此处的 Razor 中的代码链接时 它正在工作 Html ActionLink New User Register Register new OpenID Model OpenID 我希望具有相同的效果 但从控
  • 如何通过 PHP 更改 Joomla 管理员 URL - 无插件

    由于我是 Joomla 的新手 我想知道是否有办法通过以下方式更改管理员 URL使用PHP而不是使用插件或扩展 据我所知 使用第三方组件是有风险的 我真的不想在我的网站中使用第三方扩展 我怎样才能完成它 默认情况下 Joomla 管理员 U
  • 批处理文件中的 IF ELSE 语法错误?

    我是批处理文件写入的新手 我正在编写一个脚本 该脚本随机打开三个网页之一并在延迟后循环 当我运行它时 我经常遇到语法错误 但我无法确定它在哪里 main echo on set location set A num random 10 if
  • powershell - 列出本地用户及其组

    我想要一份包含所有本地用户及其相关组 用户 高级用户 管理员等 的报告 我通过这种方式获取用户 adsi ADSI WinNT adsi psbase children where psbase schemaClassName match
  • CSS 剪辑动画

    我正在尝试使用 CSS3 过渡来制作 CSS 动画clip没有成功 图像只是剪辑而没有过渡 我缺少什么 clipped position absolute width auto clip rect 100 100 100 100 webki
  • Facebook Connect 发布对话框文本?

    您好 我已经让 Facebook Connect 与功能性登录和注销按钮一起使用 另外 当我按下按钮时 我想发布到 Facebook 我可以做到这一点 有点 你看 我有一个用户事先自定义的指定字符串 它叫做 statusUpdates 我不
  • 如何让现有分支跟踪远程分支?

    我正在尝试使用以下命令跟踪现有分支到远程分支 track or set upstream to 但出现以下错误 git branch track master origin master fatal A branch named maste
  • qml 无框窗户的阴影

    我有无框主窗口 由 qml 创建 ApplicationWindow 在我的 main qml 文件中 我通过以下方式实例化 qmlQQmlApplicationEngine load Qt5 1中引入的类 如果我设置Qt Frameles
  • 深度优先搜索 (DFS) 与广度优先搜索 (BFS) 伪代码和复杂性

    我必须为计算连接数量的算法开发伪代码 给定顶点 V 和边 E 图中的分量 G V E 我知道我可以使用深度优先搜索或广度优先搜索来计算连接组件的数量 但是 我想使用最有效的算法来解决这个问题 但我不确定每个算法的复杂度 下面是用伪代码形式编