[问题]
将一个 m×n 的矩阵 X 转置后存放到矩阵 Y 中,其计算复杂度为 O(m*n)。对稀疏矩阵来说,可以用紧凑的存贮方式来减少所需的存贮量,并降低计算复杂度。
已知有 t(t>0) 个非零元素的 m×n 稀疏矩阵 W(每行每列至少有一个非零元素)以紧凑方式存放在数组 X[l:t,1:3]中。X 中某行的三个值为(i,j,v)时表示在 W 的第 i 行第 j 列有一个非零元素 v。假定 X 中的元素已按行号列号递增排序。现要求将 X 转置后以紧凑表示形式存放在数组 Y[l:t,1:3] 中,并且 Y 也按行号列号递增排序。
下面描述了两种紧凑的稀疏矩阵的转置算法:
算法一见流程图a
算法二见流程图b。争扣外图中:数组元素 S[i] 用来存放X中列号为 i 的元素个数,数组元素 U[j] 用来计算X中第 j 列元素在Y中的行号。
[问题1]
填充流程图 a 和流程图 b 中的 ①~⑤,使之实现相应的算法。
[问题2]
分别写出算法一和算法二的计算复杂度。
答案:
[问题1]
① k+1→k ② X[j,2] ③ U[X[i,2]] ④ U[X[i,2]] ⑤ i>t
[问题2] 算法1的复杂度为 O(n*t);算法2的复杂度为 O(n+t)