栈:矩阵的压缩存储
来源:互联网 发布:星韵抽奖软件注册码 编辑:程序博客网 时间:2024/06/05 05:28
概念:
科学与工程计算有一个特殊的数学对象,那就是矩阵。如何将矩阵中的各个元素存储在计算机中,数组就是一个很好的选择。我们通常会遇到三种类型的矩阵:
- 普通矩阵
- 特殊矩阵:对称矩阵、上三角矩阵、下三角矩阵、对角矩阵等
- 稀疏矩阵
特殊
特殊矩阵和稀疏矩阵压缩存储的目的是节省存储空间。矩阵的下标是从1开始,而将改矩阵压缩成内存中的一维空间时,与该一维空间所对应的数组下标是从0开始。
1. 对称矩阵:
性质:
- 在n阶矩阵A中的元素满足 :
aij =aji ( 1≤ i , j≤n ); - 压缩策略:只存储上三角或下三角的元素。所需空间
n(n+1)2 - 一维数组sa[
n(n+1)2 ] 存储以行序为主序的下三角(包括对角线),其地址的运算,即aij 和sa[k] 之间存在如下对应关系:k=⎧⎩⎨⎪⎪i(i−1)2+j−1,j(j−1)2+i−1,i ≥ j,对角线元素和下三角元素i < j,上三角元素
2. 上三角与下三角矩阵:
上三角矩阵:
下三角矩阵:
3. 对称矩阵:
4. 稀疏矩阵:
性质:
- 稀疏矩阵:零元素个数远远大于非零元素的个数。
- 稀疏因子:在m × n的矩阵中,t个元素不为0,δ =
tm×n ,称δ为矩阵的稀疏因子。 - 通常认为δ≤0.05时称为稀疏矩阵。
压缩存储方法:
三元组顺序表(顺序存储结构)
#define MAXSIZE 12500//非零元素最大个数 typedef struct{ int i,j;//非零元素的行下标、列下标 elemtype e;}Triple;typedef struct{ Triple data[MAXSIZE+1];//data[0]未用 int mu,nu,tu;//行数、列数、非零元素个数 }TSMatrix;
- 行逻辑连接的顺序表(链式存储结构)
有时为了提高效率,可以随机存储任意一行的非0元素,这样,就需要知道每一行的第一个非0元素在三元组表中的位置。为此可以添加一个辅助数组来实现:
typedef struct{ Triple data[MAXSIZE+1];// data[0]未用 int rpos[MAXCO+1]// 各行第一个非零元的位置表,rpos [0]未用 int mu,nu,tu;//行数、列数、非零元素个数 }RLSMatrix;
- 十字链表(链式存储结构)
将每行的非0元素组成一个链表,每列的非0元素组成一个链表。链表中的每个结点有5个域,有3个域与三元组中信息一样,保存行标、列标、元素值。剩下的2个域分别保存所在行下一个元素和所在列下一个元素。
最后将行链表的头指针组成一个数组,将列链表的头指针组成另一个数组,这样就形成了一个十字交叉的链表。
阅读全文
0 0
- 栈:矩阵的压缩存储
- 矩阵的压缩存储
- 矩阵的压缩存储
- 矩阵的压缩存储
- 矩阵的压缩存储
- 矩阵的压缩存储
- 矩阵的压缩存储
- 矩阵的压缩存储
- 矩阵的压缩存储
- 特殊矩阵的压缩存储
- 带状矩阵的压缩存储
- 稀疏矩阵的压缩存储
- 特殊矩阵的压缩存储
- 对称矩阵的压缩存储
- 稀疏矩阵的压缩存储
- 对称矩阵的压缩存储
- 稀疏矩阵的压缩存储
- 对称矩阵的压缩存储
- linux程序调试(一)------内存分布
- caffe*** Aborted at 1457505270 (unix time) try "date -d @1457505270" if you are using GNU date ***
- mysql常用命令/语句学习一
- SHU金马五校赛 L.零件组装 【状压DP】
- Android 和jsp登录接口
- 栈:矩阵的压缩存储
- 算法复习:二叉树的镜像
- 问题解决:hive中的find_in_set不能用作join的条件
- 网络爬虫实现原理与实现技术
- isa3 ip地址设置
- 学习笔记
- 小结(各种点)
- Struts2框架01
- PCIe学习笔记(20)--- 中断(1)--- Legacy