数据结构与算法特殊矩阵和稀疏矩阵

数据结构与算法特殊矩阵和稀疏矩阵
数据结构与算法特殊矩阵和稀疏矩阵

常熟理工学院

《数据结构与算法》实验指导与报告书

_2017-2018_____学年第__1__ 学期

专业:物联网工程

实验名称:特殊矩阵和稀疏矩阵

实验地点: N6-210 指导教师:聂盼红

计算机科学与工程学院

2017

实验五特殊矩阵和稀疏矩阵

【实验目的】

1、掌握数组的结构类型(静态的内存空间配置);通过数组的引用下标转换成该数据在内存中的地址;

2、掌握对称矩阵的压缩存储表示;

3、掌握稀疏矩阵的压缩存储-三元组表表示,以及稀疏矩阵的转置算法。

【实验学时】

2学时

【实验预习】

回答以下问题:

1、什么是对称矩阵写出对称矩阵压缩存储sa[k]与aij之间的对应关系。

若n阶矩阵A中的元素满足下述性质:a ij=a ji,则称为n阶对称矩阵。

sa[k]与矩阵元素a ij之间存在着一一对应的关系:

若i>=j,k=i*(i+1)/2+j;

若i

0<=i, j<=n-1 0<=k<=n*(n+1)/2-1

2、什么是稀疏矩阵稀疏矩阵的三元组表表示。

假设在m×n的矩阵中,有t个元素不为零,且t<<m×n,则称此矩阵为稀疏矩阵。

稀疏矩阵的三元组成表示: 矩阵的行数、列数和非零元个数

【实验内容和要求】

1、编写程序,将对称矩阵进行压缩存储。

(1)对称矩阵数组元素A[i][j]转换成为以行为主的一维数组sa[k],请描述k与ij

的关系。(注意C程序中,i,j,k均从0开始)

(2)调试程序与运行。对称矩阵存储下三角部分即i>=j。

对称矩阵为3,9,1,4,7

9,5,2,5,8

1,2,5,2,4

4,5,2,1,7

7,8,4,7,9

参考程序如下:

#include<>

#define N 5

int main()

{

int upper[N][N]= {{3,9,1,4,7},

{9,5,2,5,8},

{1,2,5,2,4},

{4,5,2,1,7},

{7,8,4,7,9}

}; /*对称矩阵*/

int rowMajor[15]; /*存储转换数据后以行为主的数组*/

int Index; /*数组的索引值*/

int i,j;

printf("Two dimensional upper triangular array:\n");

for (i=0; i

{

for(j=0; j

printf("%3d",upper[i][j]);

printf("\n");

}

for(i=0; i

for(j=0; j

if(i>=j) /*下三角元素进行存储*/

{

Index=i*(i+1)/2+j; /*ij与index的转换*/

rowMajor[Index]=upper[i][j];

}

printf("\nRow Major one dimensional array:\n");

for(i=0; i<15; i++) /*输出转换后的一维数组*/

printf("%3d", rowMajor[i]);

printf("\n");

return 1;

}

2、完成程序,实现稀疏矩阵的三元组表存储及稀疏矩阵的转置。调试并给出结果:

补充完整程序,运行稀疏矩阵的一般转置算法;

完成稀疏矩阵的快速转置算法,并修改主函数的转置调用算法,验证快速转置算法的正确性。

部分代码如下:

#include<>

#define MAXSIZE 20 /*非零元素个数最大值*/

typedef int ElemType;

typedef struct

{

int i,j;

ElemType e;

}Triple;

typedef struct

{

Triple data[MAXSIZE+1]; /*三元组表,data[0]不用*/

int mu,nu,tu; /*矩阵的行数、列数、非零元个数*/ }TSMatrix;

void TransposeSMatrix(TSMatrix *T,TSMatrix *M); /*一般转置算法*/ void FastTransposeSMatrix(TSMatrix *M,TSMatrix *T); /*快速转置算法*/

int main()

{

int i,j,k,q,col,p;

int temp[6][7]={{0,12,9,0,0,0,0}, /*稀疏矩阵*/

{0,0,0,0,0,0,0,},

{-3,0,0,0,0,14,0},

{0,0,24,0,0,0,0},

{0,18,0,0,0,0,0},

{15,0,0,-7,0,0,0},

};

TSMatrix T,M;

=6;

=7;

=0;

k=1;

for (i=0;i< ;i++) /*转换为稀疏矩阵的三元组表示*/ {

for (j=0;j< ;j++)

{

if (temp[i][j]!=0)

{

[k].i=i+1;

[k].j=j+1;

[k].e=temp[i][j];

k++;

}

}

}

=k-1;

FastTransposeSMatrix(&M,&T); /*调用转置算法进行转置*/

/*输出转置结果*/

printf("稀疏矩阵:\n");

for (i=0;i< ;i++) /*转换为稀疏矩阵的三元组表示*/ {

for (j=0;j< ;j++)

{

printf("%3d",temp[i][j]);

}

printf("\n");

}

printf("转置前M三元组表:\nmu\tnu\ttu\n");

printf("%d\t%d\t%d\n",,,;

printf("\ni\tj\te\n");

for (i=1;i<=;i++)

printf("%d\t%d\t%d\n",[i].i,[i].j,[i].e); printf("转置后T三元组表:\nmu\tnu\ttu\n"); printf("%d\t%d\t%d\n",,,;

printf("\ni\tj\te\n");

for (i=1;i<=;i++)

printf("%d\t%d\t%d\n",[i].i,[i].j,[i].e); }

/*稀疏矩阵的转置*/

void TransposeSMatrix(TSMatrix *M,TSMatrix *T)

{

int q,col,p;

T->mu=M->nu;

T->nu=M->mu;

T->tu=M->tu;

if (T->tu)

{

q=1;

for (col=1;col<=M->nu;++col)

for (p=1;p<=M->tu;++p)

if (M->data[p].j==col)

{

T->data[q].i=M->data[p].j;

T->data[q].j=M->data[p].i;

T->data[q].e=M->data[p].e;

++q;

}

}

}

/*稀疏矩阵的快速转置算法*/

void FastTransposeSMatrix(TSMatrix *M,TSMatrix *T) {

int t,q,col,p,num[MAXSIZE],cpot[MAXSIZE];

T->mu=M->nu;

T->nu=M->mu;

T->tu=M->tu;

if (T->tu)

{

/*快速转置过程的实现,请补充代码*/

for(col=1;col<=M->mu;++col)

num[col]=0; ]; ;

q=cpot[col];

T->data[q].i=M->data[p].j;

T->data[q].j=M->data[p].i;

T->data[q].e=M->data[p].e;

++cpot[col];

}

}

}

【实验小结】

本实验掌握了对称矩阵的压缩存储表示,稀疏矩阵的压缩存储-三元组表表示,以及稀疏矩阵的转置算法。明白了可以改变矩阵的储存方式来节省内存空间,今后可以利用这一思想来节省内存。

数据结构与算法 特殊矩阵和稀疏矩阵

常熟理工学院 《数据结构与算法》实验指导与报告书 _2017-2018_____学年第__1__ 学期 专业:物联网工程 实验名称:特殊矩阵和稀疏矩阵 实验地点: N6-210 指导教师:聂盼红 计算机科学与工程学院 2017

实验五特殊矩阵和稀疏矩阵 【实验目的】 1、掌握数组的结构类型(静态的内存空间配置);通过数组的引用下标转换成该数据在内存中的地址; 2、掌握对称矩阵的压缩存储表示; 3、掌握稀疏矩阵的压缩存储-三元组表表示,以及稀疏矩阵的转置算法。 【实验学时】 2学时 【实验预习】 回答以下问题: 1、什么是对称矩阵?写出对称矩阵压缩存储sa[k]与aij之间的对应关系。 若n阶矩阵A中的元素满足下述性质:a ij=a ji,则称为n阶对称矩阵。 sa[k]与矩阵元素a ij之间存在着一一对应的关系: 若i>=j,k=i*(i+1)/2+j; 若i=j。 对称矩阵为3,9,1,4,7 9,5,2,5,8 1,2,5,2,4 4,5,2,1,7 7,8,4,7,9

数据结构实验五矩阵的压缩存储与运算学习资料

数据结构实验五矩阵的压缩存储与运算

第五章矩阵的压缩存储与运算 【实验目的】 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-1

k= 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。 图5-3 三对角矩阵A 与下三角矩阵的存储一样,我们也可以用一个一维数组ma[0..3n-2]来存放三对角矩阵A,其对应关系见图5-4。 a00 a01 a10 a11 a12 … an-1,n-2 an-1,n-1 k= 0 1 2 3 4 … 3n-3 3n-2 图5-4下三角矩阵的压缩存储 A中的一对下标(i,j)与ma中的下标k之间有如下的关系: 公式中采用了C语言的符号,int()表示取整,‘%’表示求余。

数据结构实验稀疏矩阵计算器

‘ 实验报告 题目:稀疏矩阵运算器 班级:14电子商务平台建设班完成日期:2015.11.2 学号:姓名:孙少辉 学号:姓名:杨德龙 学号:姓名:柴益新 一:需求分析 稀疏矩阵是指那些多数元素为零的矩阵。利用“稀疏“特点进行存储和计算可以大大节省存储空间,提高计算效率。实现一个能进行稀疏矩阵基本运算的运算器。 【基本要求】 以“带行逻辑链接信息“的三元组顺序表示稀疏矩阵,实现两个矩阵相加、相减和相乘运算。稀疏矩阵的输入采用三元组表示,而运算结果的矩阵则以通常阵列形式列出。 【项目约束】 1.首先应输入矩阵的行数和列数,并判断给出的两个矩阵 行、列数对于所要求作的运算是否相匹配。可设矩阵的行数和 列数均不超过20。 2.程序可以对三元组的输入顺序加以限制,例如,按行优 先。注意研究教科书5.3.2节中的算法,以便提高计算效率。

3.在用三元组稀疏矩阵时,相加或相减所得结果矩阵应该另生 成,乘积矩阵也可用二维数组存放。 三:详细设计 1:数据结构的定义 元素类型、变量、指针类型 (1)项目数据表: 3.2子函数 3:函数调用关系 无函数调用关系,只有一个主函数 四:调试分析 三元组顺序的输入规则。以0 0 0 作为输入的结束信号。完成实现稀疏矩阵的相加、相减、相乘的运算。 五:用户使用说明 (1)首先运行文件系统 1.首先定义要运算的第一个稀疏矩阵的行列数

定义完成之后输入另一个要运算的稀疏矩阵的行列。 (2)输入信息: 如下图所示输入两个矩阵的元素

所有输入信息以及运算方法输入完成之后。回车直接算出结果(3)输出信息:

六、源代码 /** ***项目名称:稀疏矩阵的运算 ***设计者:杨德龙,柴益新,孙少辉 ***时间:2015.11.02 ***实现目标:实现矩阵的加法,减法,乘法;***/ #include #include int main() { //定义二维数组及用到的各种变量 int a[20][20];

数据结构课程设计-特殊矩阵计算器

特殊矩阵计算器 1、特殊矩阵计算器 问题描述:创建两个特殊矩阵 A 和 B,计算 A+B、A-B、A*B、B*A、A(或 B)的逆、A(或 B)的转置、A(或 B)的行列式等,具体要求如下:① A、B 均是压缩存储的特殊矩阵,如上/下三角矩阵、对称矩阵、对角矩阵、单位矩阵等。 ② A、B 的矩阵类型、行列数、各位置的元素值等信息均在运行时指定(对于不同类型的矩阵,要求输入的数据也不尽相同)。③各运算若可行,则打印结果;若不可行,则给出提示信息。④各运算需自己实现,禁止调用语言内建或第三方类库的矩阵 API。 涉及算法及知识:特殊矩阵的压缩存储、矩阵相关运算。 #include<> #include<> #define max 100 typedef struct{ int row,col;//定义矩阵行数、列数 int a[max][max]; }Matrix; //存储结构 typedef struct{ int array[max]; int n; //定义矩阵的阶 }M; Matrix A,B,C,D; M p; //*************矩阵的压缩存储*********************// int CompressMatrix(int m,int i,int j,int n){ int k;

if(m==1){ if(i<=j) k=(2*n-i+1)*i/2+(j-i)+1; else k=0; return k; } if(m==2){ if(i>=j) k=i*(i+1)/2+j+1; else k=0; return k; } if(m==3){ if(i>=j) k=i*(i+1)/2+j; else k=j*(j+1)/2+i; return k; } if(m==4){ if(i!=j) k=0; else k=i+1;

数据结构课程设计之稀疏矩阵实现与应用1

数据结构课程设计报告 题目:十字链表成为存储结构,实现稀疏矩阵的求和运算 学生姓名:张旋 班级:软件三班学号:201213040304 指导教师: 吴小平

一、需求分析 1.问题描述: 要求:十字链表下的稀疏矩阵的加、转、乘的实现。 2.基本功能 实现十字链表下的转置,乘法,加法运算。 3.输入输出 (1)设计函数建立稀疏矩阵,初始化值。 (2)设计函数输出稀疏矩阵的值。 (3)构造函数进行两个稀疏矩阵相加,输出最终的稀疏矩阵。 (4)构造函数进行两个稀疏矩阵的相乘,输出最终的稀疏矩阵。 (5)构造函数进行稀疏矩阵的转置,并输出结果。 (6)退出系统。 二、概要设计 1.设计思路: 本实验要求在三元组,十字链表下实现稀疏矩阵的加、转、乘。首先要进行矩阵的初始化操作,定义三元组和十字链表的元素对象。写出转置,加法,乘法的操作函数。通过主函数调用实现在一个程序下进行矩阵的运算操作。 2.数据结构设计: 抽象数据类型稀疏矩阵的定义如下: ADT SparseMatrix{ 数据对象:D={aij | i=1,2,…,m; j=1,2,..,n; aij∈Elemset, m和n分别称为矩阵的行数和列数。} 数据关系:R={Row,Col} Row={ | 1<=i<=m, 1<=j<=n-1} Col= { | 1<=i<=m-1, 1<=j<=n} 基本操作: CreateSMatrix(&M); 操作结果:创建稀疏矩阵M。 DestroySMatrix(&M); 初始条件:稀疏矩阵M存在。操作结果:销毁稀疏矩阵M。 PrintSMatrix(M); 初始条件:稀疏矩阵M存在。操作结果:输出稀疏矩阵M。 AddSMatrix(M,N,&Q); 初始条件:稀疏矩阵M与N的行数和列数对应相等操作结果:求稀疏矩阵的和Q=M+N。 MultSMatrix(M,N,&Q); 初始条件:稀疏矩阵M的列数等于N的行数。操作结果:求稀疏矩阵乘积Q=M*N。 TransposeSMatrix(M,&T); 初始条件:稀疏矩阵M存在。操作结果:求稀疏矩阵M的转置矩阵T。 }ADT SparseMatrix 3.软件结构设计:

高考数学1几种特殊的矩阵变换专题1

高考数学1几种特殊的矩阵变换专题1 2020.03 1,圆22 1x y +=在矩阵10102?????? ? ?对应的变换作用下的结果为 . 2,当兔子和狐狸处于同一栖息地时,忽略其他因素,只考虑兔子数量和狐狸数量的相互影响,为了简便起见,不妨做如下假设: (1)由于自然繁殖,兔子数每年增长10%,狐狸数每年减少15%; (2)由于狐狸吃兔子,兔子数每年减少狐狸数的0.15倍,狐狸数每年增加兔子数的0.1倍; (3)第n 年时,兔子数量n R 用表示,狐狸数量用n F 表示; (4)初始时刻(即第0年),兔子数量有1000=R 只,狐狸数量有300=F 只。 请用所学知识解决如下问题: (1)列出兔子与狐狸的生态模型; (2)求出n R 、n F 关于n 的关系式; (3)讨论当n 越来越大时,兔子与狐狸的数量是否能达到一个稳定的平衡状态,说明你的理由。 3,在一次抗洪抢险中,准备用射击的方法引爆从桥上游漂流而下的一巨大汽油罐.已知只有5发子弹备用,且首次命中只能使汽油流出,再次命 中才能引爆成功,每次射击命中率都是3 2 .,每次命中与否互相独立. (1) 求油罐被引爆的概率. (2) 如果引爆或子弹打光则停止射击,设射击次数为ξ,求ξ的分布列及ξ的数学期望 4,在空间四边形ABCD 中, AC 和BD 为对角线,G 为ABC ?的重心,E 是BD

上一点,3BE ED =,以{ },,AB AC AD u u u r u u u r u u u r 为基底,则GE =u u u r ___ 5,设M 是把坐标平面上的点的横坐标伸长到2倍,纵坐标伸长到3倍的 伸压变换. 求逆矩阵1M -以及椭圆22 149x y +=在1M -的作用下的新曲线的 方程. 6,已知变换A :平面上的点P (2,-1)、Q (-1,2)分别变换成点P 1(3,-4)、 Q 1(0,5) (1)求变换矩阵A ; (2)判断变换A 是否可逆,如果可逆,求矩阵A 的逆矩阵A -1;如不可逆,说明理由. 7,两个人射击,甲射击一次中靶概率是21,乙射击一次中靶概率是31 , (Ⅰ)两人各射击一次,中靶至少一次就算完成目标,则完成目标概率是多少? (Ⅱ)两人各射击2次,中靶至少3次就算完成目标,则完成目标的概率是多少? (Ⅲ)两人各射击5次,是否有99%的把握断定他们至少中靶一次? 8,如图,正方体ABCD -A 1B 1C 1D 1中,点E 是棱BC 的中点,点F 是棱CD 上的动点. (Ⅰ)试确定点F 的位置,使得D 1E ⊥平面AB 1F ; (Ⅱ)当D 1E ⊥平面AB 1F 时,求二面角C 1―EF ―A 的余弦值以及BA 1与面C 1EF 所成的角的大小.

(完整版)非常实用的数据结构知识点总结

数据结构知识点概括 第一章概论 数据就是指能够被计算机识别、存储和加工处理的信息的载体。 数据元素是数据的基本单位,可以由若干个数据项组成。数据项是具有独立含义的最小标识单位。 数据结构的定义: ·逻辑结构:从逻辑结构上描述数据,独立于计算机。·线性结构:一对一关系。 ·线性结构:多对多关系。 ·存储结构:是逻辑结构用计算机语言的实现。·顺序存储结构:如数组。 ·链式存储结构:如链表。 ·索引存储结构:·稠密索引:每个结点都有索引项。 ·稀疏索引:每组结点都有索引项。 ·散列存储结构:如散列表。 ·数据运算。 ·对数据的操作。定义在逻辑结构上,每种逻辑结构都有一个运算集合。 ·常用的有:检索、插入、删除、更新、排序。 数据类型:是一个值的集合以及在这些值上定义的一组操作的总称。 ·结构类型:由用户借助于描述机制定义,是导出类型。 抽象数据类型ADT:·是抽象数据的组织和与之的操作。相当于在概念层上描述问题。 ·优点是将数据和操作封装在一起实现了信息隐藏。 程序设计的实质是对实际问题选择一种好的数据结构,设计一个好的算法。算法取决于数据结构。 算法是一个良定义的计算过程,以一个或多个值输入,并以一个或多个值输出。 评价算法的好坏的因素:·算法是正确的; ·执行算法的时间; ·执行算法的存储空间(主要是辅助存储空间); ·算法易于理解、编码、调试。 时间复杂度:是某个算法的时间耗费,它是该算法所求解问题规模n的函数。 渐近时间复杂度:是指当问题规模趋向无穷大时,该算法时间复杂度的数量级。 评价一个算法的时间性能时,主要标准就是算法的渐近时间复杂度。 算法中语句的频度不仅与问题规模有关,还与输入实例中各元素的取值相关。 时间复杂度按数量级递增排列依次为:常数阶O(1)、对数阶O(log2n)、线性阶O(n)、线性对数阶O(nlog2n)、平方阶O (n^2)、立方阶O(n^3)、……k次方阶O(n^k)、指数阶O(2^n)。

数据结构实验报告稀疏矩阵运算

教学单位计算机科学与技术 学生学号 5 数据结构 课程设计报告书 题目稀疏矩阵运算器 学生豹 专业名称软件工程 指导教师志敏

实验目的:深入研究数组的存储表示和实现技术,熟悉广义表存储结构的特性。 需要分析:稀疏矩阵是指那些多数元素为零的矩阵。利用“稀疏”特点进行存储和计算可以大大节省存储空间,提高计算效率。实现一个能进行稀疏矩阵基本运算的运算器。要求以带“行逻辑信息”的三元组顺序表存储稀疏矩阵,实现两矩阵的相加、相减、相乘等运算。输入以三元组表示,输出以通常的阵列形式列出。 软件平台:Windows 2000,Visual C++ 6.0或WINTC 概要设计:ADT Array { 数据对象: D = {aij | 0≤i≤b1-1, 0 ≤j≤b2-1} 数据关系: R = { ROW, COL } ROW = {| 0≤i≤b1-2, 0≤j≤b2-1} COL = {| 0≤i≤b1-1, 0≤ j≤b2-2} 基本操作: CreateSMatrix(&M); //操作结果:创建稀疏矩阵M. Print SMatrix(M); //初始化条件: 稀疏矩阵M存在. //操作结果:输出稀疏矩阵M. AddSMatrix(M,N,&Q); //初始化条件: 稀疏矩阵M与N的行数和列数对应相等. //操作结果:求稀疏矩阵的和Q=M+N. SubSMatrix(M,N,&Q); //初始化条件: 稀疏矩阵M与N的行数和列数对应相等. //操作结果:求稀疏矩阵的差Q=M-N. MultSMatrix(M,N,&Q); //初始化条件: 稀疏矩阵M的列数等于N的行数. //操作结果:求稀疏矩阵的乘积Q=M*N. } ADT Array

《1.2.3 几类特殊的矩阵变换》教案新部编本1

教师学科教案[ 20 – 20 学年度第__学期] 任教学科:_____________ 任教年级:_____________ 任教老师:_____________ xx市实验学校

《1.2.3 几类特殊的矩阵变换》教案1 教学目标 1. 理解可以用矩阵来表示平面中常见的几何变换,掌握恒等、伸压、反射、旋转、投影、 切变变换的矩阵表示及其几何意义 2.理解二阶矩阵对应的几何变换是线性变换,了解单位矩阵 3.了解恒等、伸压、反射、旋转、投影、切变变换这六个变换之间的关系 教学重难点 了解并掌握几种特殊的矩阵变换,可以简单的运用。 教学过程 1.理解可以用矩阵来表示平面中常见的几何变换,掌握恒等、伸压、反射、旋转、投影、切变变换的矩阵表示及其几何意义 (1)一般地,对于平面向量变换T ,如果变换规则为T :?? ? ???y x →??????''y x =??????++dy cx by ax ,那么根据二阶矩阵与平面列向量在乘法规则可以改写为T :??? ???y x →??????''y x =??? ? ??d c b a ?? ????y x 的矩阵形式,反之亦然(a 、b 、c 、d ∈R) 由矩阵M确定的变换,通常记为T M ,根据变换的定义,它是平面内点集到自身的一个映射,平面内的一个图形它在T M ,的作用下得到一个新的图形. 在本节中研究的变换包括恒等变换、伸压变换、反射变换、旋转变换、投影变换、切变变换等六个变换. (2)由矩阵M=?? ? ???1001确定的变换T M 称为恒等变换,这时称矩阵M 为恒等变换矩 阵或单位矩阵,二阶单位矩阵一般记为E.平面是任何一点(向量)或图形,在恒等变换之下都把自己变为自己. (3)由矩阵M=??????100k 或M=?? ? ???k 001)0k (>确定的变换T M 称为(垂直)伸压变 换,这时称矩阵M=???? ??100k 或M=?? ????k 001伸压变换矩阵.

数据结构稀疏矩阵基本运算实验报告

课程设计 课程:数据结构 题目:稀疏矩阵4 三元组单链表结构体(行数、列数、头) 矩阵运算重载运算符优 班级: 姓名: 学号: 设计时间:2010年1月17日——2010年5月XX日 成绩: 指导教师:楼建华

一、题目 二、概要设计 1.存储结构 typedef struct{ int row,col;//行,列 datatype v;//非0数值 }Node; typedef struct{ Node data[max];//稀疏矩阵 int m,n,t;//m 行,n 列,t 非0数个数 … … 2.基本操作 ⑴istream& operator >>(istream& input,Matrix *A)//输入 ⑵ostream& operator <<(ostream& output,Matrix *A){//输出 ⑶Matrix operator ~(Matrix a,Matrix b)//转置 ⑷Matrix operator +(Matrix a,Matrix b)//加法 ⑸Matrix operator -(Matrix a,Matrix b)//减法 ⑹Matrix operator *(Matrix a,Matrix b)//乘法 ⑺Matrix operator !(Matrix a,Matrix b)//求逆 三、详细设计 (1)存储要点 position[col]=position[col-1]+num[col-1]; 三元组表(row ,col ,v) 稀疏矩阵((行数m ,列数n ,非零元素个数t ),三元组,...,三元组) 1 2 3 4 max-1

几类特殊线性变换及其二阶矩阵优秀教学设计

几类特殊线性变换及其二阶矩阵 【教学目标】 1.了解二阶矩阵的概念,线性变换与二阶矩阵之间的关系。 2.熟练运用旋转变换、反射变换、伸缩变换、投影变换、切变变换这五种变换的概念与矩阵表示解决具体问题。 3.亲历几类特殊线性变换的探索过程,体验分析归纳得出其二阶矩阵,进一步发展学生的探究、交流能力。 【教学重难点】 重点:掌握几类特殊线性变换及其二阶矩阵。 难点:旋转变换、反射变换、伸缩变换、投影变换、切变变换的实际应用。 【教学过程】 一、直接引入 师:今天这节课我们主要学习几类特殊线性变换及其二阶矩阵,这节课的主要内容有旋转变换、反射变换、伸缩变换、投影变换、切变变换,并且我们要掌握这些知识的具体应用,能熟练解决相关问题。 二、讲授新课 (1)教师引导学生在预习的基础上了解线性变换与二阶矩阵内容,形成初步感知。 (2)首先,我们先来学习线性变换及其相关概念,它的具体内容是: 在平面直角坐标系xoy 内,很多几何变换都具有下列形式:x ax by y cx dy '=+??'=+? ③; 其中系数a ,b ,c ,d 均为常数,我们把形如③的几何变换叫做线性变换。 ③式叫做这个线性变换的坐标变换公式。 (,)P x y '''是(,)P x y 在这个线性变换作用下的像。 像这样,由4个数a ,b ,c ,d 排成的正方形表a b c d ?? ???称为二阶矩阵。数a ,b ,c ,d 称为矩阵的元素 元素全为0的二阶矩阵0000?? ???称为零矩阵,简记为0。

矩阵1001?? ??? 称为二阶单位矩阵,记为E 它是如何在题目中应用的呢?我们通过一道例题来具体说明。 例:在直角坐标系xoy 内,将每个点绕原点O 按逆时针方向旋转30°的变换称为旋转角是30°的旋转变换。求点(1,0)A 在这个旋转变换作用下的像A '。 解析:教师板书。 (3)接着,我们再来看下旋转变换的概念,它的具体内容是: 在直角坐标系xOy 内的每个点绕原点O 按逆时针方向旋转α角的旋转变换(通常记为n R )的坐标变换公式:cos sin sin cos x x y y x y αααα'=-??'=+?,对应的二阶矩阵为:cos sin sin cos αααα-?? ??? 。 它是如何在题目中应用的呢?我们也通过一道例题来具体说明。 例:例:在直角坐标系xoy 内,将每个点绕原点O 按逆时针方向旋转30°的变换称为旋转角是30°的旋转变换,写出这个旋转变化的表达式。 解析:教师板书。 (4)接着,我们再来看下反射变换内容,它的具体内容是: 一般地,我们把平面上的任意一点P 变成它关于直线l 的对称点P '的线性变换叫做关于l 的反射。 它是如何在题目中应用的呢?我们也通过一道例题来具体说明。 例:在直角坐标系xoy 内,直线l 过原点,倾斜角为α。求关于直线l 的反射变换的坐标变换公式。 学生板书,教师纠正解答。 (5)接着,我们再来看下伸缩变换内容,它的具体内容是: 在直角坐标系xOy 内,将每个点的横坐标变为原来1k 倍,纵坐标变为原来的2k 倍,其中1k ,2k 均为非零常数,我们称这样的几何变换为伸缩变换。 它是如何在题目中应用的呢?我们也通过一道例题来具体说明。 例:直角坐标系xOy 内,将每一点的纵坐标变为原来的2倍,横坐标保持不变。 (1)试确定该伸缩变换的坐标变换公式及其对应的二阶矩阵。 (2)求点A (1,1)-在该伸缩变换作用下的像A ' 教师请同学上讲台解答,并纠正总结。

数据结构三元组表存储结构实现稀疏矩阵应用课程方案实验报告

高二《数系的扩充与复数的概念》说课稿 高二《数系的扩充与复数的概念》说稿 《数系的扩充与复数的概念》是北师大版普通高中程标准数学实验教材选修1-2第四第一节的内容,大纲时安排一时。主要包括数系概念的发展简介,数系的扩充,复数相关概念、分类、相等条,代数表示和几何意义。 复数的引入是中学阶段数系的又一次扩充,引入复数以后,这不仅可以使学生对于数的概念有一个初步的、完整的认识,也为进一步学习数学打下了基础。通过本节学习,要使学生在问题情境中了解数系扩充的过程以及引入复数的必要性,学习复数的一些基本知识,体会人类理性思维在数系扩充中的作用。 在学习了这节以后,学生首先能知道数系是怎么扩充的,并且这种扩充是必要的,虚数单位公开《数系的扩充与复数的概念》说稿在数系扩充过程中的作用,而复数就是一个实数加上一个实数乘以公开《数系的扩充与复数的概念》说稿。学生能清楚的知道一个复数什么时候是虚数,什么时候是纯虚数,两个复数相等的充要条是什么。让学生在经历一系列的活动后,完成对知识的探索,变被动地“接受问题”为主动地“发现问题”,加强学生对知识应用的灵活性,深化学生对复数的认识,从而提高分析问题和解决问题的能力。 教学目标为:1.在问题情境中了解数系的扩充过程。体会实际需求与数学内部的矛盾(数的运算规则、方程求根)在数系扩充过程中的

作用,感受人类理性思维的作用以及数与现实世界的联系。. 2.理解复数的有关概念、数系间的关系、和几何表示。 3.掌握复数的分类和复数相等的条。 4体会类比、转化、数形结合思想在数学发现和解决数学问题中的作用。 教学重点为认识i的意义、复数的有关概念以及复数相等的条. 教学难点为复数相关概念的理解和复数的几何意义的理解 复数的概念是整个复数内容的基础,复数的有关概念都是围绕复数的代数表示形式展开的。虚数单位、实部、虚部的命名,复数想等的充要条,以及虚数、纯虚数等概念的理解,都应促进对复数实质的理解,即复数实际上是一有序实数对。类比实数可以用数轴表示,把复数在直角坐标系中表示出,就得到了复数的几何表示,这就把数和形有机的结合了起。 在学习本节的过程中,复数的概念如果单纯地讲解或介绍会显得较为枯燥无味,学生不易接受,教学时,采用讲解已学过的数集的扩充的历史,让学生体会到数系的扩充是生产实践的需要,也是数学学科自身发展的需要;介绍数的概念的发展过程,使学生对数的形成、发展的历史和规律,各种数集中之间的关系有着比较清晰、完整的认识从而让学生积极主动地建构虚数的概念、复数的概念、复数的分类。由于学生对数系扩充的知识不熟悉,对了解实数系扩充到复数系的过程有困难,也就是对虚数单位公开《数系的扩充与复数的概念》说稿的引入难以理解。另外虚数单位公开《数系的扩充与复数的概念》说

数据结构—矩阵课后题

P-219-29T template T** LowerMatrix::operator*(const LowerMatrix& m) const{ if(n!=m.n) throw SizeMismatch(); T** w = new T *[n]; for(int i=0;i T** UpperMatrix::operator*(const LowerMatrix& m) const{ int front=0; if(n!=m.n) throw SizeMismatch(); T** c = new T *[n]; for(int i=0;i

for(int j=0;j SparseMatrix& SparseMatrix::Store(const int& x,int i,int j){ if(i<1 || j<1 || i>rows || j>cols ) throw OutOfBounds(); if(terms = = 0){ if(x ==0 ) return *this; a[0].row = i; a[0].col = j; a[0].value = x; terms++; return *this; } int location = a[0].row*cols + a[0].col; int other = i*cols + j; int k = 0; while(klocation){ k++; if(k!=terms) location = a[k].row*cols + a[k].col; } if(k == terms){ if(terms = = MaxTerms) throw OutOfBounds();

数据结构——矩阵

软件学院 上机实验报告 课程名称:数据结构 实验项目:矩阵 实验室:耘慧420 姓名:学号 专业班级:实验时间:2016.11.24 实验成绩评阅教师

一、实验目的及要求 1. 掌握稀疏矩阵压缩存储方法(三元组顺序表存储)。 2. 完成压缩存储下矩阵计算(矩阵转置)。 二、性质 验证性 三、实验学时 2 学时 四、实验环境 C 与C++ 程序设计学习与实验系统 五、实验内容及步骤 实验内容: 1.实现矩阵压缩存储。(静态数组压缩存储或直接输入矩阵非0 元均可) 2.实现矩阵转置算法。 3.实现矩阵快速转置。 实验步骤: 1.实现矩阵压缩存储。(静态数组压缩存储或直接输入矩阵非0 元均可)

2. 实现矩阵转置算法TransposeSMatrix(TSMatrix M,TSMatrix &T) 。 3. 实现矩阵快速转置FastTransposeSMatrix(TSMatrix M,TSMatrix &T) 。 4. 主函数中创建矩阵M,将M 调用转置算法转置成矩阵N,调用快速转置算法转化 成矩阵T。 六、实验数据及结果分析 七、总结 了解了矩阵的一些知识,懂得了矩阵的一些算法。并且在实际上机中,学会了矩阵的程序的编写方法。

附录源程序清单插入; #include #include"malloc.h" #include #include #define OK 1 #define ERROR 0 #define MAXSIZE 12500 #define MAXRC 1000 typedef int ElemType; typedef int Status; typedef struct { int i,j; ElemType e; }Triple; typedef struct{ Triple data[MAXSIZE+1]; int rpos[MAXRC+1]; int mu,tu,nu; }RLSMatrix;

数据结构试卷及答案压缩版

《数据结构》试卷及答案 1.算法分析的目的是( )。 A.找出数据结构的合理性 B.研究算法中输入和输出的关系 C.分析算法的效率以求改进 D.分析算法的易懂性和文档性 2.()是具有相同特性数据元素的集合,是数据的子集。 A.数据符号 B.数据对象 C.数据 D.数据结构 3.用链表表示线性表的优点是( )。 A.便于随机存取 B.花费的存储空间比顺序表少 C.便于插入与删除 D.数据元素的物理顺序与逻辑顺序相同 4.输入序列为(A,B,C,D)不可能的输出有()。 A.(A,B,C,D) B. (D,C,B,A) C. (A,C,D,B) D . (C,A,B,D) 5.在数组表示的循环队列中,front、rear分别为队列的头、尾指针,maxSize为数组的最大长度,队满的条件是( )。 A. front=maxSize B. (rear+1)%maxSize=front C. rear=maxSize D. rear=front 6.设有串t='I am a good student ',那么Substr(t,6,6)=()。 A. student B. a good s C. good D. a good 7.设有一个对称矩阵A,采用压缩存储方式,以行序为主序存储a11为第一个元素,其存储地址为1,每个元素占一个地址空间,则a85地址为()。 A.23 B.33 C.18 D. 40 8.已知广义表LS=(A,(B,C,D),E)运用head和tail函数,取出LS中原子b的运算()。 A. Gethead(Gethead(LS)) B. Gettail(Gethead(LS)) C. Gethead(Gethead(Gettail(LS))) D. Gethead(Gettail(LS)) 9.若已知一棵二叉树先序序列为ABCDEFG,中序序列为CBDAEGF,则其后序序列为( ) A. CDBGFEA B. CDBFGEA C. CDBAGFE D. BCDAGFE 10.下列存储形式中,( ) 不是树的存储形式。 A.双亲表示法 B.左子女右兄弟表示法 C.广义表表示法 D.顺序表示法 11.对待排序的元素序列进行划分,将其分为左、右两个子序列,再对两个子序列施加同样的排序操作,直到子序列为空或只剩一个元素为止。这样的排序方法是( )。 A.直接选择排序 B.直接插入排序 C.快速排序 D.起泡排序 12.采用折半查找方法进行查找,数据文件应为(),且限于()。

数据结构C语言版-稀疏矩阵的三元组顺序表存储表示和实现

typedef int ElemType; // 稀疏矩阵的三元组顺序表存储表示 #define MAXSIZE 100 // 非零元个数的最大值 typedef struct { int i,j; // 行下标,列下标 ElemType e; // 非零元素值 }Triple; typedef struct { Triple data[MAXSIZE+1]; // 非零元三元组表,data[0]未用 int mu,nu,tu; // 矩阵的行数、列数和非零元个数 }TSMatrix; // 创建稀疏矩阵M int CreateSMatrix(TSMatrix *M) { int i,m,n; ElemType e; int k; printf("请输入矩阵的行数,列数,非零元素个数:(逗号)\n"); scanf("%d,%d,%d",&(*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),元素值:(逗号)\n", i,(*M).mu,(*M).nu); scanf("%d,%d,%d",&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);

数据结构实验五矩阵的压缩存储与运算

第五章矩阵的压缩存储与运算 【实验目的】 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-1 k= 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. 三对角矩阵

数据结构课程设计稀疏矩阵

稀疏矩阵应用 摘要本课程设计主要实现在三元组存储结构与十字链表存储结构下输入稀疏矩阵,并对稀疏矩阵进行转置,相加,相乘操作,最后输出运算后的结果。在程序设计中,考虑到方法的难易程度,采用了先用三元组实现稀疏矩阵的输入,输出,及其转置,相加,相乘操作的方法,再在十字链表下实现。程序通过调试运行,结果与预期一样,初步实现了设计目标。 关键词程序设计;稀疏矩阵;三元组;十字链表 1 引言 1.1课程设计任务 本课程设计主要实现在三元组存储结构与十字链表存储结构下输入稀疏矩阵,并对稀疏矩阵进行转置,相加,相乘操作,最后输出运算后的结果。稀疏矩阵采用三元组和十字链表表示,并在两种不同的存储结构下,求两个具有相同行列数的稀疏矩阵A和B的相加矩阵C,并输出C;求出A的转置矩阵D,输出D;求两个稀疏矩阵A和B的相乘矩阵E,并输出E。 1.2课程设计性质 数据结构课程设计是重要地实践性教学环节。在进行了程序设计语言课和《数据结构》课程教学的基础上,设计实现相关的数据结构经典问题,有助于加深对数据结构课程的认识。本课程设计是数据结构中的一个关于稀疏矩阵的算法的实现,包括在三元组和十字链表下存储稀疏矩阵,并对输入的稀疏矩阵进行转置,相加,相乘等操作,最后把运算结果输出。此课程设计要求对数组存储结构和链表存储结构非常熟悉,并能熟练使用它们。 1.3课程设计目的

其目的是让我们在学习完C、数据结构等课程基础上,掌握多维数组的逻辑结构和存储结构、掌握稀疏矩阵的压缩存储及转置,相加,相乘等基本操作,并用不同的方法输出结果,进一步掌握设计、实现较大系统的完整过程,包括系统分析、编码设计、系统集成、以及调试分析,熟练掌握数据结构的选择、设计、实现以及操作方法,为进一步的应用开发打好基础。 2需求分析 2.1设计函数建立稀疏矩阵及初始化值和输出稀疏矩阵的值 本模块要求设计函数建立稀疏矩阵并初始化,包括在三元组结构下和十字链表结构下。首先要定义两种不同的结构体类型,在创建稀疏矩阵时,需要设计两个不同的函数分别在三元组和十字链表下创建稀疏矩阵,在输入出现错误时,能够对错误进行判别处理,初始化稀疏矩阵都为空值,特别注意在十字链表下,对变量进行动态的地址分配。在设计输出稀疏矩阵的值的函数时,也要针对两种不同的情况,分别编制函数,才能准确的输出稀疏矩阵。在对稀疏矩阵进行初始化及输出值时,均只输出非零元素的值和它所在的所在行及所在列。 2.2构造函数进行稀疏矩阵的转置并输出结果 本模块要求设计函数进行稀疏矩阵的转置并输出转置后的结果,由于对稀疏函数的转置只对一个矩阵进行操作,所以实现起来难度不是很大,函数也比较容易编写。在编写函数时,要先定义一个相应的结构体变量用于存放转置后的矩阵,最后把此矩阵输出。 2.3构造函数进行两个稀疏矩阵相加及相乘并输出最终的稀疏矩阵 本模块要求设计相加和相乘函数对两个矩阵进行运算,并输出最终的稀疏矩阵,在进行运算前,要对两个矩阵进行检查,看是不是相同类型的矩阵,因为两个矩阵相加要求两个矩阵一定是同一类型的矩阵,定义相应的矩阵类型用于存放两个矩阵相加相乘后的结果矩阵,这个结果矩阵的行数列数需要综合多方面情况来确定。这四个函数也是整个程序的难点,需要灵活运用数组及指针的特点。 2.4退出系统

数据结构C语言版-稀疏矩阵三元组的基本操作

数据结构 课程设计实验报告 内容名称:稀疏矩阵的基本操作成员1:09213020-陈东 成员2:09213040-蔡丹 班级:09数31 教师:李晓翠 江苏师范大学 数学科学学院

目录 1.序言 (3) 1.1数据结构背景 (3) 1.2课程设计目的 (3) 1.3 课程名称 (3) 1.4设计要求 (3) 1.5设计说明 (3) 2.课程任务设计说明书 (5) 3.需求分析 (6) 3.1题目名称 (6) 3.2题目内容 (6) 3.3题目分析 (6) 4.概要设计 (7) 4.1稀疏矩阵存储结构 (7) 4.2.稀疏矩阵的基本操作 (7) 4.3各模块设计要求 (8) 4.4总体功能流程图 (9) 4.4.1存储结构流程图 (9) 4.4.2稀疏矩阵基本操作流程图 (10) 5.详细设计 (11) 5.1设计原理 (11) 5.2基本函数实现流程图 (13) 6.主要函数代码 (21) 7.调试与操作说明 (27) 7.1操作说明 (27) 7.2调试结果………………………………………………………………………………. ..28 7.3结果分析 (31) 8.设计体会 (32) 9.参考文献 (32) 10.分工说明 (33)

1.序言 1.1数据结构背景 数据结构是一门理论性强、思维抽象、难度较大的课程,是基础课和专业课之间的桥梁。该课程的先行课程是计算机基础、程序设计语言、离散数学等,后续课程有操作系统、编译原理、数据库原理、软件工程等。通过本门课程的学习,我们应该能透彻地理解各种数据对象的特点,学会数据的组织方法和实现方法,并进一步培养良好的程序设计能力和解决实际问题的能力,而且该课程的研究方法对我们学生在校和离校后的学习和工作,也有着重要的意义。 数据结构是计算机科学与技术专业的一门核心专业基础课程,在该专业的课程体系中起着承上启下的作用,学好数据结构对于提高理论认知水平和实践能力有着极为重要的作用。学习数据结构的最终目的是为了获得求解问题的能力。对于现实世界中的问题,应该能从中抽象出一个适当的数学模型,该数学模型在计算机内部用相应的数据结构来表示,然后设计一个解此数学模型的算法,再进行编程调试,最后获得问题的解答。 基于此原因,我们开设了数据结构课程设计。针对数据结构课程的特点,着眼于培养我们的实践能力。实习课程是为了加强编程能力的培养,鼓励学生使用新兴的编程语言。相信通过数据结构课程实践,无论是理论知识,还是实践动手能力,同学们都会有不同程度上的提高。 1.2课程设计的目的 巩固和深刻理解―数据结构(C语言版)‖课程所讲解的C语言作为数据结构的算法的描述,掌握对数据的存储结构和算法进行描述时,尽量考虑C 语言的特色。培养学生独立工作和创新思维的能力,取得设计与调试的实践经验。提高和加强计算机应用及软件开发能力。通过课程设计题目的练习,强化学生对所学知识的掌握及对问题分析和任务定义的理解,对每到题目作出了相应的逻辑分析和数据结构的选择,通过对任务的分析,为操作对象定义相应的数据结构,以过程化程序设计的思想方法为原则划分各个模块,定

相关文档
最新文档