给出c语言的三维数组地址计算公式,要存放稀疏矩阵的元素.ppt

要存放稀疏矩阵的元素

* 但是在矩阵中非零元素呈某种规律分布或者矩阵中出现大量的零元素的情况下,看起来存储密度仍为1,但实际上占用了许多单元去存储重复的非零元素或零元素,这对高阶矩阵会造成极大的浪费,为了节省存储空间, 我们可以对这类矩阵进行压缩存储:即为多个相同的非零元素只分配一个存储空间;对零元素不分配空间。 * 所谓特殊矩阵是指非零元素或零元素的分布有一定规律的矩阵。下面我们讨论几种特殊矩阵的压缩存储。对称的两个元素可以共用一个存储单元,这样,原来n 阶方阵需 n2个存储单元,若采用压缩存储,仅需 n(n+1)/2个存贮单元,将近节约一半存贮单元,这就是实现压缩的好处。 对称矩阵中的元素关于主对角线对称,故只要存储矩阵中上三角或下三角中的元素,让每两个对称的元素共享一个存储空间,这样,能节约近一半的存储空间。(不失一般性:我们仅以行优先存放分两种方式讨论如下) * 由于对称矩阵关于主对角线对称,故我们只需存放主对角线及主对角线以下的元素。我们可以按行优先的次序将这些元素存放在一个向量sa[0..n(n+1)/2]中。为了便于访问对称矩阵A中的元素,我们必须在aij和sa[k]之间找一个对应关系。 * 对于对称矩阵,我们还可以按行优先的次序将主对角线及主对角线以上的元素存放在一个向量sa[0..n(n+1)/2]中。为了便于访问对称矩阵A中的元素,我们也必须在aij和sa[k]之间找一个对应关系。 * 所谓n阶上(或下)三角矩阵是指矩阵的下(或上)三角(不含对角线)中的数据元素均为常数c或0的n阶矩阵。 下三角矩阵的压缩存放与对称矩阵用下三角形式存放类似,但必须多一个存储单元存放上三角部分元素,使用的存储单元数目为n(n+1)/2+1。故可以将n?n的下三角矩阵压缩存放到只有n(n+1)/2+1个存储单元的向量中,假设仍按行优先存放,这时sa[k]与aij的对应关系为: * 所谓n阶上(或下)三角矩阵是指矩阵的下(或上)三角(不含对角线)中的数据元素均为常数c或0的n阶矩阵。 上三角矩阵的压缩存放与对称矩阵用上三角形式存放类似,但必须多一个存储单元存放上三角部分元素,使用的存储单元数目为n(n+1)/2+1。故可以将n?n的下三角矩阵压缩存放到只有n(n+1)/2+1个存储单元的向量中,假设仍按行优先存放,这时sa[k]与aij的对应关系为: * * 对于一个m?n的矩阵M,它的转置T是一个n?m的矩阵,且Tij=Mji,1≤i≤n,1≤j≤m。 * 若能在转置前求出矩阵M的每一列col(即T中每一行)的第一个非零元转置后在T.data中的正确位置cpot[col](1≤col≤M.nu),那么在对M.data的三元组依次作转置时,只要将三元组按列号col放置到T.data[pot[col]]中,之后将pot[col]内容加1,以指示第col列的下一个非零元的正确位置。为了求得位置向量pot,只要先求出A的每一列中非零元个数num[col],然后利用下面公式: 5.2 数组的顺序表示和实现 问题:请按行及按列优先顺序列出四维数组A[2*3*2*3]的所有元素在内存中的存储次序,开始结点为a0000 。 按行优先的顺序排列时,先变化右边的下标,也就是右到左依次变化,这个四维数组的排列是这样的: a0000 a0001 a0002 a0010 a0011 a0012 a0100 a0101 a0102 a0110 a0111 a0112 a0200 a0201 a0202 a0210 a0211 a0212 a1000 a1001 a1002 a1010 a1011 a1012 a1100 a1101 a1102 a1110 a1111 a1112 a1200 a1201 a1202 a1210 a1211 a1212 5.2 数组的顺序表示和实现 按列优先的顺序排列恰恰相反,变化最快的是左边的下标,然后向右变化,所以这个四维数组排列将是这样的: a0000 a1000 a0100 a1100 a0200 a1200 a0010 a1010 a0110 a1110 a0210 a1210 a0001 a1001 a0101 a1101 a0201 a1201 a0011 a1011 a0111 a1111 a0211 a1211 a0002 a1002 a0102 a1102 a0202 a1202 a0012 a1012 a0112 a1112 a0212 a0212 5.2 数组的顺序表示和实现 二维数组A的每一个元素是由6个字符组成的串,其行下标i=0,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值