假设一个9阶的上三角矩阵a按列优先顺序存储
时间: 2023-12-21 07:02:17 浏览: 332
上三角矩阵是指除了对角线及对角线以下的元素都为零的矩阵。按列优先顺序存储是指将矩阵按列的顺序依次存储在一维数组中。
假设一个9阶的上三角矩阵a按列优先顺序存储,那么存储的一维数组大小为n*(n+1)/2,即(9*(9+1))/2 =45/2=22.5,向上取整为23。
对于9阶的上三角矩阵a,其实际上只需要存储上三角部分的元素,而下三角部分的元素都为零,因此可以按照列优先顺序将上三角部分的非零元素依次存储在一维数组中。
如果矩阵a的上三角部分元素为:
1 2 3
0 4 5
0 0 6
那么按列优先顺序存储的一维数组为:1 2 3 4 5 6。
通过按列优先顺序存储,可以对上三角矩阵进行更加高效的存储和处理,减少不必要的存储空间和计算时间。
相关问题
假设一个N*N的矩阵从a11开始编号,对于一个上三角矩阵按行优先方式进行存储,请写出压缩存储公式的推导过程,拍照上传。
抱歉,我是一名语言模型,无法进行拍照上传。以下是压缩存储公式的推导过程:
由于上三角矩阵是从上往下,从左往右逐个填充的,因此只有矩阵上三角部分有数据,下三角部分均为0。
设矩阵元素为a[i][j],其中i<=j,且按行优先方式存储。压缩存储后的数组为b[k],其中k是按照存储顺序得到的数组下标,满足以下公式:
k = (i-1)*N - (i-2)*(i-1)/2 + j-i
推导过程:
1.对于第一行元素a[1][j](1<=j<=N),没有任何元素需要跳过,因此有:
k = (1-1)*N - (1-2)*(1-1)/2 + j-1 = j
2.对于第二行元素a[2][j](2<=j<=N),需要跳过第一行的元素a[1][1]~a[1][j-1],因此有:
k = (2-1)*N - (2-2)*(2-1)/2 + j-2 = N + j-1
3.对于第三行元素a[3][j](3<=j<=N),需要跳过前两行的元素a[1][1]~a[1][N]和a[2][2]~a[2][j-1],因此有:
k = (3-1)*N - (3-2)*(3-1)/2 + j-3 = 2*N - 1 + j-2
4.对于第四行元素a[4][j](4<=j<=N),需要跳过前三行的元素a[1][1]~a[1][N]、a[2][2]~a[2][N]和a[3][3]~a[3][j-1],因此有:
k = (4-1)*N - (4-2)*(4-1)/2 + j-4 = 3*N - 3 + j-3
综上所述,对于一般的矩阵元素a[i][j],压缩存储的数组下标k可由以下公式得到:
k = (i-1)*N - (i-2)*(i-1)/2 + j-i
-03-24 20:13发布 假设一个N*N的矩阵从a11开始编号,对于一个上三角矩阵按行优先方式进行存储,请写出压缩存储公式的推导过程
假设矩阵为:
$$A=\begin{pmatrix}
a_{11} & a_{12} & \cdots & a_{1n}\\
0 & a_{22} & \cdots & a_{2n}\\
\vdots&\vdots&\ddots&\vdots\\
0&0&\cdots&a_{nn}
\end{pmatrix}$$
对于上三角矩阵,下三角部分都是0,可以将它们省略掉,用一维数组存储矩阵中所有非零元素。可以发现,非零元素有$n+(n-1)+\cdots+2+1=\frac{n(n+1)}{2}$个,因此数组大小为$\frac{n(n+1)}{2}$。
按行优先存储,则将第一行中的元素按顺序存储,再将第二行中除去第一个元素的其他元素按顺序存储,依次类推。也就是存储顺序是:
$a_{11},a_{12},\cdots,a_{1n},a_{22},\cdots,a_{2n},\cdots,a_{nn}$
压缩存储的公式推导如下:
设压缩存储后的一维数组为$B$,$A_{i,j}$表示矩阵中第$i$行,第$j$列元素的值,$B_k$表示第$k$个非零元素的值,$n$为矩阵的阶数,则有:
$$k = \frac{i(i-1)}{2}+j$$
此式的推导可以从$i=1,j=1$开始,对矩阵中每一个非零元素进行编号,得到矩阵中任意一个非零元素的编号$k$。
因为按行优先存储,所以矩阵中第$i$行前面共有$i-1$行,每行有$i-1$个元素,因此前面共有$\sum_{m=1}^{i-1}m=\frac{i(i-1)}{2}$个元素。加上第$j$列,就是矩阵中第$i$行第$j$列元素的位置。
根据以上推导,可以得到压缩存储公式:
$$B_k = A_{i,j} = A_{\lfloor\frac{-1+\sqrt{8k+1}}{2}\rfloor+1,k-\frac{\lfloor\frac{-1+\sqrt{8k+1}}{2}\rfloor(\lfloor\frac{-1+\sqrt{8k+1}}{2}\rfloor+1)/2}+1}$$
其中,$\lfloor x\rfloor$表示不大于$x$的最大整数。此公式可以将一维数组中的第$k$个元素还原成矩阵中的元素。
阅读全文