数组基本概念数组存储结构特殊矩阵压缩存储.ppt

上传人:本田雅阁 文档编号:3187135 上传时间:2019-07-23 格式:PPT 页数:42 大小:401.01KB
返回 下载 相关 举报
数组基本概念数组存储结构特殊矩阵压缩存储.ppt_第1页
第1页 / 共42页
数组基本概念数组存储结构特殊矩阵压缩存储.ppt_第2页
第2页 / 共42页
数组基本概念数组存储结构特殊矩阵压缩存储.ppt_第3页
第3页 / 共42页
数组基本概念数组存储结构特殊矩阵压缩存储.ppt_第4页
第4页 / 共42页
数组基本概念数组存储结构特殊矩阵压缩存储.ppt_第5页
第5页 / 共42页
点击查看更多>>
资源描述

《数组基本概念数组存储结构特殊矩阵压缩存储.ppt》由会员分享,可在线阅读,更多相关《数组基本概念数组存储结构特殊矩阵压缩存储.ppt(42页珍藏版)》请在三一文库上搜索。

1、数组的基本概念 数组的存储结构 特殊矩阵的压缩存储,第五章 数组和特殊矩阵,数组的基本概念(P65),数组的定义 数组是由一组类型相同的数据元素构成的有序集合,每个数据元素称为一个数组元素(简称为元素),每个元素受n(n1)个线性关系的约束,每个元素在n个线性关系中的序号i1、i2、in称为该元素的下标,并称该数组为 n 维数组。 数组的特点 元素本身可以具有某种结构,属于同一数据类型; 数组是一个具有固定格式和数量的数据集合。,a11 a12 a1n a21 a22 a2n am1 am2 amn,A=,数组线性表的推广,二维数组是数据元素为线性表的线性表。,数组的基本概念,设一维数组的下标

2、的范围为闭区间l,h,每个数组元素占用 c 个存储单元,则其任一元素 ai 的存储地址可由下式确定: Loc(ai)Loc(al)(il)c,数组的存储结构一维数组(P66),常用的映射方法有两种: 按行优先:先行后列,先存储行号较小的元素,行号相同者先存储列号较小的元素。 按列优先:先列后行,先存储列号较小的元素,列号相同者先存储行号较小的元素。,数组的存储结构二维数组,特殊矩阵的压缩存储,特殊矩阵:包括对称矩阵、三角矩阵、对角矩阵和稀疏矩阵等。 稀疏矩阵:矩阵中有很多零元素。 压缩存储的基本思想是: 为多个值相同的元素只分配一个存储空间; 对零元素不分配存储空间。,3 6 4 7 8 6

3、2 8 4 2 4 8 1 6 9 7 4 6 0 5 8 2 9 5 7,A,对称矩阵特点:aij=aji,如何压缩存储?,只存储下三角部分的元素。,特殊矩阵的压缩存储对称阵,对于下三角中的元素aij(ij),在数组SA中的下标k与i、j的关系为:ki(i1)/2j 。 上三角中的元素aij(ij),因为aijaji,则访问和它对应的元素aji即可,即:kj(j1)/2i 。,特殊矩阵的压缩存储对称阵,3 c c c c 6 2 c c c 4 8 1 c c 7 4 6 0 c 8 2 9 5 7,(a) 下三角矩阵,3 4 8 1 0 c 2 9 4 6 c c 5 7 c c c 0

4、8 c c c c 7,(b) 上三角矩阵,如何压缩存储?,只存储上三角(或下三角)部分的元素。,特殊矩阵的压缩存储三角阵,矩阵中任一元素aij在数组中的下标k与i、j的对应关系:,特殊矩阵的压缩存储三角阵,矩阵中任一元素aij在数组中的下标k与i、j的对应关系:,特殊矩阵的压缩存储三角阵,对角矩阵:所有非零元素都集中在以主对角线为中心的带状区域中,除了主对角线和它的上下方若干条对角线的元素外,所有其他元素都为零。,a00 a01 0 0 0 a10 a11 a12 0 0 0 a21 a22 a23 0 0 0 a32 a33 a34 0 0 0 a43 a44,A=,特殊矩阵的压缩存储对角

5、矩阵,将带状区 域立起来,特殊矩阵的压缩存储对角矩阵,按行 存储,元素aij在一维数组中的序号 =2 + 3(i1)+( ji + 2) =2i+ j+1 一维数组下标从0开始 元素aij在一维数组中的下标 =2i+ j,(b) 寻址的计算方法,特殊矩阵的压缩存储对角矩阵,如何只存储非零元素?,注意:稀疏矩阵中的非零元素的分布没有规律。,特殊矩阵的压缩存储稀疏矩阵,(1)三元组顺序表(P69) 将稀疏矩阵中的每个非零元素表示为:(行号,列号,非零元素值)三元组 (2)十字链表(P72) 采用链接存储结构存储三元组表,每个非零元素对应的三元组存储为一个链表结点,结构为:,稀疏矩阵的压缩存储,例:

6、,三元组顺序表操作转置操作,0 0 15 0 3 22 0 5 -15 1 1 11 1 2 3 2 3 6 4 0 91 空 空 空 闲 闲 闲,row col item,0 1 2 3 4 5 6,MaxTerm-1,5(矩阵的行数),三元组顺序表操作转置操作,三元组顺序表操作转置算法1,基本思想:在A的三元组顺序表中依次找第0列、第1列、直到最后一列的三元组,并将找到的每个三元组的行、列交换后顺序存储到B的三元组顺序表中。,三元组顺序表操作转置算法1,0 0 15 0 3 22 0 5 -15 1 1 11 1 2 3 2 3 6 4 0 91 空 空 空 闲 闲 闲,row col i

7、tem,0 1 2 3 4 5 6,MaxTerm-1,5(矩阵的行数),row col item,0 1 2 3 4 5 6,MaxTerm-1,6(矩阵的行数),在矩阵A中查找第0列非零元,顺序存储到矩阵B中,0 0 15 0 3 22 0 5 -15 1 1 11 1 2 3 2 3 6 4 0 91 空 空 空 闲 闲 闲,row col item,0 1 2 3 4 5 6,MaxTerm-1,5(矩阵的行数),row col item,0 1 2 3 4 5 6,MaxTerm-1,6(矩阵的行数),在矩阵A中查找第1列非零元,顺序存储到矩阵B中,0 0 15 0 3 22 0 5

8、 -15 1 1 11 1 2 3 2 3 6 4 0 91 空 空 空 闲 闲 闲,row col item,0 1 2 3 4 5 6,MaxTerm-1,5(矩阵的行数),row col item,0 1 2 3 4 5 6,MaxTerm-1,6(矩阵的行数),在矩阵A中查找第2列非零元,顺序存储到矩阵B中,0 0 15 0 3 22 0 5 -15 1 1 11 1 2 3 2 3 6 4 0 91 空 空 空 闲 闲 闲,row col item,0 1 2 3 4 5 6,MaxTerm-1,5(矩阵的行数),row col item,0 1 2 3 4 5 6,MaxTerm-

9、1,6(矩阵的行数),在矩阵A中查找第3列非零元,顺序存储到矩阵B中,0 0 15 0 3 22 0 5 -15 1 1 11 1 2 3 2 3 6 4 0 91 空 空 空 闲 闲 闲,row col item,0 1 2 3 4 5 6,MaxTerm-1,5(矩阵的行数),row col item,0 1 2 3 4 5 6,MaxTerm-1,6(矩阵的行数),在矩阵A中查找第4列非零元,顺序存储到矩阵B中,0 0 15 0 3 22 0 5 -15 1 1 11 1 2 3 2 3 6 4 0 91 空 空 空 闲 闲 闲,row col item,0 1 2 3 4 5 6,Ma

10、xTerm-1,5(矩阵的行数),row col item,0 1 2 3 4 5 6,MaxTerm-1,6(矩阵的行数),在矩阵A中查找第5列非零元,顺序存储到矩阵B中,0 0 15 0 3 22 0 5 -15 1 1 11 1 2 3 2 3 6 4 0 91 空 空 空 闲 闲 闲,row col item,0 1 2 3 4 5 6,MaxTerm-1,5(矩阵的行数),row col item,0 1 2 3 4 5 6,MaxTerm-1,6(矩阵的行数),在矩阵A中查找第6列非零元,顺序存储到矩阵B中,1. 设置转置后矩阵B的行数、列数和非零元个数; 2. 在B中设置初始存储

11、位置q; 3. for (col=最小列号; col=最大列号; col+) 3.1 在A中查找列号为col的三元组; 3.2 交换其行号和列号,存入B中q位置; 3.3 q+;,三元组顺序表操作转置算法1,三元组顺序表操作转置算法1,该算法的主要时间耗费是在col和p的两重循环上。 对于一个m行n列且非零元素个数为t的稀疏矩阵而言,该算法的时间复杂度为O(tn)。 最坏情况是,当稀疏矩阵中的非零元素个数t与mn同数量级时,上述算法的时间复杂度就为O(mn2)。 显然这种情况下,该朴素算法效率较低。,分析:A中第0列的第一个非零元素一定存储在B中下标为0的位置上,该列中其它非零元素应存放在B中

12、后面连续的位置上,那么第1列的第一个非零元素在B中的位置便等于第0列的第一个非零元素在B中的位置加上第0列的非零元素的个数,以此类推。,基本思想:顺序取,直接存。即在A中依次取三元组,交换其行号和列号放到B 中适当位置。,如何确定当前从A中取出的三元组在B中的位置?,三元组顺序表操作转置算法2,第0列第1个非零元素,第0列有2个非零元素,第1列第1个非零元素,三元组顺序表操作转置算法2,引入两个数组作为辅助数据结构: cnumcols:存储矩阵A中某列的非零元素的个数; cpotclos:初值表示矩阵A中某列的第一个非零元素在B中的位置。,数据结构设计:,cnum与cpot存在如下递推关系:,

13、三元组顺序表操作转置算法2,根据矩阵A计算cnum和cpot,0 0 15 0 3 22 0 5 -15 1 1 11 1 2 3 2 3 6 4 0 91 空 空 空 闲 闲 闲,row col item,0 1 2 3 4 5 6,5(矩阵的行数),将矩阵A中col列元素存放在B中下标为cpotcol的位置,row col item,0 1 2 3 4 5 6,6(矩阵的行数),cpot1,cpot2,cpot3,cpot4 cpot5,0 0 15 0 3 22 0 5 -15 1 1 11 1 2 3 2 3 6 4 0 91 空 空 空 闲 闲 闲,row col item,0 1

14、2 3 4 5 6,5(矩阵的行数),将矩阵A中col列元素存放在B中下标为cpotcol的位置,row col item,0 1 2 3 4 5 6,6(矩阵的行数),cpot1,cpot2,cpot4 cpot5,0 0 15 0 3 22 0 5 -15 1 1 11 1 2 3 2 3 6 4 0 91 空 空 空 闲 闲 闲,row col item,0 1 2 3 4 5 6,5(矩阵的行数),将矩阵A中col列元素存放在B中下标为cpotcol的位置,row col item,0 1 2 3 4 5 6,6(矩阵的行数),cpot1,cpot2,cpot4,cpot5,0 0 1

15、5 0 3 22 0 5 -15 1 1 11 1 2 3 2 3 6 4 0 91 空 空 空 闲 闲 闲,row col item,0 1 2 3 4 5 6,5(矩阵的行数),将矩阵A中col列元素存放在B中下标为cpotcol的位置,row col item,0 1 2 3 4 5 6,6(矩阵的行数),cpot2,cpot4,cpot1,0 0 15 0 3 22 0 5 -15 1 1 11 1 2 3 2 3 6 4 0 91 空 空 空 闲 闲 闲,row col item,0 1 2 3 4 5 6,5(矩阵的行数),将矩阵A中col列元素存放在B中下标为cpotcol的位置

16、,row col item,0 1 2 3 4 5 6,6(矩阵的行数),cpot2,cpot4,cpot1,cpot1,0 0 15 0 3 22 0 5 -15 1 1 11 1 2 3 2 3 6 4 0 91 空 空 空 闲 闲 闲,row col item,0 1 2 3 4 5 6,5(矩阵的行数),将矩阵A中col列元素存放在B中下标为cpotcol的位置,row col item,0 1 2 3 4 5 6,6(矩阵的行数),cpot4,cpot1,cpot3,0 0 15 0 3 22 0 5 -15 1 1 11 1 2 3 2 3 6 4 0 91 空 空 空 闲 闲 闲

17、,row col item,0 1 2 3 4 5 6,5(矩阵的行数),将矩阵A中col列元素存放在B中下标为cpotcol的位置,row col item,0 1 2 3 4 5 6,6(矩阵的行数),cpot4,cpot1,cpot3,1. 设置转置后矩阵B的行数、列数和非零元素的个数; 2. 计算A中每一列的非零元素个数; 3. 计算A中每一列的第一个非零元素在B中的下标; 4. 依次取A中的每一个非零元素对应的三元组; 4.1 确定该元素在B中的下标q; 4.2 将该元素的行号列号交换后存入B中q的位置; 4.3 预置该元素所在列的下一个元素的存放位置;,三元组顺序表操作转置算法2,三元组顺序表操作转置算法2,该算法中有4个平行的for循环。 对于一个m行n列且非零元素个数为t的稀疏矩阵而言,循环次数分别为n和t两种,故此算法时间复杂度为O(n+t)。 显然该算法优于转置算法1。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1