用
目标
- 从边集读出邻接矩阵与邻接表,并检查有向、无向存储语义;
- 比较指定边查询、邻居枚举和全图扫描的时间与空间复杂度;
- 根据图的密度和高频操作选择矩阵、邻接表、边集数组或混合索引。
前置知识
建议先阅读6.2 图的存储结构,并能区分逻辑边数
环境、输入与预期输出
- 环境:任意现代浏览器;建议准备纸笔手写矩阵或邻接表。
- 输入:本页按源文件顺序整理的 10 道四选一选择题。
- 预期输出:一份独立作答记录,以及每道错题的复杂度依据或表示选择理由。
作答方法
- 先写清图的方向、权重和底层容器,再判断复杂度;
- 点击“提交答案”后核对答案与选项辨析;
- 做错的题点击“重新作答”,并补写被忽略的实现前提;
- 完成全部题目后再查看答案总览。
题型覆盖与边界
| 类型 | 本 Lab 的处理方式 |
|---|---|
| 正常情况 | 比较矩阵、动态数组邻接表和边集数组的常见操作 |
| 边界情况 | 单独考查零权边、无向边双向记录和有向图行列含义 |
| 易错情况 | 区分逻辑边与存储记录,并避免脱离容器类型背复杂度 |
选择题
答题进度已答 0/10正确 0
难度★★考点邻接矩阵、有向图、入度、出度标识
ch06-02-q02有向图包含边
查看提示
先数指向 1 的箭头,再数从 1 出发的箭头。
难度★★考点邻接表、无向图、逻辑边、邻接记录标识
ch06-02-q03一张不含自环的简单无向图有
难度★★考点邻接表、邻接矩阵、稀疏图、空间复杂度标识
ch06-02-q04有
难度★★考点邻接矩阵、相邻查询、邻居枚举、复杂度标识
ch06-02-q05对含
难度★★★考点邻接表、动态数组、相邻查询、复杂度标识
ch06-02-q06邻接表的每个顶点使用未排序动态数组保存出边,且没有额外索引。忽略取得表头的常数操作,最坏情况下判断指定边
查看提示
先写明“未排序动态数组、无额外索引”这个实现前提。
难度★★★考点邻接矩阵、邻接表、图遍历、复杂度标识
ch06-02-q07同一套“访问每个顶点并检查其全部邻居”的完整图遍历,使用邻接矩阵与邻接表时,时间复杂度通常分别为( )。
难度★★★考点带权图、邻接矩阵、零权边、optional标识
ch06-02-q08带权图允许权重为
难度★★考点边集数组、Kruskal、全边扫描、存储选型标识
ch06-02-q09下列任务最适合直接以边集数组作为主要输入表示的是( )。
难度★★★★考点邻接表、哈希索引、混合表示、工程选型标识
ch06-02-q10一个大规模稀疏社交图既要频繁枚举用户的好友,又要频繁判断两人是否直接相连。若可以用额外空间换查询速度,下列设计最合理的是( )。
查看提示
两类高频操作可以由主存储和辅助索引分别服务。
答案总览(建议完成全部题目后查看)
- 第 1 题:A
- 第 2 题:B
- 第 3 题:C
- 第 4 题:A
- 第 5 题:A
- 第 6 题:B
- 第 7 题:B
- 第 8 题:B
- 第 9 题:B
- 第 10 题:C
完成清单
思考题
- 为什么“邻接表查询边是
”必须附加哈希等实现前提? - 零权边存在时,怎样把“边是否存在”和“权重是多少”分开?
- 维护邻接表与哈希索引两个视图时,怎样避免更新不一致?
复盘
- 我是否先确认了图的方向和底层容器,再套复杂度?
- 我最容易把哪一种结构的优势误认为所有操作都快?
- 哪道题最能体现“图的规模与高频操作决定存储方式”?