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

合集下载

中国农业大学_821数据结构_《数据结构》实验笔记(4)

中国农业大学_821数据结构_《数据结构》实验笔记(4)

实验4 数组与广义表
课程实验共安排8个难度各易的实验,训练重点在于掌握基本的数据结构,而不强调面面俱到。

通过实验,掌握抽象数据类型的概念和基本数据结构,掌握各种数据结构内在的逻辑关系,各种数据结构在计算机中的存储表示,基于各种数据结构上的基本运算、算法实现及算法分析。

●实验目的
(1) 了解数组的存储表示方法,掌握其在作为运行的存储结构中的地址计算方法。

(2) 了解特殊矩阵及稀疏矩阵压缩存储特点和适用范围,领会其运算采用的处理方法。

(3) 了解广义表的结构特点及存储表示方法,掌握其主要运算的实现方法。

●实验内容
1. 鞍点问题
[问题描述] 若矩阵A中的某一元素A[i, j]是第i行中的最小值,而又是第j列中的最大值,则称A[i, j]为矩阵A中的一个鞍点。

请写出一个可确定此鞍点位置的算法(如果这个鞍点存在),并给出此算法的时间复杂度。

[基本要求] 要求算法要考虑某行中具有多个相同的且又是该行中最小的元素的情况。

2. 对称矩阵运算
[问题描述] 已知A和B为两个n×n阶的对称矩阵,试编写一个计算对称矩阵A和B的乘积的函数。

[基本要求] 输入时对称矩阵只输入下三角形元素,存入一维数组,即采用压缩存储。

3. 广义表运算
[问题描述] 在给定的广义表中查找数据为x的结点,编写该算法。

[基本要求] 广义表采用扩展线性链表存储表示。

●实验要求
(1) 认真分析题目。

(2) 进行算法设计。

(3) 编写程序代码
(4) 上机调试程序。

(5) 保存和打印出程序的运行结果,并结合程序进行分析。

数据结构之稀疏矩阵稀疏矩阵的存储方式和操作分析

数据结构之稀疏矩阵稀疏矩阵的存储方式和操作分析

数据结构之稀疏矩阵稀疏矩阵的存储方式和操作分析稀疏矩阵是指矩阵中大部分元素为零的特殊矩阵。

在实际应用中,稀疏矩阵经常出现,如图像处理、网络分析和科学计算等领域。

对于稀疏矩阵的存储和操作是数据结构中的重要内容。

本文将介绍稀疏矩阵的存储方式和相关操作的分析。

一、稀疏矩阵存储方式稀疏矩阵的存储方式有多种,其中三元组顺序表和二维数组是比较常用的方法。

1. 三元组顺序表三元组顺序表是一种基于行优先存储的方式,可以将稀疏矩阵以非零元素的形式存储起来。

主要包括行号、列号和元素值三个信息。

以一个4x5的稀疏矩阵为例,其中有三个非零元素分别为A[1][2]=3, A[2][3]=4, A[3][4]=5。

可以使用三元组顺序表来存储:```行号列号元素值1 2 32 3 43 4 5```三元组顺序表的优点是可以节省存储空间,同时也方便进行矩阵的操作。

但是在进行元素的查找和修改时,效率较低。

2. 二维数组二维数组是一种常见的矩阵表示方法,可以直接使用二维数组来表示稀疏矩阵。

其中非零元素的位置用实际的值表示,其余位置用零值表示。

以同样的4x5的稀疏矩阵为例,使用二维数组存储如下:```0 0 0 0 00 0 3 0 00 0 0 4 00 0 0 0 5```二维数组的优点是简单直观,并且可以快速进行元素的查找和修改。

但当稀疏矩阵的规模较大时,会造成较高的存储资源浪费。

二、稀疏矩阵的操作分析对于稀疏矩阵的操作,主要包括矩阵的转置、相加、相乘等。

1. 转置操作稀疏矩阵的转置是指将原始矩阵的行与列对调。

对于三元组顺序表来说,转置操作主要涉及到行号和列号的交换。

而对于二维数组来说,可以直接在取值的时候将行号和列号对调即可。

2. 相加操作稀疏矩阵的相加操作是指将两个矩阵对应位置的元素相加。

对于三元组顺序表来说,可以通过遍历两个矩阵的非零元素,并将其对应位置的元素相加。

而对于二维数组来说,可以直接将对应位置的元素相加即可。

3. 相乘操作稀疏矩阵的相乘操作是指将两个矩阵相乘得到一个新的矩阵。

密集矩阵和稀疏矩阵

密集矩阵和稀疏矩阵

密集矩阵和稀疏矩阵在计算机科学和数学领域,矩阵是一种重要的数据结构,用于表示线性关系和进行各种数学运算。

根据矩阵中元素的分布情况,可以将矩阵分为密集矩阵和稀疏矩阵。

密集矩阵是指矩阵中绝大多数元素都是非零的情况。

换句话说,密集矩阵中的元素很少为零。

这意味着在计算机内存中存储密集矩阵所需的空间较大。

由于矩阵运算中通常涉及到对每个元素的操作,密集矩阵在计算过程中需要更多的计算资源和时间。

相比之下,稀疏矩阵是指矩阵中大部分元素都是零的情况。

在实际应用中,很多矩阵都是稀疏的,比如社交网络中的好友关系矩阵、文本处理中的词频矩阵等。

由于稀疏矩阵中的元素很少,所以在计算机内存中存储稀疏矩阵所需的空间相对较小。

此外,由于稀疏矩阵中有大量的零元素,可以采用特殊的存储方式来节省存储空间,并且可以通过跳过零元素的计算,提高计算效率。

对于密集矩阵,由于每个元素都需要存储和计算,所以在进行矩阵运算时需要耗费大量的时间和资源。

而对于稀疏矩阵,由于零元素的存在,可以通过跳过这些零元素的计算,大大减少了运算的时间和资源消耗。

这使得稀疏矩阵在很多应用中具有重要的优势。

在实际应用中,根据矩阵的特点选择适合的存储方式是非常重要的。

如果矩阵是密集矩阵,并且计算量较小,可以选择直接存储矩阵的元素。

如果矩阵是稀疏矩阵,并且计算量较大,可以选择采用压缩存储方式,如压缩稀疏矩阵(CSR)或压缩列矩阵(CSC)等。

密集矩阵和稀疏矩阵是在计算机科学和数学领域中常见的概念。

密集矩阵适用于元素较多且计算量较小的情况,而稀疏矩阵适用于元素较少且计算量较大的情况。

根据实际应用的需求,选择合适的存储方式和计算方法可以提高计算效率和节省资源。

《数据结构与算法》第五章-数组和广义表学习指导材料

《数据结构与算法》第五章-数组和广义表学习指导材料

《数据结构与算法》第五章数组和广义表本章介绍的数组与广义表可视为线性表的推广,其特点是数据元素仍然是一个表。

本章讨论多维数组的逻辑结构和存储结构、特殊矩阵、矩阵的压缩存储、广义表的逻辑结构和存储结构等。

5.1 多维数组5.1.1 数组的逻辑结构数组是我们很熟悉的一种数据结构,它可以看作线性表的推广。

数组作为一种数据结构其特点是结构中的元素本身可以是具有某种结构的数据,但属于同一数据类型,比如:一维数组可以看作一个线性表,二维数组可以看作“数据元素是一维数组”的一维数组,三维数组可以看作“数据元素是二维数组”的一维数组,依此类推。

图5.1是一个m行n列的二维数组。

5.1.2 数组的内存映象现在来讨论数组在计算机中的存储表示。

通常,数组在内存被映象为向量,即用向量作为数组的一种存储结构,这是因为内存的地址空间是一维的,数组的行列固定后,通过一个映象函数,则可根据数组元素的下标得到它的存储地址。

对于一维数组按下标顺序分配即可。

对多维数组分配时,要把它的元素映象存储在一维存储器中,一般有两种存储方式:一是以行为主序(或先行后列)的顺序存放,如BASIC、PASCAL、COBOL、C等程序设计语言中用的是以行为主的顺序分配,即一行分配完了接着分配下一行。

另一种是以列为主序(先列后行)的顺序存放,如FORTRAN语言中,用的是以列为主序的分配顺序,即一列一列地分配。

以行为主序的分配规律是:最右边的下标先变化,即最右下标从小到大,循环一遍后,右边第二个下标再变,…,从右向左,最后是左下标。

以列为主序分配的规律恰好相反:最左边的下标先变化,即最左下标从小到大,循环一遍后,左边第二个下标再变,…,从左向右,最后是右下标。

例如一个2×3二维数组,逻辑结构可以用图5.2表示。

以行为主序的内存映象如图5.3(a)所示。

分配顺序为:a11 ,a12 ,a13 ,a21 ,a22,a23 ; 以列为主序的分配顺序为:a11 ,a21 ,a12 ,a22,a13 ,a23 ; 它的内存映象如图5.3(b)所示。

数据结构——特殊矩阵

数据结构——特殊矩阵

数据结构——特殊矩阵数据结构,特殊矩阵特殊矩阵是一种在计算机科学中常见的数据结构,它是由一组元素组成的二维数组。

特殊矩阵具有特定的属性,使得它们在特定的问题领域中非常有用。

在这篇文章中,我们将介绍几种常见的特殊矩阵,并讨论它们的应用。

首先,我们来讨论对角矩阵。

对角矩阵是指只有主对角线上有非零元素的矩阵。

其他位置上的元素都是零。

对角矩阵可以用于多种计算问题,如线性方程组的求解和矩阵乘法。

由于对角矩阵的特殊结构,它的存储和运算都可以更高效地执行。

其次,我们来讨论上三角矩阵和下三角矩阵。

上三角矩阵是指只有主对角线及其以上的元素都不为零的矩阵,而下三角矩阵则是指只有主对角线及其以下的元素都不为零的矩阵。

这两种特殊矩阵也常用于矩阵运算中,因为它们具有更高效的存储和计算方式。

另一个常见的特殊矩阵是稀疏矩阵。

稀疏矩阵是指其中大部分元素都为零的矩阵。

在很多应用中,矩阵的元素并不是均匀分布的,而是集中在一些特定的位置。

因此,使用传统的二维数组来存储这种矩阵会浪费很多的空间。

稀疏矩阵的一个常见的存储方法是压缩矩阵,只存储非零元素的值和其对应的位置。

最后,我们来讨论特殊矩阵的应用。

特殊矩阵广泛应用于图论、网络分析和科学计算等领域。

在图论中,邻接矩阵是一种常见的特殊矩阵,用于表示图的连接关系。

在网络分析中,PageRank算法使用了特殊矩阵的运算方法,用于计算网页的重要性。

在科学计算中,特殊矩阵的高效存储和计算方式可以大大提高计算效率。

总结起来,特殊矩阵是一种重要的数据结构,它具有特定的结构和属性,使得它们在特定的问题领域中非常有用。

了解特殊矩阵的类型和应用可以帮助我们更好地理解和应用数据结构。

希望本文对读者对特殊矩阵有更深入的了解,并能在实际问题中灵活应用。

数据结构(第二版)习题谜底第4章[基础]

数据结构(第二版)习题谜底第4章[基础]

数据结构(第二版)习题答案第4章第4章字符串、数组和特殊矩阵4.1稀疏矩阵常用的压缩存储方法有(三元组顺序存储)和(十字链表)两种。

4.2设有一个10 × 10的对称矩阵 A采用压缩方式进行存储,存储时以按行优先的顺序存储其下三角阵,假设其起始元素 a00的地址为 1,每个数据元素占 2个字节,则 a65的地址为( 53 )。

4.3若串S =“software”,其子串的数目为( 36 )。

4.4常对数组进行的两种基本操作为(访问数据元素)和(修改数组元素)。

4.5 要计算一个数组所占空间的大小,必须已知(数组各维数)和(每个元素占用的空间)。

4.6对于半带宽为 b的带状矩阵,它的特点是:对于矩阵元素 aij,若它满足(|i-j|>b),则 aij = 0。

4.7字符串是一种特殊的线性表,其特殊性体现在(该线性表的元素类型为字符)。

4.8试编写一个函数,实现在顺序存储方式下字符串的 strcompare (S1,S2)运算。

【答】:#include <stdio.h>#include <string.h>#define MAXSIZE 100typedef struct{char str[MAXSIZE];int length;}seqstring;/* 函数 strcompare()的功能是:当 s1>s2时返回 1,当 s1==s2时返回 0,当 s1<s2时返回-1*/int strcompare(seqstring s1,seqstring s2){ int i,m=0,len;len=s1.length<s2.length ?s1.length:s2.length;for(i=0;i<=len;i++)if(s1.str[i]>s2.str[i]){m=1;break;}else if(s1.str[i]<s2.str[i]){m=-1;break;}return m;}int main(){ seqstring s1,s2;int i,m;printf("input char to s1:\n");gets(s1.str);s1.length=strlen(s1.str);printf("input char to s2:\n");gets(s2.str);s2.length=strlen(s2.str);m=strcompare(s1,s2);if(m==1) printf("s1>s2\n");else if(m==-1) printf("s2>s1\n");else if(m==0) printf("s1=s2\n");}4.9试编写一个函数,实现在顺序存储方式下字符串的replace(S,T1,T2)运算。

数据结构之特殊矩阵

数据结构之特殊矩阵

数据结构之特殊矩阵特殊矩阵:即指⾮零元素或零元素的分布有⼀定规律的矩阵,为了节省存储空间,我们可以对这类矩阵进⾏压缩存储;即为多个相同的⾮零元素只分配⼀个存储空间;对零元素不分配空间⼀、稀疏矩阵稀疏矩阵:设矩阵A中有s个⾮零元素,若s远远⼩于矩阵元素的总数,则称A为稀疏矩阵。

如果我们把整个数据存⼊内存,如果每个单元格⼀个字节则需要6*5个字节我们要对稀疏矩阵进⾏压缩存储:即只存储稀疏矩阵中的⾮零元素和矩阵的⼤⼩;采⽤三元组的表⽰⽅式例如:(6,5,30)矩阵⼤⼩、(0,3,34)、(1,1,1)、(1,3,3)、(1,4,59)、(2,0,23)、(2,2,12)、(3,1,45)、(3,3,51)、(3,4,46)、(4,2,34)、(5,0,78)、(5,2,56)、(5,4,2)稀疏矩阵占⽤空间⼤⼩:7*3个字节⼆、三⾓矩阵:上三⾓矩阵、下三⾓矩阵三⾓矩阵中的重复元素c(常量)可共享⼀个存储空间,其余的元素正好有n(n+1)/2个,因此,三⾓矩阵可压缩存储到向量s[0..n(n+1)/2]中,其中c存放在向量的最后⼀个分量中================上三⾓矩阵=================以主对⾓线划分,三⾓矩阵有上三⾓和下三⾓两种。

上三⾓矩阵,它的下三⾓(不包括主对⾓线)中的元素均为常数或者0,在⼤多数情况下,三⾓矩阵常数为零。

该图就是⼀个上三⾓矩阵a(m,n)=a(4,4)是⼀个4阶的⽅阵,将该矩阵压缩存储到⼀维数组S后下标012345678910数据12346781112160转换后⼀维数组的长度:S.length=1+n(n+1)/2最后⼀个位置:S[n(n+1)/2]=0其他上三⾓元素的位置在⼀维数组S的下标:S[i(2n-i+1)/2+j-i ]=a(i,j) ;例如 a(2,3)=S[2*(2*4-2+1)/2+3-2]=S[8]=12================下三⾓矩阵=================以主对⾓线划分,三⾓矩阵有上三⾓和下三⾓两种。

中南大学数据结构与算法第5章数组和广义表课后作业答案

中南大学数据结构与算法第5章数组和广义表课后作业答案

第5章数组与广义表习题练习答案5.1请按行及按列优先顺序列出四维数组A2*3*2*3的所有元素在内存中的存储次序,开始结点为a0000。

解:按行优先的顺序排列时,先变化右边的下标,也就是右到左依次变化,这个四维数组的排列是这样的:(将这个排列分行写出以便与阅读,只要按从左到右的顺序存放就是在内存中的排列位置) a0000a0001a0002a0010a0011a0012a0100a0101a0102a0110a0111a0112a0200a0201a0202a0210a0211a0212a1000a1001a1002a1010a1011a1012a1100a1101a1102a1110a1111a1112a1200a1201a1202a1210a1211a1212按列优先的顺序排列恰恰相反,变化最快的是左边的下标,然后向右变化,所以这个四维数组的排列将是这样的,(这里为了便于阅读,也将其书写为分行形式):a0000a1000a0100a1100a0200a1200a0010a1010a0110a1110a0210a1210a0001a1001a0101a1101a0201a1201a0011a1011a0111a1111a0211a1211a0002a1002a0102a1102a0202a1202a0012a1012a0112a1112a0212a02125.2 给出C语言的三维数组地址计算公式。

解:因为C语言的数组下标下界是0,所以Loc(A mnp)=Loc(A000)+((i*n*p)+k)*d其中Amnp表示三维数组。

Loc(A000)表示数组起始位置。

i、j、k表示当前元素的下标,d表示每个元素所占单元数。

5.3设有三对角矩阵A n*n,将其三条对角线上的元素逐行地存储到向量B[0...3n-3]中,使得B[k]=a ij,求:(1)用i , j 表示k的下标变换公式。

(2)用k 表示i,j 的下标变换公式。

稀疏矩阵的快速转置算法(c语言)详解

稀疏矩阵的快速转置算法(c语言)详解

稀疏矩阵的快速转置算法(C语言)详解稀疏矩阵是指大部分元素为零的矩阵,只有少数元素为非零的矩阵。

在实际的计算机科学和工程应用中,稀疏矩阵经常出现,比如在图形图像处理、科学计算和数据分析等领域。

而稀疏矩阵的快速转置算法是针对稀疏矩阵的一种重要算法,它可以有效地将稀疏矩阵进行转置,从而方便后续的计算和操作。

快速转置算法的实现是计算机科学中一个经典的问题,对于稀疏矩阵来说更是如此。

在本文中,我们将从深度和广度两个方面对稀疏矩阵的快速转置算法进行全面评估,探讨其原理和实现细节,并对其进行详细解析。

让我们简要了解一下稀疏矩阵的结构和特点。

稀疏矩阵通常由三个部分组成:行数组、列数组和值数组。

行数组存储非零元素所在的行号,列数组存储非零元素所在的列号,而值数组则存储非零元素的值。

由于稀疏矩阵的特殊性,传统的矩阵转置算法并不适用于稀疏矩阵,因此需要设计一种特殊的快速转置算法来处理稀疏矩阵。

在对快速转置算法进行详细解析之前,让我们先来看一下转置操作的定义。

对于一个矩阵A,其转置矩阵记为A^T,即A的行与列互换。

在稀疏矩阵的转置操作中,我们需要将原始矩阵中的非零元素按照列索引进行重新排列,同时保持其在矩阵中的相对位置不变。

实现稀疏矩阵的快速转置算法涉及到矩阵的数据结构和算法设计方面的知识。

传统的方法是通过对每个非零元素进行遍历,并将其插入到新矩阵的相应位置中,但这种方法的时间复杂度较高。

而快速转置算法通过巧妙的数据结构设计和算法优化,可以在更短的时间内完成转置操作,提高了算法的效率。

在C语言中实现稀疏矩阵的快速转置算法需要考虑到内存管理、指针操作和数据结构的设计等方面。

通常情况下,可以使用链表等数据结构来表示稀疏矩阵,同时利用指针进行快速的遍历和操作。

在实际的编程过程中,还需要注意对内存的合理分配和释放,以避免内存泄漏和溢出的问题。

为了更好地理解稀疏矩阵的快速转置算法,我们可以通过具体的代码实现来加深对算法原理的理解。

数据结构与算法教学大纲

数据结构与算法教学大纲

《数据结构与算法》课程教学大纲一、《数据结构》课程说明(一)课程代码:(二)课程英文名称:Data Stucture(三)开课对象:电子专业的本科生(四)课程性质:专业基础课《数据结构》是计算机专业的技术基础课。

主要讲述算法设计和数据结构的基础原理和技术。

是计算机科学与技术专业的核心课程。

由于本课程是计算机程序设计理论基础,所以也是非计算机理工类专业的重要选修课程。

本课程的学习过程也是算法设计的技巧和能力的训练过程。

本课程的先导课程为《C语言》,《计算机基础》。

(五)教学目的:通过本课程的学习,使学生深透地理解数据结构的逻辑结构和物理结构的基本概念以及有关算法,培养基本的、良好的程序设计技能,编制高效可靠的程序,为学习《操作系统》、《编译原理》和《数据库》等课程奠定基础。

(六)教学内容:本课程主要包括绪论、线性表、树型结构、图、查找、排序等几个部分。

通过教学的各个环节使学生达到各章中所提的基本要求。

习题课是重要的教学环节,教师必须予以重视。

(七)学时数、学分数及学时数具体分配学时数: 68学时学分数: 4学分(八)教学方式以多媒体教学手段为主要形式的课堂教学。

(九)考核方式和成绩记载说明考核方式为考试。

严格考核学生出勤情况,达到学籍管理规定的旷课量取消考试资格。

综合成绩根据平时成绩和期末成绩评定,平时成绩占20% ,期末成绩占80% 。

二、讲授大纲与各章的基本要求第一章绪论教学要点:通过本章的教学使学生初步了解《数据结构》的内容和目的,掌握数据结构的概念以及分类、抽象数据类型的表示与实现、算法的概念、算法的特性、算法的目标、算法效率的度量、算法的存储空间需求。

1、使学生准确掌握数据结构的概念。

2、使学生领会抽象数据类型的表示与实现。

3、使学生充分理解算法的概念。

4、明确算法的特性。

5、明确算法的目标。

6、熟练地掌握算法效率的度量。

7、掌握算法的存储空间需求。

教学时数:4学时教学内容:第一节数据结构概述第二节数据结构的概念一、基本概念二、数据结构及分类三、数据结构课程的内容第三节数据类型和抽象数据类型一、数据类型二、抽象数据类型第四节算法和算法分析考核要求:1、数据结构概述(识记)2、数据结构的概念2.1基本概念(识记)2.2数据结构及分类(识记)2.3数据结构课程的内容(识记)3、数据类型和抽象数据类型3.1数据类型(领会)3.2抽象数据类型(领会)4、算法和算法分析(应用)第二章线性表教学要点:通过本章的教学使学生初步了解线性表的结构特点;掌握顺序的和链式的存储结构各自特色;熟练掌握线性表的操作,以及链表的指针运算和各种链表的操作;理解循环链表以及双向链表。

数据结构之特殊矩阵

数据结构之特殊矩阵

数据结构之特殊矩阵特殊矩阵在数据结构中是一个重要的概念,它是一种具有特定性质的矩阵,可以帮助我们解决很多实际问题。

在本文中,我将介绍几种常见的特殊矩阵,并说明它们的结构和用途。

一、对称矩阵对称矩阵是指矩阵的第i行第j列元素等于第j行第i列元素的矩阵。

对称矩阵的主对角线上的元素对称于矩阵的副对角线上的元素。

对称矩阵在图论、物理学和金融学领域有广泛的应用。

例如,在图论中,对称矩阵常用于表示图的邻接矩阵。

二、上三角矩阵上三角矩阵是指矩阵的下三角部分全为0的矩阵。

上三角矩阵可以有效地节省内存空间,并且在矩阵乘法和矩阵求逆等运算中具有重要的作用。

在线性代数中,上三角矩阵常用于解线性方程组和计算特征值等问题。

三、下三角矩阵下三角矩阵是指矩阵的上三角部分全为0的矩阵。

和上三角矩阵一样,下三角矩阵也可以节省空间并且在矩阵运算中有重要的应用。

在数值分析中,下三角矩阵常用于求解线性方程组和计算矩阵的特征值。

四、稀疏矩阵稀疏矩阵是指矩阵中绝大部分元素为0的矩阵。

稀疏矩阵在图论、网络分析和机器学习等领域有广泛的应用。

由于稀疏矩阵的元素非常稀少,因此可以有效地压缩存储和加速计算过程。

在处理大规模数据时,稀疏矩阵的优势更加明显。

五、对角矩阵对角矩阵是指除了主对角线上的元素外,其他元素都为0的矩阵。

对角矩阵在线性代数和微分方程等领域有广泛的应用。

由于对角矩阵的特殊结构,其乘法和逆运算非常简单,可以提高计算效率。

六、压缩矩阵压缩矩阵是一种用于存储稀疏矩阵的数据结构。

常见的压缩矩阵包括行压缩矩阵、列压缩矩阵和坐标压缩矩阵。

压缩矩阵可以提高稀疏矩阵的存储效率,并且可以支持基本的矩阵运算。

总结起来,特殊矩阵是指具有一定特性的矩阵,包括对称矩阵、上三角矩阵、下三角矩阵、稀疏矩阵、对角矩阵和压缩矩阵等。

这些特殊矩阵在不同的领域和问题中有广泛的应用,能够提高存储效率和计算效率,对于处理大规模数据和复杂计算任务具有重要的作用。

因此,了解和熟悉特殊矩阵的结构和特点对于数据结构的学习和实践非常重要。

2021年云南昆明理工大学数据结构教程考研模拟试题A卷(1)

2021年云南昆明理工大学数据结构教程考研模拟试题A卷(1)

2021年云南昆明理工大学数据结构教程考研模拟试题A卷一、单项选择题:(每题3分,共30分)1.非线性结构中每个结点。

A. 无直接前驱结点B. 只有一个直接前驱和直接后继结点C. 无直接后继结点D. 可能有多个直接前驱和多个直接后继结点2.在表长为n的单链表中,算法时间复杂度为O(n)的操作是。

A. 查找单链表中第i个结点B. 在p结点之后插入一个结点C. 删除表中第一个结点D. 删除p结点的直接后继结点3.在链表中最常用的操作是在最后一个数据元素之后插入一个数据元素和删除第一个数据元素,则最节省运算时间的存储方式是。

A. 仅有头指针的单链表B. 仅有头指针的单循环链表C. 仅有头指针的双向链表D. 仅有尾指针的单循环链表4. 设有10阶矩阵A,其对角线以上的元素aij(1≤j≤10,1<i<j)均取值为-3,其它矩阵元素为正整数。

现将矩阵压缩存放在一维数组F[m]中,则m为。

A. 45B. 46C. 55D. 565.前序序列为ABC的不同二叉树有种不同形态。

A. 3B. 4C. 5D. 66.具有n个结点(n>1)的二叉树的前序序列和后序序列正好相反,则该二叉树中除叶子结点外每个结点。

A. 仅有左孩子B. 仅有右孩子C. 仅有一个孩子D. 都有左、右孩子7. 关于连通图的BFS和DFS生成树高度论述正确的是。

A. BFS生成树高度<DFS生成树高度B. BFS生成树高度≤DFS生成树高度C. BFS生成树高度>DFS生成树高度D. BFS生成树高度≥DFS生成树高度8.对线性表用二分法查找时要求线性表必须是。

A. 顺序表B. 单链表C. 顺序存储的有序表D. 散列表9. 在采用线性探查法处理冲突的散列表中进行查找,查找成功时所探测位置上的健值。

A. 一定都是同义词B. 一定都不是同义词C. 不一定是同义词D. 无任何关系10.堆排序是一种。

A) 插入排序 B) 选择排序 C) 交换排序 D) 归并排序二、判断题(每题2分,共20分)1.在单链表中存取某个元素,只要知道指向该元素的指针,因此单链表是随机存取的存储结构。

Matlab中的稀疏矩阵处理技术介绍

Matlab中的稀疏矩阵处理技术介绍

Matlab中的稀疏矩阵处理技术介绍在数据处理和算法设计中,矩阵是一种非常常见的数据结构。

然而,在实际应用中,很多矩阵是稀疏的,即大部分元素都是0。

对于稀疏矩阵的处理,传统的方法十分低效,会浪费大量的存储空间和计算资源。

为了提高效率,Matlab中提供了一系列的稀疏矩阵处理技术,可以更高效地处理这类特殊的数据结构。

一、稀疏矩阵的定义和表示在介绍具体的处理技术之前,首先需要了解稀疏矩阵的定义和表示方法。

稀疏矩阵是指矩阵中大部分元素都是0的情况。

为了高效地表示这类矩阵,不必存储所有的元素,只需要存储非零元素以及它们的位置信息即可。

在Matlab中,稀疏矩阵可以通过提供非零元素的行列坐标和值来表示。

具体来说,可以使用sparse函数来创建稀疏矩阵,其语法如下:s = sparse(i, j, v, m, n)其中i和j是非零元素的行列坐标,v是非零元素的值,m和n是矩阵的维度。

通过这种方式,可以高效地存储稀疏矩阵,并且能够提供一些便捷的功能和操作。

二、稀疏矩阵的存储结构在计算机内存中,矩阵通常以行优先或者列优先的方式存储。

然而,对于稀疏矩阵来说,这种方式会浪费大量的存储空间,因为大部分的元素都是0。

为了更加高效地存储稀疏矩阵,Matlab中使用了压缩列(CSC)和压缩行(CSR)两种存储结构。

压缩列存储方式将矩阵按列进行存储。

具体来说,将矩阵分成m个列,每个列存储非零元素的行索引和值。

另外,需要一个向量来记录每个列的起始位置和结束位置。

这种存储方式在列操作中效率高,但在行操作中效率较低。

压缩行存储方式将矩阵按行进行存储。

具体来说,将矩阵分成n个行,每个行存储非零元素的列索引和值。

另外,需要一个向量来记录每个行的起始位置和结束位置。

这种存储方式在行操作中效率高,但在列操作中效率较低。

在Matlab中,可以使用full函数将稀疏矩阵转换为普通的密集矩阵,以便于进行一些特殊操作。

但需要注意的是,将稀疏矩阵转换为普通矩阵会消耗大量的存储空间,因此要谨慎使用。

《数据结构与算法》课程教学大纲

《数据结构与算法》课程教学大纲

《数据结构与算法》课程教学大纲课程代码:12281030适用专业:计算机应用技术总学时数: 68学时,其中:理论教学34学时,实践教学34学时。

学分:4.5先修课程:《C语言程序导论》、《程序设计导论》考核方式:机试一、制订大纲的依据本大纲根据2013年软件技术专业教学计划制订。

二、课程简介数据结构是介于数学、计算机硬件和计算机软件之间的一门计算机科学与技术专业的核心课程,是高级程序设计语言、编译原理、操作系统、数据库等课程的基础。

同时,数据结构技术也广泛应用于信息科学、系统工程、应用数学以及各种工程技术领域。

数据结构课程集中讨论软件开发过程中的设计阶段、同时设计编码和分析阶段的若干基本问题。

此外,为了构造出好的数据结构及其实现,还需考虑数据结构及其实现的评价与选择。

因此,数据结构的内容包括抽象、实现和评价三个层次,从数据表示和数据处理上看有五个基本组成“要素”分别是逻辑结构,存储结构、基本运算、算法及不同数据结构的比较与算法分析。

三、课程性质、教育目标(一)性质:本课程为计算机系软件技术专业的专业课。

(二)教育目标:通过本课程的学习,使学生深透地理解数据结构的逻辑结构和物理结构的基本概念以及有关算法,培养基本的、良好的程序设计技能,编制高效可靠的程序,为学习操作系统、编译原理和数据库等课程奠定基础。

四、课程教学内容与基本要求第一部分绪论(一)教学内容数据结构的基本概念和术语;抽象数据类型的表示;算法和算法分析。

(二)重点、难点重点:数据结构的基本概念及相关术语。

难点:算法的时间复杂度分析。

(三)教学基本要求知识要求:了解:抽象数据类型及面向对象概念;理解:算法的定义及算法的特性;掌握:数据结构的基本概念、算法的性能分析与度量方法。

第二部分线性表(一)教学内容1.线性表的定义及操作;2.线性表的顺序存储定义及操作实现;3.单链表的定义;单链表中的插入与删除;带表头结点的单链表;静态链表;4.循环链表的类定义及运算;5.双向链表的类定义及运算;6.线性表的应用:多项式及其相加。

最常用的稀疏矩阵

最常用的稀疏矩阵

最常用的稀疏矩阵【原创版】目录1.稀疏矩阵的定义与性质2.稀疏矩阵的应用场景3.稀疏矩阵的存储和计算方法4.稀疏矩阵的实例:随机游走问题的转移概率矩阵5.稀疏矩阵的优点与局限性正文一、稀疏矩阵的定义与性质稀疏矩阵是指矩阵中大部分元素为零的矩阵,其非零元素较少。

由于稀疏矩阵的非零元素较少,因此在存储和计算时可以采用特殊的算法和数据结构,以提高计算效率和节省存储空间。

需要注意的是,稀疏矩阵的定义是相对的,具体的阈值取决于具体的应用场景和算法。

二、稀疏矩阵的应用场景稀疏矩阵在许多实际应用中有着广泛的应用,如线性方程组、图像处理、信号处理等领域。

由于稀疏矩阵的非零元素具有局部集中性,因此可以利用这一特点进行压缩存储和快速计算。

三、稀疏矩阵的存储和计算方法1.存储方法:稀疏矩阵的存储方法主要有三种,分别是全存储、行存储和列存储。

全存储是将稀疏矩阵的所有元素都存储在内存中,这种方法虽然简单,但是存储空间较大。

行存储和列存储则是分别按照行和列的顺序存储非零元素,可以节省存储空间,但访问非零元素时需要额外的索引信息。

2.计算方法:针对稀疏矩阵的计算方法,主要有两种,分别是稀疏矩阵向量乘法和稀疏矩阵求解线性方程组。

稀疏矩阵向量乘法是利用稀疏矩阵的局部集中性,通过递归或并行计算等方式,将稀疏矩阵与向量的乘积计算转化为非零元素与向量的乘积计算。

稀疏矩阵求解线性方程组则是利用稀疏矩阵的特性,采用前/后代法等迭代算法,通过较少的计算步骤求解线性方程组。

四、稀疏矩阵的实例:随机游走问题的转移概率矩阵随机游走问题是一个经典的概率论问题,可以用稀疏矩阵来表示转移概率。

假设有一个矩阵,其行表示状态,列表示状态转移,矩阵中的非零元素表示从一个状态转移到另一个状态的概率。

由于随机游走问题的状态转移概率矩阵具有稀疏性,因此可以利用稀疏矩阵的存储和计算方法,提高计算效率和节省存储空间。

五、稀疏矩阵的优点与局限性稀疏矩阵的优点主要体现在存储和计算方面,由于稀疏矩阵的非零元素较少,可以采用特殊的数据结构和算法,提高计算效率和节省存储空间。

c++稀疏矩阵算法解析

c++稀疏矩阵算法解析

c++稀疏矩阵算法解析C++稀疏矩阵算法解析在计算机科学领域中,稀疏矩阵是一种特殊类型的矩阵,其中大部分元素为零。

由于大多数实际应用中的数据都存在着这种零值集中的情况,因此针对稀疏矩阵进行优化和高效处理是非常重要且具有挑战性的任务。

C++作为一种强大而灵活的编程语言,提供了许多算法和技术来处理稀疏矩阵。

首先我们需要明确什么是稀疏矩阵。

一个m×n维度的稠密(dense)矩阵将包含m*n个元素;然而,在实际问题中,很少有这样充满真正有意义数据点的场景。

相反地,在许多现实世界应用程序中,庞大规模、纬度高、但尽可能较小数量测试设备生成最合理报告时间黄金定位资料构成核心载体,可以表达其他向量所无法表达清楚并加以统筹筛选出解统合再定标那就妥当不过更具代表性.支撑输出内各环节质控采得抓取结果结论直观准确具有实时性质量科学合理评判最终结果,纯粹相同数据点的稀疏(sparse)矩阵通常以链表、哈希方法或其他有效的数据结构来表示。

这种压缩存储模式允许节省空间和降低计算复杂度。

对于一个M×N的稀疏矩阵A,我们可以使用三元组(Triplet)格式来表示它。

Triplet由三个数组组成:row array(行数组)、column array(列数组)以及value array(值数组)。

在row array中,每个元素表示该非零元素所在行号;在column array中,每个元素表示该非零元素所在列号;而value array则保存了所有非零元素本身的值。

通过这种方式,我们可以只存储那些非零元素,在大多数情况下极大地节约了存储空间。

接着就是如何进行操作和运算。

为了实现基本的操作功能,比如两个稀疏矩阵之间的加法、乘法等运算,C++提供了一些算法解析技术。

首先需要将稀疏矩阵转化为更易于处理的形式——CSR(Compressed Sparse Row)格式。

CSR格式采用三个辅助向量分别记录每一行第一个非0位置索引、每一个非0元素的列索引以及其对应值。

数据结构笔记

数据结构笔记

数据结构笔记基础:数据结构与算法(一)数据结构基本概念数据(data):是对客观事物的符号表示,在计算机科学中是指所有能输入到计算机中并被计算机程序处理的符号总称数据元素(data element):是数据的基本单位,在计算机中通常被当做一个整体进行考虑和处理数据对象(data object):性质相同的数据元素的集合,是数据的一个子集数据结构(data structure):相互之间存在一种或多种特定关系的数据元素的集合4类基本结构:集合、线性结构、树形结构、图形(网状)结构数据结构的形式定义为数据结构是一个二元组Data Structure = (D,S),其中D是数据元素的有限集,S是D上关系的有限集数据结构定义中的“关系"描述的是数据元素之间的逻辑关系,因此又称为数据的逻辑结构数据结构在计算机中的表示(映像)称为物理结构(存储结构)计算机中表示信息的最小单位是二进制中的一位,叫做位(bit),一到若干位组成一个位串表示一个数据元素,这个位串称为元素或结点数据结构之间关系在计算机中的表示有两种:顺序映像、非顺序映像,并由此得到两种存储结构:顺序存储、链式存储,前者运用相对位置表示数据元素间的逻辑结构,后者借助指针任何一个算法的设计取决于数据(逻辑)结构,而实现依赖于存储结构数据类型是一个值的集合和定义在这个值集上的一组操作的总称数据类型分两种:原子类型、结构类型,前者不可分解(例如int、char、float、void ),后者结构类型由若干成分按某种结构组成,可分解,成分既可以是非结构的也可以是结构的(例:数组)抽象数据类型(Abstract Data Type ):是指一个数学模型及定义在该模型上的一组操作(P8)抽象数据类型格式如下:ADT抽象数据类型名{数据对象:<数据对象的定义>数据关系:<数据关系的定义>数据操作:〈数据操作的定义>}ADT抽象数据类型名基本操作格式如下:基本操作名(参数表)初始条件:〈初始条件描述〉操作结果:〈操作结果描述>多形数据类型(polymorphic data type):是指其值得成分不确定的数据类型(P9)抽象数据类型可由固有数据类型来表示和实现(二)算法(概念)和算法分析(时、空性能)算法(algorithm):对特定问题求解步骤的一种描述算法5特性:有穷、确定、可行、输入、输出1、有穷性:算法必须在可接受的时间内执行有穷步后结束2、确定性:每条指令必须要有确切含义,无二义性,并且只有唯一执行路径,即对相同的输入只能得相同输出3、可行性:算法中的操作都可通过已实现的基本运算执行有限次来完成4、输入:一个算法有一到多个输入,并取自某个特定对象合集5、输出:一个算法有一到多个输出,这些输出与输入有着某些特定关系的量算法设计要求(好算法):正确性、可读性、健壮性、效率与低存储需求健壮性是指对于规范要求以外的输入能够判断出这个输入不符合规范要求,并能有合理的处理方式.算法效率的度量:(1)事后统计:程序运行结束后借助计算机内部计时功能,缺点一是必须先运行依据算法编制的程序,二是受限于计算机软硬件,导致掩盖了算法本身的优劣(2)事前分析估计:消耗时间影响因素:算法策略、问题规模、编程语言、编译程序产生的机器码质量、机器执行指令的速度撇开各种影响因素只考虑问题的规模(通常用整数量n表示),记为问题规模的函数算法时间取决于控制结构(顺序,分支,循环)和固有数据类型操作的综合效果书写格式:T(n)= O(f(n))f(n)为n的某个函数时间复杂度:算法的渐近时间复杂度(asymptotic time complexity),它表示随问题规模的增大,算法执行时间的增长率和f(n)的增长率相同以循环最深层原操作为度量基准频度:该语句重复执行的次数算法的存储空间需求:空间复杂度(space complexity):算法所需存储空间度量,记作S(n)= O(f(n)),其中n为问题规模的大小一、线性表(一)线性表基本概念线性表(linear_list):n个数据元素的有限序列结构特点:存在唯一的被称作“第一个”、“最后一个"的数据元素,且除了第一个以外每个元素都有唯一前驱,除最后一个以外都有唯一后继在复杂线性表中存在:数据项-〉记录-〉文件,例如每个学生情况为一个记录,它由学号、性别。

特殊矩阵,对称矩阵,三角矩阵,稀疏矩阵的特点

特殊矩阵,对称矩阵,三角矩阵,稀疏矩阵的特点

特殊矩阵,对称矩阵,三角矩阵,稀疏矩阵的特点
特殊矩阵
•特点:
1.特殊矩阵是指满足某种特定规律的矩阵。

2.具有特殊结构,使得其在存储和计算上具有一定的优势。

3.常见的特殊矩阵有对角矩阵、单位矩阵、零矩阵等。

•对称矩阵:
1.特点:
•对称矩阵的元素关于主对角线对称。

•可以看作是自己的转置矩阵。

•对称矩阵是实数域上的矩阵,但也可以存在复数域上
的情况。

2.应用:
•在对称正定矩阵的特殊情况下,可以用于优化算法等
领域。

•在图像处理中,对称矩阵可以用于平滑图像。

•三角矩阵:
1.特点:
•三角矩阵的非零元素只出现在主对角线和其上方或下
方的元素中。

•可分为上三角矩阵和下三角矩阵。

2.应用:
•三角矩阵在线性方程组的求解中具有较高的计算效率。

•在图像处理中,三角矩阵可以用于图像变换等操作。

•稀疏矩阵:
1.特点:
•稀疏矩阵是指大部分元素为零的矩阵。

•非零元素的个数远小于矩阵的元素总数。

2.应用:
•稀疏矩阵的存储和计算可以节省大量的内存和计算资
源。

•在图论、网络分析等领域中经常使用稀疏矩阵进行数
据表示和计算。

以上所列举的四类矩阵都具有一定的特点和应用场景。

它们在不
同领域的算法和模型中发挥着重要的作用,有助于提高计算效率和节
省资源消耗。

了解并熟练运用这些特殊矩阵,对于一个资深的创作者来说,将会是一项重要的技能。

数据结构笔记

数据结构笔记

数据结构笔记基础:数据结构与算法(一)数据结构基本概念数据(data):是对客观事物的符号表示,在计算机科学中是指所有能输入到计算机中并被计算机程序处理的符号总称数据元素(data element):是数据的基本单位,在计算机中通常被当做一个整体进行考虑和处理数据对象(data object):性质相同的数据元素的集合,是数据的一个子集数据结构(data structure):相互之间存在一种或多种特定关系的数据元素的集合4类基本结构:集合、线性结构、树形结构、图形(网状)结构数据结构的形式定义为数据结构是一个二元组Data Structure = (D,S),其中D是数据元素的有限集,S是D上关系的有限集数据结构定义中的“关系”描述的是数据元素之间的逻辑关系,因此又称为数据的逻辑结构数据结构在计算机中的表示(映像)称为物理结构(存储结构)计算机中表示信息的最小单位是二进制中的一位,叫做位(bit),一到若干位组成一个位串表示一个数据元素,这个位串称为元素或结点数据结构之间关系在计算机中的表示有两种:顺序映像、非顺序映像,并由此得到两种存储结构:顺序存储、链式存储,前者运用相对位置表示数据元素间的逻辑结构,后者借助指针任何一个算法的设计取决于数据(逻辑)结构,而实现依赖于存储结构数据类型是一个值的集合和定义在这个值集上的一组操作的总称数据类型分两种:原子类型、结构类型,前者不可分解(例如int、char、float、void ),后者结构类型由若干成分按某种结构组成,可分解,成分既可以是非结构的也可以是结构的(例:数组)抽象数据类型(Abstract Data Type ):是指一个数学模型及定义在该模型上的一组操作(P8)抽象数据类型格式如下:ADT抽象数据类型名{数据对象:<数据对象的定义>数据关系:<数据关系的定义>数据操作:<数据操作的定义>}ADT抽象数据类型名基本操作格式如下:基本操作名(参数表)初始条件:<初始条件描述>操作结果:<操作结果描述>多形数据类型(polymorphic data type):是指其值得成分不确定的数据类型(P9)抽象数据类型可由固有数据类型来表示和实现(二)算法(概念)和算法分析(时、空性能)算法(algorithm):对特定问题求解步骤的一种描述算法5特性:有穷、确定、可行、输入、输出1、有穷性:算法必须在可接受的时间内执行有穷步后结束2、确定性:每条指令必须要有确切含义,无二义性,并且只有唯一执行路径,即对相同的输入只能得相同输出3、可行性:算法中的操作都可通过已实现的基本运算执行有限次来完成4、输入:一个算法有一到多个输入,并取自某个特定对象合集5、输出:一个算法有一到多个输出,这些输出与输入有着某些特定关系的量算法设计要求(好算法):正确性、可读性、健壮性、效率与低存储需求健壮性是指对于规范要求以外的输入能够判断出这个输入不符合规范要求,并能有合理的处理方式。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

常熟理工学院
《数据结构与算法》实验指导与报告书
_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,k=j*(j+1)/2+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<N; i++) /*输出对称矩阵*/
{
for(j=0; j<N; j++)
printf("%3d",upper[i][j]);
printf("\n");
}
for(i=0; i<N; i++) /*进行压缩存储*/
for(j=0; j<N; 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->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;
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];
}
}
}
【实验小结】
本实验掌握了对称矩阵的压缩存储表示,稀疏矩阵的压缩存储-三元组表表示,以及稀疏矩阵的转置算法。

明白了可以改变矩阵的储存方式来节省内存空间,今后可以利用这一思想来节省内存。

相关文档
最新文档