下三角矩阵的压缩存储(实验报告)
- 格式:doc
- 大小:20.00 KB
- 文档页数:2
数据结构实验五矩阵的压缩存储与运算第五章矩阵的压缩存储与运算【实验目的】1. 熟练掌握稀疏矩阵的两种存储结构(三元组表和十字链表)的实现;2. 掌握稀疏矩阵的加法、转置、乘法等基本运算;3. 加深对线性表的顺序存储和链式结构的理解。
第一节知识准备矩阵是由两个关系(行关系和列关系)组成的二维数组,因此对每一个关系上都可以用线性表进行处理;考虑到两个关系的先后,在存储上就有按行优先和按列优先两种存储方式,所谓按行优先,是指将矩阵的每一行看成一个元素进行存储;所谓按列优先,是指将矩阵的每一列看成一个元素进行存储;这是矩阵在计算机中用一个连续存储区域存放的一般情形,对特殊矩阵还有特殊的存储方式。
一、特殊矩阵的压缩存储1. 对称矩阵和上、下三角阵若n阶矩阵A中的元素满足= (0≤i,j≤n-1 )则称为n阶对称矩阵。
对n阶对称矩阵,我们只需要存储下三角元素就可以了。
事实上对上三角矩阵(下三角部分为零)和下三角矩阵(上三角部分为零),都可以用一维数组ma[0.. ]来存储A的下三角元素(对上三角矩阵做转置存储),称ma为矩阵A的压缩存储结构,现在我们来分析以下,A和ma之间的元素对应放置关系。
问题已经转化为:已知二维矩阵A[i,j],如图5-1,我们将A用一个一维数组ma[k]来存储,它们之间存在着如图5-2所示的一一对应关系。
任意一组下标(i,j)都可在ma中的位置k中找到元素m[k]= ;这里:k=i(i+1)/2+j (i≥j)图5-1 下三角矩阵a00 a10 a11 a20 … an-1,0 … an-1,n-1k= 0 1 2 3 …n(n-1)/2 …n(n+1)/2-1图5-2下三角矩阵的压缩存储反之,对所有的k=0,1,2,…,n(n+1)/2-1,都能确定ma[k]中的元素在矩阵A中的位置(i,j)。
这里,i=d-1,(d是使sum= > k的最小整数),j= 。
2. 三对角矩阵在三对角矩阵中,所有的非零元素集中在以主对角线为中心的带内状区域中,除了主对角线上和直接在对角线上、下方对角线上的元素之外,所有其它的元素皆为零,见图5-3。
精品资料数据结构实验五矩阵的压缩存储与运算........................................第五章矩阵的压缩存储与运算【实验目的】1. 熟练掌握稀疏矩阵的两种存储结构(三元组表和十字链表)的实现;2. 掌握稀疏矩阵的加法、转置、乘法等基本运算;3. 加深对线性表的顺序存储和链式结构的理解。
第一节知识准备矩阵是由两个关系(行关系和列关系)组成的二维数组,因此对每一个关系上都可以用线性表进行处理;考虑到两个关系的先后,在存储上就有按行优先和按列优先两种存储方式,所谓按行优先,是指将矩阵的每一行看成一个元素进行存储;所谓按列优先,是指将矩阵的每一列看成一个元素进行存储;这是矩阵在计算机中用一个连续存储区域存放的一般情形,对特殊矩阵还有特殊的存储方式。
一、特殊矩阵的压缩存储1. 对称矩阵和上、下三角阵若n阶矩阵A中的元素满足= (0≤i,j≤n-1 )则称为n阶对称矩阵。
对n阶对称矩阵,我们只需要存储下三角元素就可以了。
事实上对上三角矩阵(下三角部分为零)和下三角矩阵(上三角部分为零),都可以用一维数组ma[0.. ]来存储A的下三角元素(对上三角矩阵做转置存储),称ma为矩阵A的压缩存储结构,现在我们来分析以下,A和ma之间的元素对应放置关系。
问题已经转化为:已知二维矩阵A[i,j],如图5-1,我们将A用一个一维数组ma[k]来存储,它们之间存在着如图5-2所示的一一对应关系。
任意一组下标(i,j)都可在ma中的位置k中找到元素m[k]= ;这里:k=i(i+1)/2+j (i≥j)图5-1 下三角矩阵a00 a10 a11 a20 … an-1,0 … an-1,n-1k= 0 1 23 …n(n-1)/2 …n(n+1)/2-1图5-2下三角矩阵的压缩存储反之,对所有的k=0,1,2,…,n(n+1)/2-1,都能确定ma[k]中的元素在矩阵A中的位置(i,j)。
这里,i=d-1,(d是使sum= > k的最小整数),j= 。
下三角矩阵的压缩存储(实验报告)
1、实验目的和要求理解和掌握下三角矩阵的压缩存储技术,使用C语言根据相应算法编写一个程序,实现下三角矩阵的压缩存储。
要求仔细阅读下面的内容,编写C程序,上机通过,并观察其结果,写出实验报告书。
二、实验内容和原理内容:用一个一维数组存储一个5X5的下三角矩阵。
原理:对于下三角矩阵来说,大约有一半的元素为零,这些元素不必存储,只需存储下三角部分的非零元素。
三、主要仪器设备计算机一台
4、实验主程序#include<stdio、h>int main(void){int
a[15],b[5][5]={{1},{2,3},{4,5,6},{7,8,9,10},{11,12,13,14, 15}},i,j,k;for(i=0,k=0;i<5;++i)for(j=0;j<=i;++j){a[k]=b[i ][j];++k;} for(i=0;i<15;++i)
printf("%d ",a[i]);
printf("\n");for(i=0;i<5;++i){for(j=0;j<5;++j){if(j<=i)pr intf("%-3d",a[i*(i+1)/2+j]);elseprintf("%-
3d",0);}putchar(\n);}getchar();return 0;}实验结果
五、实验心得通过实验学习,理解了下三角矩阵的压缩存储的算法,了解到像了下三角矩阵这样的规则矩阵可以压缩存储,极大节省了空间,使我受益匪浅。
第 1 页共 1 页。
矩阵的压缩存储前⾔ ⼀⼊编程深似海,从此砖头是爱⼈,⽇⽇搬,夜夜搬,搬到天荒地⽼,精尽⼈亡,直教⼈失去了⾃我,忘记了时间,忽然之间发现九⽉份快没了,赶紧写篇博客打个卡,证明⼀下我还活着。
数组与矩阵 数组是由⼀组相同类型的数据元素构成的有限序列,访问数据元素的⽅式是使⽤元素各⾃的序号进⾏访问,也就是下标。
数组它本⾝是线性表的推⼴,⼀维数组就是⼀个向量形式的线性表,⼆维数组就是由⼀维数组组成的线性表。
在许多科学计算和⼯程应⽤中,经常要⽤到矩阵的概念,我们⽤的最多的其实就是Mysql的表,表数据都是⾏列存储,这就是矩阵。
由于矩阵具有元素数⽬固定以及元素按下标关系有序排列等特点,所以在使⽤⾼级语⾔编程时,⼀般都是⽤⼆维数组来存储矩阵。
数组的顺序存储为什么是顺序存储? 我想问这个问题就太低级了。
因为它是数组,数据的存储⽅式分为顺序存储和链式存储两种,数组⼀旦被定义,他的维数和维界就已固定,除结构的初始化和销毁外,数组只会有存取元素和修改元素的操作,不存在插⼊和删除操作,所以数组适合⽤顺序存储。
数组存放在内存中的映射关系 数组可以是多维的,但是内存空间却是⼀维的,所以我们就要把多维数组通过⼀定的映射顺序把它变成⼀维的,然后存储到内存空间之中。
在⼤多数⾼级编程语⾔中,多维数组在内存中通常有两种不同的顺序存储⽅式,按⾏优先顺序存储和按列优先顺序存储。
举个例⼦,以下3⾏4列的⼀个⼆维数组矩阵:a1,a2,a3,a4b1,b2,b3,b4c1,c2,c3,c4 按⾏优先顺序存储: 按列优先顺序存储:地址计算 地址计算的意思就是给定数组下标,求在⼀维内存空间的地址,从⽽取出数据。
我们先来看⼀维数组的地址计算 ⼀维数组内的元素只有⼀个下标,存储⽅法和普通的线性表⼀样。
如⼀维数组 A = [a1,a2,a3,......ai,.........,an],每个元素占⽤size个存储单元(就是内存⼤⼩),那么元素ai的存储地址为 A[0]的位置 + (i-1)*size再来看⼆维数组的地址计算 以⼆维数组Amn为例,⾸元素为A[0][0],数组中任意元素A[i][j]的地址为:A[0][0]的位置 + (n * (i-1) + (j-1))* size;⽐如:⼀个5⾏4列的⼆维数组A,按⾏存储,其中每个元素占2个存储单元,⾸元素地址是1000,求第3⾏第2列的元素在内存中的地址。
引言概述本文是对工程力学中压缩实验的一个实验报告样本进行详细分析和讨论。
压缩实验是工程力学中非常重要的实验之一,通过对材料在受到压缩力作用下的性能进行研究,可以了解材料的强度、刚度以及变形等特性。
本报告将从实验目的、实验装置、实验步骤、实验结果和分析等五个大点进行阐述,每个大点下分别包含59个小点来详细阐述。
正文内容一、实验目的1.1确定材料的抗压强度1.2研究材料的应力应变关系1.3分析材料的变形特性1.4了解压缩实验的基本原理和方法1.5掌握实验操作和数据处理的技巧二、实验装置2.1压力传感器:用于测量加载给试样的压缩力2.2位移传感器:用于测量试样的变形2.3实验机:用于加载试样,并记录加载过程中的数据2.4数据采集系统:用于记录并处理实验数据三、实验步骤3.1准备试样:根据实验要求选择适当的试样,并进行表面的清洁和标记3.2安装试样:将试样放置在实验机的加载平台上,并进行固定3.3调整实验参数:根据实验要求,设置加载速度、加载范围和数据采集频率等参数3.4进行实验:开始加载试样,并记录加载过程中的压力和变形数据3.5结束实验:当试样出现破坏或达到实验要求的加载条件时,停止加载,并记录相应的数据四、实验结果和分析4.1压力位移曲线:根据实验数据绘制压力位移曲线,分析材料在不同加载条件下的变形行为4.2在加载过程中监测的数据:包括压力、变形、位移速度等数据的变化趋势和规律4.3压力和变形的关系:通过对实验数据进行处理和分析,计算材料的应力和应变,研究材料的力学性能4.4材料的抗压强度:根据实验结果确定材料的抗压强度,比较不同试样的差异4.5讨论:根据实验结果和分析,对材料的性能进行讨论,提出问题和改进方法等五、总结本文对工程力学中压缩实验进行了详细的分析和讨论。
通过实验目的、实验装置、实验步骤、实验结果和分析等五个大点进行了阐述。
实验结果和分析部分包括压力位移曲线、加载过程中的数据变化趋势和规律,材料的抗压强度以及力学性能的研究等内容。
实验:矩阵的压缩存储及相关操作一、实验目的1 理解稀疏矩阵的三元组顺序表类型定义,2 掌握稀疏矩阵的输入( 即根据输入数据创建矩阵的三元组顺序表)3 掌握稀疏矩阵输出(即根据矩阵的三元组顺序表在屏幕上输出完整的矩阵)4 掌握稀疏矩阵的转置算法。
二、实验内容1.编写程序任意输入一个稀疏矩阵M,用三元组顺序表压缩存储该稀疏矩阵M,然后求其转置矩阵T,并输出转置矩阵T。
运行效果图:注意:矩阵要求用三元组顺序表存储三、思考与提高如何计算两个三元组表表示的稀疏矩阵的乘积?【方案一】程序代码:#include <iostream>#include <malloc.h>#include <cmath>#include <iomanip>using namespace std;#define MAXSIZE 12500#define OK 1#define ERROR 0typedef int Status;typedef int ElemType;//#define Triple Mtypedef struct{int i,j;ElemType e;}Triple;typedef struct{Triple data[MAXSIZE+1];int mu,nu,tu;}TSMatrix;CreateSMatrix(TSMatrix &M){int i,m,n;ElemType e;Status k;cout<<"输入矩阵的行、列数、非零元素个数:\n";//Mcin>>M.mu>>M.nu>>M.tu;M.data[0].i=0; // 为以下比较顺序做准备for(i=1;i<=M.tu;i++){do{//printf("请按行序顺序输入第%d个非零元素所在的行(1~%d),列(1~%d),元素值:",i,M.mu,M.nu);cout<<"第"<<i<<"个数所在的行列号元素值\n";//scanf("%d,%d,%d",&m,&n,&e);cin>>m>>n>>e;k=0;if(m<1||m>M.mu||n<1||n>M.nu) // 行或列超出范围k=1;if(m<M.data[i-1].i||m==M.data[i-1].i&&n<=M.data[i-1].j) // 行或列的顺序有错k=1;}while(k); //对于非法操作不予存储,直到输入正确位置M.data[i].i=m;M.data[i].j=n;M.data[i].e=e;}return OK;}Status TransposeSMatrix(TSMatrix M,TSMatrix &T){ // 求稀疏矩阵M的转置矩阵T。
一、实验目的1. 了解矩阵压缩存储的基本原理和方法。
2. 掌握稀疏矩阵的压缩存储方法,包括三元组顺序表存储和压缩存储下三角矩阵。
3. 熟悉矩阵压缩存储在数据结构中的应用,提高数据存储效率。
4. 通过实验验证矩阵压缩存储方法的有效性和优越性。
二、实验原理矩阵压缩存储是一种针对稀疏矩阵的存储方法,通过压缩存储非零元素,减少存储空间,提高数据存储效率。
稀疏矩阵是指矩阵中大部分元素为0的矩阵,其特点是存储空间利用率低,计算效率低。
矩阵压缩存储主要有以下几种方法:1. 三元组顺序表存储:将稀疏矩阵中的非零元素及其对应的行、列索引存储在一个三元组中,形成顺序表。
2. 压缩存储下三角矩阵:对于下三角矩阵,只存储主对角线以下的非零元素及其对应的行、列索引。
3. 压缩存储上三角矩阵:对于上三角矩阵,只存储主对角线以上的非零元素及其对应的行、列索引。
三、实验内容1. 实现稀疏矩阵的三元组顺序表存储。
2. 实现压缩存储下三角矩阵和上三角矩阵。
3. 实现矩阵转置算法,包括压缩存储下三角矩阵的转置和压缩存储上三角矩阵的转置。
4. 比较不同存储方法的存储空间和计算效率。
四、实验步骤1. 创建一个稀疏矩阵,随机生成非零元素及其对应的行、列索引。
2. 实现稀疏矩阵的三元组顺序表存储,将非零元素及其对应的行、列索引存储在一个顺序表中。
3. 实现压缩存储下三角矩阵,只存储主对角线以下的非零元素及其对应的行、列索引。
4. 实现压缩存储上三角矩阵,只存储主对角线以上的非零元素及其对应的行、列索引。
5. 实现矩阵转置算法,包括压缩存储下三角矩阵的转置和压缩存储上三角矩阵的转置。
6. 比较不同存储方法的存储空间和计算效率。
五、实验结果与分析1. 三元组顺序表存储存储空间:n(非零元素个数) 3计算效率:O(n)2. 压缩存储下三角矩阵存储空间:n(非零元素个数) 3计算效率:O(n)3. 压缩存储上三角矩阵存储空间:n(非零元素个数) 3计算效率:O(n)4. 矩阵转置算法计算效率:O(n)通过实验结果可以看出,压缩存储下三角矩阵和上三角矩阵的存储空间和计算效率与三元组顺序表存储相当,且对于稀疏矩阵,压缩存储方法可以显著减少存储空间,提高数据存储效率。
一、实验目的和要求
理解和掌握下三角矩阵的压缩存储技术,使用C语言根据相应算法编写一个程序,实现下三角矩阵的压缩存储。
要求仔细阅读下面的内容,编写C程序,上机通过,并观察其结果,写出实验报告书。
二、实验内容和原理
内容:用一个一维数组存储一个5X5的下三角矩阵。
原理:对于下三角矩阵来说,大约有一半的元素为零,这些元素不必存储,只需存储下三角部分的非零元素。
三、主要仪器设备
计算机一台
四、实验主程序
#include<stdio.h>
int main(void)
{
int a[15],
b[5][5]={{1},{2,3},{4,5,6},{7,8,9,10},{11,12,13,14,15}},
i,j,k;
for(i=0,k=0;i<5;++i)
for(j=0;j<=i;++j)
{
a[k]=b[i][j];
++k;
}
for(i=0;i<15;++i)
printf("%d ",a[i]);
printf("\n");
for(i=0;i<5;++i)
{
for(j=0;j<5;++j)
{
if(j<=i)
printf("%-3d",a[i*(i+1)/2+j]);
else
printf("%-3d",0);
}
putchar('\n');
}
getchar();
return 0;
}
实验结果
五、实验心得
通过实验学习,理解了下三角矩阵的压缩存储的算法,了解到像了下三角矩阵这样的规则矩阵可以压缩存储,极大节省了空间,使我受益匪浅。