ImageVerifierCode 换一换
格式:PPT , 页数:43 ,大小:278KB ,
资源ID:351983      下载积分:20 文钱
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,省得不是一点点
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.wenke99.com/d-351983.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(一维数组多维数组特殊矩阵的压缩存储稀疏矩阵广义表.PPT)为本站会员(国***)主动上传,文客久久仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知文客久久(发送邮件至hr@wenke99.com或直接QQ联系客服),我们立即给予删除!

一维数组多维数组特殊矩阵的压缩存储稀疏矩阵广义表.PPT

1、一维数组多维数组特殊矩阵的压缩存储 稀疏矩阵广义表,第五章 数组与广义表,一维数组,定义 相同类型的数据元素的集合。一维数组的示例与顺序表的不同在于数组可以按元素的下标直接存储和访问数组元素。,35 27 49 18 60 54 77 83 41 02,0 1 2 3 4 5 6 7 8 9,数组的定义和初始化,main ( ) int a13 = 3, 5, 7 , *elem; for ( int i = 0; i 3; i+ ) printf ( “%d”, a1i, “n” ); /静态数组 elem = a1; for ( int i = 0; i 3; i+ ) printf (

2、“%d”, *elem, “n” ); /动态数组 elem+; ,数组溢出的处理,一维数组的问题在于:如果其空间大小已经分配,一旦空间占满,再加入新元素将产生溢出。已知一维数组的大小为 MaxSize,其定义和分配如下: typedef int ElemType; ElemType *data = new ElemTypeMaxSize;现已产生溢出,那么处理溢出的方法为:,const int NewSize = 100;ElemType * newArray = new ElemTypeNewSize; if ( newArray = NULL ) printf (“存储分配错!n” );

3、 exit (1); int n = ( NewSize = MaxSize ) ? NewSize : MaxSize;ElemType *srcptr = data;ElemType *destptr = newArray;while ( n- ) *destptr+ = *srcptr+;free (data);data = newArray;,多维数组,多维数组是一维数组的推广多维数组是一种非线性结构。其特点是每一个数据元素可以有多个直接前驱和多个直接后继。数组元素的下标一般具有固定的下界和上界,因此它比其他复杂的非线性结构简单。,二维数组 三维数组,行向量 下标 i 页向量 下标 i

4、列向量 下标 j 行向量 下标 j 列向量 下标 k,二维数组,行优先存放: 设数组开始存放位置 LOC( a00 ) = a, 每个元素占用 l 个存储单元 LOC( ajk ) = a + ( j * m + k ) * l,列优先存放: 设数组开始存放位置 LOC( a00 ) = a, 每个元素占用 l 个存储单元 LOC( ajk ) = a + ( k * n + j ) * l,三维数组,各维元素个数为 m1, m2, m3 下标为 i1, i2, i3的数组元素的存储地址: (按页/行/列存放),LOC ( ai1i2i3 ) = a + ( i1* m2 * m3 + i2*

5、 m3 + i3 ) * l,前 i1 页总元素个数,第 i1 页的前 i2 行总元素个数,第 i2 行前 i3 列元素个数,n 维数组,各维元素个数为 m1, m2, m3, , mn 下标为 i1, i2, i3, , in 的数组元素的存储地址:,LOC ( ai1i2 , in ) = a + ( i1*m2*m3*mn + i2*m3*m4*mn+ + + in-1*mn + in ) * l,特殊矩阵的压缩存储,特殊矩阵是指非零元素或零元素的分布有一定规律的矩阵。特殊矩阵的压缩存储主要是针对阶数很高的特殊矩阵。为节省存储空间,对可以不存储的元素,如零元素或对称元素,不再存储。对称矩

6、阵三对角矩阵,对称矩阵的压缩存储,设有一个 nn 的对称矩阵 A。,在矩阵中,aij = aji,为节约存储,只存对角线及对角线以上的元素,或者只存对角线或对角线以下的元素。前者称为上三角矩阵,后者称为下三角矩阵。,下三角矩阵,上三角矩阵,把它们按行存放于一个一维数组 B 中,称之为对称矩阵 A 的压缩存储方式。数组 B 共有 n + ( n - 1 ) + + 1 = n*(n+1)/2 个元素。,下三角矩阵,B a00 a10 a11 a20 a21 a22 a30 a31 a32 an-1n-1,0 1 2 3 4 5 6 7 8 n(n+1)/2-1,若 i j, 数组元素Aij在数组

7、B中的存放位置为 1 + 2 + + i + j = (i + 1)* i / 2 + j,前i行元素总数 第i行第j个元素前元素个数,若 i j,数组元素 Aij 在矩阵的上三角部分, 在数组 B 中没有存放,可以找它的对称元素Aji:= j *(j +1) / 2 + i 若已知某矩阵元素位于数组 B 的第 k个位置,可寻找满足 i (i + 1) / 2 k (i + 1)*(i + 2) / 2的 i, 此即为该元素的行号。 j = k - i * (i + 1) / 2此即为该元素的列号。 例,当 k = 8, 3*4 / 2 = 6 k j,数组元素Aij在矩阵的下三角部分,在数组

8、 B 中没有存放。因此,找它的对称元素Aji。 Aji在数组 B 的第 (2*n-j-1) * j / 2 + i 的位置中找到。,三对角矩阵的压缩存储,B a00 a01 a10 a11 a12 a21 a22 a23 an-1n-2 an-1n-1,0 1 2 3 4 5 6 7 8 9 10,三对角矩阵中除主对角线及在主对角线上 下最临近的两条对角线上的元素外,所有其它元素均为0。总共有3n-2个非零元素。将三对角矩阵A中三条对角线上的元素按行存放在一维数组 B 中,且a00存放于B0。在三条对角线上的元素aij 满足 0 i n-1, i-1 j i+1在一维数组 B 中 Aij 在第

9、 i 行,它前面有 3*i-1 个非零元素, 在本行中第 j 列前面有 j-i+1 个,所以元素 Aij 在 B 中位置为 k = 2*i + j。,若已知三对角矩阵中某元素 Aij 在数组 B 存放于第 k 个位置,则有 i = (k + 1) / 3 j = k - 2 * i例如,当 k = 8 时, i = (8+1) / 3 = 3, j = 8 - 2*3 = 2 当 k = 10 时, i = (10+1) / 3 = 3, j = 10 - 2*3 = 4,行数 m = 6, 列数 n = 7, 非零元素个数 t = 8,稀疏矩阵 (Sparse Matrix),稀疏矩阵的定义

10、,设矩阵 Amn 中有 t 个非零元素,若 t 远远小于矩阵元素的总数 mn,则称矩阵A 为稀疏矩阵。为节省存储空间,应只存储非零元素。非零元素的分布一般没有规律,应在存储非零元素时,同时存储该非零元素的行下标 row、列下标 col、值 value。每一个非零元素由一个三元组唯一确定: ( 行号 row, 列号 col, 值 value ),#define MaxSize 100; /由用户定义typedef int MatrixData; /由用户定义typedef struct /三元组定义 int row, col; /非零元素行号, 列号 MatrixData value; /非零元

11、素的值 Triple;typedef struct Triple dataMaxSize; /三元组表 int m, n, t; /行/列/非零元素数 TSMatrix;,稀疏矩阵(SparseMatrix)的结构定义,稀疏矩阵的转置,一个 mn 的矩阵 A,它的转置矩阵 B 是一个 nm 的矩阵,且 Aij = Bji。即矩阵 A 的行成为矩阵 B 的列,矩阵 A 的列成为矩阵 B 的行。在稀疏矩阵的三元组表中,非零矩阵元素按行存放。当行号相同时,按列号递增的顺序存放。稀疏矩阵的转置运算要转化为对应三元组表的转置。,稀疏矩阵,转置矩阵,用三元组表表示的稀疏矩阵及其转置,稀疏矩阵转置算法,设矩

12、阵列数为 n,对矩阵三元组表扫描 n 次。第 k 次检测列号为 k 的项。第 k 次扫描找寻所有列号为 k 的项,将其行号变列号、列号变行号,顺次存于转置矩阵三元组表。void Trans ( TSMatrix *A, TSMatrix *B) B-m = A-n; B-n = A-m; B-t = A-t; /转置矩阵的列数,行数和非零元素个数,if ( A-t 0 ) int s = 0; /转置三元组表存放指针 for ( int k = 0; k n; k+ ) for ( int i = 0; i t; i+ ) if ( A-datai.col = k ) B-datas.row

13、= k; B-datas.col = A-datai.row; B-datas.value = A-datai.value; s+; ,快速转置算法,设矩阵三元组表总共有 t 项,上述算法的时间代价为 O ( n* t )。若矩阵有 200 行,200 列,10,000 个非零元素,总共有 2,000,000 次处理。为加速转置速度,建立辅助数组 num 和 cpot,记录矩阵转置后各行非零元素个数和各行元素在转置三元组表中开始存放位置。扫描矩阵三元组表,根据某项列号,确定它转置后的行号, 查 cpot 表, 按查到的位置直接将该项存入转置三元组表中,for ( int i = 0; i n;

14、 i+ ) numi = 0; for ( i = 0; i t; i+ ) numA-datai.col+; cpot0 = 0; for ( i = 1; i n; i+ ) cpoti = cpoti-1+numi-1;,稀疏矩阵的快速转置void FastTrans ( TSMatrix *A, TSMatrix *B ) int *num = new intA-n; int *cpot = new intA-n; B-m = A-n; B-n = A-m; B-t = A-t; if ( A-t 0 ) for (int i = 0; i n; i+) numi = 0; for (

15、 i = 0; i t; i+ ) numA-datai.col+; cpot0 = 0; for ( i = 1; i n; i+ ) cpoti = cpoti-1+numi-1;,for ( i = 0; i t; i+ ) int j = cpotA-datai.col; B-dataj.row = A-datai.col; B-dataj.col = A-datai.row; B-dataj.value = A-datai.value; cpotA-datai.col+; delete num; delete cpot;,带行指针数组的二元组表,转置时间代价为 O(max(A-t,

16、A-n) )。若矩阵有 200 列,10000 个非零元素,总共需要10000 次处理。,稀疏矩阵的三元组表可以用带行指针数组的二元组表代替。稀疏矩阵有多少行,在行指针数组中就有多少个元素:第 i 个元素的数组下标 i代表矩阵的第 i 行,元素的内容即为稀疏矩阵第 i 行的第一个非零元素在二元组表中的存放位置。,二元组表中每个二元组只记录非零元素的列号和元素值,且各二元组按行号递增的顺序排列。,广义表 (General Lists ),广义表的概念 广义表是n ( 0 )个表元素的有限序列,记作 LS (a0, a1, a2, , an-1) LS是表名, ai 是表元素, 它可以是表 (称为

17、子表),可以是数据元素 (称为原子)。n为表的长度。n = 0 的广义表为空表。n 0时, 表的第一个表元素称为广义表的表头 (head), 除此之外, 其它表元素组成的表称为广义表的表尾 (tail)。,广义表的特性,有次序性有长度,A( )B( u, v ) head(B) = u, tail(B) =(v)C( a, ( x, y, z ) ) head(C) = aD( B, C, A ) tail(C) = ( ( x, y, z ) )E( B, D )F( d, F ),有深度可共享,可递归,A,B,C,u v,D,空表,线性表,再入表,纯表,F,递归表,d,广义表的头尾表示,当

18、结点标志tag = 1时,该结点为表结点 hp为指示表头元素结点的指针 tp为指示表尾 (为广义表) 结点的指针当结点标志tag = 0时,该结点为原子结点 atom存放原子结点的值,tag=1 hp tp,tag=0 atom,表结点 原子结点,A,1,B,F,1,1,0 d,E,B,D,1,1,1,C,1,D,1,1,1,NULL,0 a,1,1,1,0 x,0 y,0 z,1,0 u,0 v,广义表的层次表示,当结点标志tag = 1时,该结点为表结点 hp为指示表头元素结点的指针 tp为指示同一层下一结点的指针当结点标志tag = 0时,该结点为原子结点 atom存放原子结点的值 tp为指示同一层下一结点的指针,tag=1 hp tp,tag=0 atom tp,表结点 原子结点,A,0 z,1,C,0 a,1,0 x,0 y,1,

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。