矩阵的压缩存储
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
二、稀疏矩阵的压缩存储
若矩阵中非零元素较少(非零元 素的个数栈元素总数的20%以 下),且分布没有明显的规律
1.三元组表示法 2.十字链表存储
1.三元组表示法
将其中的非零元素在一维数组空间中以行序为主序进行存储,在存储 非零元素的同时还要存储元素所在的行和列的位置 。
非零元素所在的行号、列号和元素值
4×4三角矩阵
存储结构
3.对角矩阵
若矩阵中所有的非零元素都集中在以对角线为中心的带状区域中,则 这类矩阵称为对角矩阵。
最常见的是三对角矩阵
存储 结构
存储方法:采用一维数组,对非零 元素按行顺序存储;n阶三对角矩 阵需要3n-2个元素的存储空间。
LOC(aij)=LOC(a11)+2(i-1)+j-1
int m, n, t;
//矩阵行数、列数和非零元素个数
}TSMatrix;
2.十字链表存储
当矩阵进行某些运算时,如加法、减法和乘法等,矩阵中非零元素的 个数和位置会发生很大的变化,适用链式存储结构——十字链表。 每个非零元素用一个结点表示,每个结点由5个域组成。
同一列中下一个非零元素的位置
同一行中下一个非零元素的位置
4×4对称矩阵
存储结构
用一维数组空间作为对n阶对称矩阵A的存储结构,则矩阵中任意元素 aij在一维数组中的位置为:
2.三角矩阵
若n阶矩阵A的上(或下)三角(不包括对角线)中的元素均为常数c或 零,则称矩阵A 为下(或上)三角矩阵。
三角矩阵存储方法: 用一个一维数组来存储其下(上)三角中的元素,除此之外,当上 (下)三角中的常数不为0时,还要增加一个常数c的存储空间。
存储结构
三元组表示法的类型定ห้องสมุดไป่ตู้:
#define MAXSIZE 100 //非零元素个数的最大值
typedef struct
{ int i, j;
//非零元素的行号和列号
ElemType v; //非零元素的值
}Triple;
typedef struct
{
Triple data[MAXSIZE + 1];//非零元素的三元组表
十字链表的类型定义如下:
typedef struct OLNode
{int row, col;
//非零元素的行号和列号
ElemType v;
//非零元素的值
struct OLNode *right, *down;//非零元素所在行表和列表的后继链域
}OLNode; *OLink;
typedef struct
数据结构
矩阵的压缩存储
一、特殊矩阵的压缩存储 二、稀疏矩阵的压缩存储
一、特殊矩阵的压缩存储
1.对称矩阵 2.三角矩阵 3.对角矩阵
1.对称矩阵
若n阶矩阵A(如图4-5所示)满足aij=aji(1≤i, j≤n),则称矩阵A 为 n阶对称矩阵。
对称矩阵存储方法: 只需按行序存储对称矩阵中下三角(包括对角线)的元素 将n2个元素的存储空间压缩到n(n+1)/2个元素的存储空间中
{OLNode *rhead, *chead; //行、列链表的头指针向量
int m, n, t; //稀疏矩阵的行数、列数和非零元素个数
}CrossList;
稀 疏 矩 阵 的 十 字 链 表
数据结构