1
0
mirror of https://github.com/Didnelpsun/CS408.git synced 2026-02-06 04:14:28 +08:00
Files
CS408/Data-Structrue/4-array-ex.md
Didnelpsun df294ac476 更新
2022-08-02 23:26:51 +08:00

52 lines
2.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 数组习题
## 三对角矩阵
**例题** 有一个$100$阶的三对角矩阵$M$,其元素$m_{i,j}$$1\leqslant i,j\leqslant100$)按行优先依次压缩存入下标从$0$开始的一维数组$N$中。元素$m_{30,30}$在$N$中的下标是()。
$A.86$
$B.87$
$C.88$
$D.89$
解:$B$。根据公式$k=2i+j-3$。但是这种公式很难记忆,所以直接找规律。观察三对角矩阵不难发现,第一行有两个元素,剩下的在元素$m_{30,30}$所在行之前的$28$行中,每行都有$3$个元素,而$m_{30,30}$之前仅有一个元素$m_{30,29}$,不难发现元素$m_{30,30}$在数组$N$中的下标是$2+28\times3+2-1=87$。
**例题** 若将$n$阶上三角矩阵$A$按列优先级压缩存放在一维数组$B[1\cdots n(n+1)/2+1]$中,则存放到$B[k]$中的非零元素$a_{i,j}$1\leqslant i,j\leqslant n$)的下标$i$、$j$与$k$的对应关系是()。
$A.i(i+1)/2+j$
$B.i(i-1)/2+j-1$
$C.j(j-1)/2+i$
$D.j(j-1)/2+i-1$
解:$C$。按列优先存储,故元素$a$,前面有$j-1$列,共有$1+2+3+\cdots+j-1=j(j-1)/2$个元素,元素$a_{i,j}$在第$j$列上是第$i$个元素,数组$B$的下标是从$1$开始,因此$k=j(j-1)/2+i$。
**例题** 若将$n$阶下三角矩阵$A$按列优先顺序压缩存放在一维数组$B[1\cdots n(n+1)/2+1]$中,则存放到$B[k]$中的非零元素$a_{i,j}$$1\leqslant i,j\leqslant n$)的下标$i,j$与$k$的对应关系是()。
$A.(j-1)(2n-j+1)/2+i-j$
$B.(j-1)(2n-j+2)/2+i-j+1$
$C.(j-1)(2n-j+2)/2+i-j$
$D.(j-1)(2n-j+1)/2+i-j-1$
解:$B$。按列优先存储,故元素$a_{i,j}$之前有$j-1$列,共有$n+(n-1)+\cdots+(n-j+2)=(j-1)(2n-j+2)/2$个元素,元素$a_{i,j}$是第$j$列上第$i-j+1$个元素,数组$B$下标从$1$开始,$k=(j-1)(2n-j+2)/2+i-j+1$。
**例题** 设有一个$12\times12$的对称矩阵$M$,将其上三角部分的元素$m_{i,j}$$1\leqslant i\leqslant j\leqslant12$)按行优先存入$C$语言的一维数组$N$中,元素$m_{7,2}$在$N$中的下标是()。
$A.50$
$B.51$
$C.55$
$D.66$
解:$A$。在$C$语言中,数组$N$的下标从$0$开始。第一个元素$m_{1,1}$对应存入$n_0$,矩阵$M$的第一行有$12$个元素,第二行有$11$个,第三行有$10$个,第四行有$9$个,第五行有$8$个,所以$m_{6,6}$。是第$12+11+10+9+8+1=51$个元素,下标应为$50$。