当前课程知识点:数据结构(上) >  第六章 图 >  (c)广度优先搜索 >  06C-2 策略

返回《数据结构(上)》慕课在线视频课程列表

06C-2 策略在线视频

06C-2 策略

下一节:06C-3 实现

返回《数据结构(上)》慕课在线视频列表

06C-2 策略课程教案、知识点、字幕

所谓的广度优先遍历过程

可以大致描述为如下一段自然语言

具体来说 如果指定的起点是顶点s

那么这种搜索将首先访问s

在这个图中 我们通过将s染黑

表示它已经接受了访问

接下来我们需要访问

S所有尚未访问的邻接顶点

从这个图中来看

如果s具有若干个邻居

就需要逐一枚举

并且访问这些邻居

在这里由s通往它的那些

刚被访问的邻居的边都被加粗

这暗示着这些边都已经被我们的

算法所采纳和保留

这些边都是非常重要的

它们携带了整个遍历过程中

所发现的一些信息

我们很快就会看到

这些边将构成原图的一个

极大的无环子图

通常情况下是一棵树

或者是一个森林

反过来 在原图中

还会有一些边

我们并不采纳

比如在此时所有这些

刚被访问的节点之间

有可能也有连边

但是在经过广度优先遍历之后

它们将不再保留 而是被舍弃掉

接下来我们的关注点是

刚被访问的这些新发现的节点

我们将继续去枚举出

它们各自的所有邻接顶点

并且检查它们的状态

如果这些顶点中

仍有尚未访问者

就轮到对它们进行访问了

在这个图中 我们不妨

将这些新的顶点

画在图中的外围

也就是说 我们接下来将通过

刚刚被访问过的那些顶点

通往它们的边找到它们

同样地 在这些边中

也有一部分被我们保留下来

而另外一些则按照同样的原理

不予保留

再一次地 在新发现的这些顶点之间

也有可能连有某些边

比如说这些

而且这些边也同样地不会被

广度优先遍历所采纳

因此它们也没有加粗

好了 相对于这些

新近发现的顶点

在图中也就是这些

居于最外围的顶点

我们将再一次地去枚举出

它们所对应的邻居们

在图中 我们依然不妨

以更外围的一些顶点来示意

那么接下来也轮到

这些新发现的顶点

接受访问了

具体来说 我们也需要保留

若干由原先的顶点

通往新近访问这些顶点的边

而且同样地 尽管在这些顶点之间

也可能连有不同的边

我们也依然不予采纳

好 这个算法将不断地如此迭代反复

直到所有的顶点都接受了访问

仍以这幅图为例 我们可以看到

所谓广度优先搜索

的确是一种遍历

它会按照我们刚才

所介绍的那种策略

确定不同顶点接受访问的次序

并且按照这种次序

对各顶点逐个地访问

而整个搜索过程的最终产物或成果

不过是选自原图的一系列边

也就是这里加粗的这些边

而原图中其余的边

也就是这里用淡色细线条表示的边

都将被忽略

而不予进一步考虑

可以通过这个图看出

这里的取舍原则

也就是说 这里按照与起点s的距离

将所有的顶点划分为

若干个等价类

在这个图中 也就是一个套一个的环路

就像某些城市一样

可能有一环二环三环

以及诸如此类地 n环

那么在同一等价类内部

各顶点的边

都不会被采纳

而只有连接于相邻等价类之间的

某些边才会被采纳

请注意 同样是连接

相邻等价类顶点的边

未必都会被采纳

比如说这条 这条 这条 这条

以及这条 这条 这条和这条

而反过来 我们可以注意到

所有被保留下来

并且采纳的这些边

将足以把所有的顶点

连接起来

构成一个连通图

同时它们之间也因为刚才的规则

而不致于造成环路

也就是说 它是一个

极大的无环图

我们讲过 这就是一棵树

没错 它就是一棵树

因为这棵树中涵盖了

原图的所有的顶点

所以我们也称之为支撑树

Spanning Tree

另外 既然这样一个遍历过程

可以将所有的顶点划分为一个

一个又一个等价类

而且这些等价类

按照到起点s的距离

是逐次单调变化的

因此它与我们此前所介绍的

树的层次遍历

有异曲同工之妙

是的 对于图的特例

也就是树而言

这样一个遍历过程

其实就是不折不扣的层次遍历

所以反过来 我们也可以认为

所谓图的广度优先遍历

实际上就等同于

树的层次遍历

后者可以认为是前者的一个特例

而反过来 前者也是后者的推广

好了 那么这样一种

用自然语言描述的遍历过程

如何严格地描述为算法

并且实现为具体的代码呢?

数据结构(上)课程列表:

第零章

-选课之前

--写在选课之前

--宣传片

-考核方式

--考核方式

-OJ系统说明

--关于OJ

--1-注册与登录

--2-界面与选课

--3-提交测试

-关于课程教材与讲义

--课程教材与讲义

-关于讨论区

--关于讨论区

-微信平台

--html

-PA晋级申请

--PA晋级

--MOOC --> THU 晋级申请专区

--THU --> CST 晋级申请专区

--编程作业不过瘾?且来清华试比高!

第一章 绪论(上)

-(a)计算

--01-A-1: 计算

--01a-2: 绳索计算机

--01a-3: 尺规计算机

--01a-4: 算法

--01a-5 : 有穷性

--演示

--01a-6 : 好算法

--(a)计算--作业

-(b)计算模型

--01b-1: 性能测度

--01b-2: 问题规模

--01b-3: 最坏情况

--01b-4: 理想模型

--01b-5: 图灵机

--01b-6: 图灵机实例

--01b-7: RAM模型

--01b-8: RAM实例

-(b)计算模型--作业

-(c)大O记号

--01c-1: 主流长远

--01c-2: 大O记号

--01c-3: 高效解

--01c-4 : 有效解

--01c-5 : 难解

--01c-6: 2−Subset

--01c-7: 增长速度

-(c)大O记号--作业

第一章 绪论(下)

-(d)算法分析

--01d-1: 算法分析

--01d-2: 级数

--01d-3: 循环

--01d-4: 实例:非极端元素+起泡排序

--01d-5: 正确性的证明

--01d-6: 封底估算-1

--01d-7: 封底估算-2

-(d)算法分析--作业

-(e)迭代与递归

--01-E-1: 迭代与递归

--01-E-2: 减而治之

--01-E-3: 递归跟踪

--01-E-4: 递推方程

--01-E-5: 数组倒置

--01-E-6: 分而治之

--01-E-7: 二分递归:数组求和

--01E-8 二分递归:Max2

--01E-09: Max2:二分递归

-(e)迭代与递归--作业

-(xc)动态规划

--01XC-1: 动态规划

--01XC-2: Fib():递推方程

--01XC-3: Fib():封底估算

--01XC-4: Fib():递归跟踪

--01XC-5: Fib():迭代

--01XC-6: 最长公共子序列

-- 演示

--01XC-7: LCS:递归

--01XC-8: LCS:理解

--01XC-9: LCS:复杂度

--01XC-A: LCS:动态规划

-(xc)动态规划--作业

-本章测验--作业

第二章 向量(上)

-(a)接口与实现

--02A-1 接口与实现

--02A-2 向量ADT

--02A-3 接口操作实例

--02A-4 构造与析构

--02A-5 复制

-(a)接口与实现--作业

-(b)可扩充向量

--02B-1 可扩充向量

--02B-2 动态空间管理

--02B-3 递增式扩容

--02B-4 加倍式扩容

--02B-5 分摊复杂度

-(b)可扩充向量--作业

-(c)无序向量

--02C-1 概述

--02C-2: 循秩访问

--02C-3 插入

--02C-4 区间删除

--02C-5 单元素删除

--02C-6 查找

--02C-7 唯一化

--02C-8 遍历

-(c)无序向量--作业

-(d1)有序向量:唯一化

--02D1-1 有序性

--02D1-2 唯一化(低效版)

--02D1-3 复杂度(低效版)

--02D1-4 唯一化(高效版)

--02D1-5 实例与分析(高效版)

-(d1)有序向量:唯一化--作业

-(d2)有序向量:二分查找

--02D2-1 概述

--02D2-2 接口

--02D2-3 语义

--02D2-4 原理

--02D2-5 实现

--02D2-6 实例

--02D2-7 查找长度

-(d2)有序向量:二分查找--作业

第二章 向量(下)

-(d3)有序向量:Fibonacci查找

--02D3-1 构思

--02D3-2 实现

--02D3-3 实例

--02D3-4 最优性

-(d3)有序向量:Fibonacci查找--作业

-(d4)有序向量:二分查找(改进)

--02D4-1 构思

--02D4-2 版本B

--02D4-3 语义

--02D4-4 版本C

--02D4-5 正确性

-(d4)有序向量:二分查找(改进)--作业

-(d5)有序向量:插值查找

--02D5-1 原理

--02D5-2 实例

--02D5-3 性能分析

--02D5-4 字宽折半

--02D5-5 综合对比

-第二章 向量(下)--(d5)有序向量:插值查找

-(e)起泡排序

--02 E-1 构思

--02E-2 改进

--02E-3 反例

--02E-4 再改进

--02E-5 综合评价

-(e)起泡排序--作业

-(f)归并排序

--02F-1 归并排序:构思

--02F-2 归并排序:主算法

--02F-3 二路归并:实例

--02F-4 二路归并:实现

--02F-5 二路归并:正确性

--02F-6 归并排序:性能分析

-(f)归并排序--作业

-本章测验--作业

第三章 列表

-(a)接口与实现

--03A-1 从静态到动态

--03A-2 从向量到列表

--03A-3 从秩到位置

--03A-4 实现

-(a)接口与实现--作业

-(b)无序列表

--03B-1 循秩访问

--03B-2 查找

--03B-3 插入与复制

--03B-4 删除与析构

--03B-5 唯一化

-(b)无序列表--作业

-(c)有序列表

--03C-1 唯一化·构思

--03C-2 唯一化·实现

--03C-3 查找

-(c)有序列表--作业

-(d)选择排序

--03D-1 构思

--03D-2 实例

--03D-3 实现

--03D-4 推敲

--03D-5 selectMax()

--03D-6 性能

-(d)选择排序--作业

-(e)插入排序

--03E-1 经验

--03E-2 构思

--03E-3 对比

--03E-4 实例

--03E-5 实现

--03E-6 性能分析

--03E-7 平均性能

--03E-8 逆序对

-(e)插入排序--作业

-(xd)习题辅导:LightHouse

--03X D 习题辅导:LightHouse

-本章测验--作业

第四章 栈与队列

- (a)栈接口与实现

--04A-1 栈

--04A-2 实例

--04A-3 实现

- (a)栈接口与实现--作业

-(c1)栈应用:进制转换

--04C1-1 应用

--04C1-2 算法

--04C1-3 实现

-第四章 栈与队列--(c1)栈应用:进制转换

-(c2)栈应用:括号匹配

--04C2-1 实例

--04C2-2 尝试

--04C2-3 构思

--04C2-4 实现

--04C2-5 反思

--04C2-6 拓展

-(c2)栈应用:括号匹配--作业

-(c3)栈应用:栈混洗

--04C3-1 混洗

--04C3-2 计数

--04C3-3 甄别

--04C3-4 算法

--04C3-5 括号

-第四章 栈与队列--(c3)栈应用:栈混洗

-(c4)栈应用:中缀表达式求值

--04C4-1 把玩

--04C4-2 构思

--04C4-3 实例

--04C4-4 算法框架

--04C4-5 算法细节

--04C4−6A 实例A

--04C4−6B 实例B

--04C4−6C 实例C

--04C4-6D 实例D

-(c4)栈应用:中缀表达式求值--作业

-(c5)栈应用:逆波兰表达式

--04C5-1 简化

--04C5-2 体验

--04C5-3 手工

--04C5-4 算法

-第四章 栈与队列--(c5)栈应用:逆波兰表达式

-(d)队列接口与实现

--04D-1 接口

--04D-2 实例

--04D-3 实现

-第四章 栈与队列--本章测验

第五章 二叉树

-(a)树

--05A-1 动机

--05A-2 应用

--05A-3 有根树

--05A-4 有序树

--05A-5 路径+环路

--05A-6 连通+无环

--05A-7 深度+层次

-(a)树--作业

-(b)树的表示

--05B-1 表示法

--05B-2 父亲

--05B-3 孩子

--05B-4 父亲+孩子

--05B-5 长子+兄弟

-第五章 二叉树--(b)树的表示

-(c)二叉树

--05C-1 二叉树

--05C-2 真二叉树

--05C-3 描述多叉树

-(c)二叉树--作业

-(d)二叉树实现

--05D-1 BinNode类

--05D-2 BinNode接口

--05D-3 BinTree类

--05D-4 高度更新

--05D-5 节点插入

-(d)二叉树实现--作业

-(e1)先序遍历

--05E1-1 转化策略

--05E1-2 遍历规则

--05E1-3 递归实现

--05E1-4 迭代实现(1)

--05E1-5 实例

--05E1-6 新思路

--05E1-7 新构思

--05E1-8 迭代实现(2)

--05E1-9 实例

-(e1)先序遍历--作业

-(e2)中序遍历

--05E2-1 递归

--05E2-2 观察

--05E2-3 思路

--05E2-4 构思

--05E2-5 实现

--05E2-6 实例

--05E2-7 分摊分析

-第五章 二叉树--(e2)中序遍历

-(e4)层次遍历

--05E4-1 次序

--05E4-2 实现

--05E4-3 实例

-第五章 二叉树--(e4)层次遍历

-(e5)重构

--05E5-1 遍历序列

--05E5-2 (先序|后序)+中序

--05E5-3 (先序+后序)x真

-(e5)重构--作业

-本章测验--作业

第六章 图

-(a)概述

--06A-1 邻接+关联

--06A-2 无向+有向

--06A-3 路径+环路

-(a)概述--作业

-(b1)邻接矩阵

--06B1-1 接口

--06B1-2 邻接矩阵+关联矩阵

--06B1-3 实例

--06B1-4 顶点和边

--06B1-5 邻接矩阵

--06B1-6 顶点静态操作

--06B1-7 边操作

--06B1-8 顶点动态操作

--06B1-9 综合评价

-(b1)邻接矩阵--作业

-(c)广度优先搜索

--06C-1 化繁为简

--06C-2 策略

--06C-3 实现

--06C-4 可能情况

--06C-5 实例

--06C-6 多连通

--06C-7 复杂度

--06C-8 最短路径

-(c)广度优先搜索--作业

-(d)深度优先搜索

--06D-1 算法

--06D-2 框架

--06D-3 细节

--06D-4 无向图

--06D-5 有向图

--06D-6 多可达域

--06D-7 嵌套引理

-(d)深度优先搜索--作业

-第六章 图--本章测验

06C-2 策略笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。