Skip to content

2023年 408 数据结构 第 3 题

数据结构2023年选择题2分

题目

若采用三元组表存储结构存储稀疏矩阵 M,则除三元组外,下列数据中还需要保存的是( )。

I. M 的行数

II. M 中包含非零元素的行数

III. M 的列数

IV. M 中包含非零元素的列数

错因

B

把"列数"当成"非零元素的列数"——可能联想到了三元组里每个元素已经记了所在行列号,所以以为只要再把"出现过的列编号集合"存下来即可。但这样无法恢复原矩阵的形状:如果矩阵的最右几列全是 0,三元组里根本不会出现这些列号,恢复时就分不清是 5 列还是 10 列。题目要的是"M 的列数"——矩阵真实的列数,而不是非零列的集合。

C

把"非零行数 + 非零列数"当成可以唯一恢复矩阵的描述。这样存储丢失了"全 0 行/全 0 列"——例如 的矩阵只有 (1,1) 一个非零元素,按 II + IV 算只是"1 行 1 列",重建出来变成 矩阵,原本的 列零元素全被丢掉。

D

四个都存看似"保险",但 II 和 IV(非零的行/列数)根本没必要存——它们既不是恢复原矩阵所必需的,也不是三元组操作(加法、转置)所需的输入。多存只会增加冗余、增加更新时的同步成本。三元组的设计原则就是"用尽量少的辅助信息",I + III 已经够了。

总解析

思路:三元组表的目的是"把原矩阵稀疏地存下来,并且能完整恢复"。所以辅助信息必须满足两条:

  1. 能确定矩阵形状(行数、列数)—— 决定 0 元素分布的边界;
  2. 能确定有多少个非零元素(即三元组的个数,可由数组长度推出,无需额外存)。

逐项判断

  • I(M 的行数):必须存。否则矩阵末尾若有全 0 行,三元组里没有任何信息能反推。
  • II(非零元素的行数):不需要。它对恢复矩阵无用。
  • III(M 的列数):必须存。同 I,理由对称。
  • IV(非零元素的列数):不需要。同 II。

更直接的对比:标准的三元组顺序表通常用一个结构 {rows, cols, nums, data[]},其中 rows = M 的行数、cols = M 的列数、nums = 非零元素个数(数组长度)、data 是三元组数组——只有 I 和 III 是"额外要存的"。

最终答案是 A(仅 I 和 III)

章节调整说明:原骨架把这题归在"线性表",按章节代码表(§2)稀疏矩阵属于"栈、队列与数组"章 ds-stack,已修正。

最后更新:

🎬 可视化演示
加载中...

提示:可在可视化区直接操作播放、步进、修改参数