欢迎来到冰豆网! | 帮助中心 分享价值,成长自我!
冰豆网
全部分类
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • 党团工作>
  • ImageVerifierCode 换一换
    首页 冰豆网 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    掌握数据结构21.docx

    • 资源ID:28391334       资源大小:30.28KB        全文页数:14页
    • 资源格式: DOCX        下载积分:3金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    掌握数据结构21.docx

    1、掌握数据结构21稀疏矩阵-数据处理类数据结构与算法 关键词 稀疏矩阵,算法结构,逻辑结构转换,存储结构的序,算法主序,数据处理范围定位,驱动变量的数据映射范围,输出结构,工作游标,原子功能模块,快速转置摘要 稀疏矩阵的存储结构是三元组表,在运算算法中,用矩阵逻辑结构定位数据处理范围,选择算法主序,发现驱动元素或变量的数据映射范围,根据已知实体与目标实体间的映射关系和输出实体的逻辑结构,选择算法主序,输出结构与输出方法。在源程序分析中发现原子功能模块。 稀疏矩阵在数据结构中不是重点,但是稀疏矩阵既是数据处理的大范围内,又具有一般程序设计与算法结构的基本特征。大学阶段遇到的科学计算类程序不多,稀疏

    2、矩阵运算(转置,乘法)的算法是应掌握的起步阶段。1数组表示法?1.1转置算法算法对运算数据关联范围的设置不同,导致稀疏矩阵的转置算法的效率不同。一稀疏矩阵转置程序1的分析1.什么是转置 MmnTnm, 其中aij=bji(1im, 1jn。i,j可看作与M,T无关的表示,也可以看作矩阵M为主动的下标表示方法) ,而且aijM, bjiT。矩阵M已知,矩阵T未知。因此在编程时,应考虑以哪个矩阵为算法主序,这是一个出发点。(1)M,T的行列互换两个矩阵的行数mu列数nu互换,T.mu=M.nu=n ,T.nu=M.mu=m, 以T为主动。(2)矩阵元素T(i,j)=M(j,i),矩阵T的第i行第j

    3、列元素与矩阵M的第j行第i列元素相等。以T的元素为驱动,因为能从M的元素得到T的元素,所以建立表达式就能得到T元素的值。(在程序中,是否用矩阵T的顺序为算法线索?) 转置矩阵的非0元个数相同,T.tu=M.tu (3)对0元素多的稀疏矩阵的转置而言,与一般矩阵的转置不同。稀疏矩阵的非0元素aij,在程序中用三元组(i,j,aij)表示,i,j表示行数列数。因为不再按照矩阵的结构m行n列转置,不使用二维数组作为存储,所以必须记录每一个非0元素所在行列的位置。在规则的二维数组中,矩阵的行列通过元素的下标识别,元素在矩阵中的位置通过下标得到。因此一般矩阵用二维数组为存储结构。二维数组是物理存储结构的

    4、逻辑形式,可称为逻辑存储结构。2.稀疏矩阵的一维数组存储结构从操作系统可知,数据的存储方式有三种:连续(顺序)方式,链接方式,索引方式。矩阵不能直接用在计算机中,应选择顺序存储结构二维数组,存放元素。稀疏矩阵的非0元以矩阵行序为序存储在一维数组中,每一行元素的数目不同,可称为非规则数组。从稀疏矩阵到一维数组是从矩阵结构到以元素次序为主序的逻辑结构变换。稀疏矩阵的一维数组的非0元素是记录(i,j,aij)。稀疏矩阵三元组表的顺序存储方式,称为三元组顺序表,选用一维数组。三元组表还可用链表表示。*这里有两个转换或者两个关系。1.数学表示实体到计算机存储实体的转换。eg.矩阵到一维数组;2.数学逻辑

    5、结构到存储逻辑结构的转换。eg.矩阵的行列结构+稀疏矩阵非0元素到一维数组中非0元同行同列+顺序表示的转换。*注释数据结构:三元组顺序表/-稀疏矩阵的三元组表顺序存储表示-/#define MAXSIZE 12500Typedef structint i,j; /该非0元的行下标row和列下标col /有行下标或列下标相同的三元组ElemType e;Triple; /三元组元素Typedef structTriple dataMAXSIZE+1; /非0元三元组表,data0未用Int mu,nu,tu; /矩阵的行数,列数和非0元个数TSMatrix /三元组表三元组表的顺序以矩阵行序为主

    6、序。非0元的三元组是以矩阵行序为主序排列的。这两个表述有区别。三元组表与三元组不同,用三元组元素好像没有必要。3.稀疏矩阵转置运算程序-一维数组存储结构Status transposeSMatrix (TSMatrix M,TSMatrix &T)/稀疏矩阵从M到T转置T.mu=M.nu;T.nu=M.nu; /矩阵行数列数互换T.tu=M.tu; /转置矩阵非零元个数一样if(T.tu) /矩阵非0元个数不为0q=1; /q=1是行排列数组T.data工作游标for(col=1;col=M.nu;+col) /col是M的列,共循环列数nu次,并不是整个矩阵次数for(p=1;p=M.tu;

    7、+p) /与col相关的数据范围:M的全部非0元。数组M.data的工作游标p,p的上下界1,M.tu,以一个非0元为一次循环,同时p增加1.if(M.datap.j=col) /如果M的非0元的列=colT.dataq.i=M.datap.j; /则Tq=Mp, 为什么q时,Tq=Mp?T.dataq.j=M.datap.i;T.dataq.e=M.datap.e;+q; /q增加,循环返回到p的for循环;当一次遍历M.data数组结束,循环返回col的for循环。/if(T.tu)/TransposeSMatrix稀疏矩阵转置算法4.算法的解释:按照M的列的顺序,在M.data中寻找M的

    8、每一列的全部元素,这一列元素正是T的相同行值的全部元素。共有nu次列数循环,每次循环遍历一次M.data。将M.data从M的行排列数组重排到M的列排列数组,这个数组等于T的行排列数组。data以矩阵的行序为主序.为什么是M的列序,因为以T的行序为一维数组的主序。比较M,T之间的差异,可知重排三元组表元素之间的次序可实现矩阵转置。T.data是M.data中元素次序的重排,这个次序的重排不是随便的重排。而是以T的行序为序,T的行序就是M的列序。将T的行序,作为重排M.data中元素的主序。稀疏矩阵的转置算法,对要重排的矩阵数据,是以目标矩阵T的行序(M的列序)做为算法主序。这是编程的出发点。将

    9、M同一列的数据有序存放在T的一维数组中。M的列序从1到N,而且M同一列的数据仍然是按从上到下的行序(1,m),作为部分离散有序形式,存在在一维数组M.data中,符合T.data按T的行序排列的要求。1.什么是算法主序?目标实体元素求解的顺序。T.data递增序,只有一个方向,称为求解线索(方向)。求解线索是算法线索集合的一个元素。T.data按照矩阵行排列(一维数组的序是矩阵行排列),因此对应已知矩阵M列序。所以M的列序作为算法主序,使M成为驱动数据。2.目标T与已知M的映射关系形的对应:行数,列数,非零元个数。 序的对应:行序列序。层次的对应:每一行每一列非0元的个数,每一行每一列第一个非

    10、0元的位置。 对转置运算而言:T每一行非0元个数与M每一列非0元个数相同。T每一行第一个非0元位置与M每一列第一个非0元位置的关系。T的行序等于M的列序。3.算法的关键是矩阵数据按照谁的序,进行程序处理。按照已知矩阵,还是目标矩阵。按照目标矩阵的序(即行序),从矩阵数据M.data中进行选择。矩阵有两个性质:1.层次结构2.顺序,可认为是元素的顺序。这个转置算法用递增序,因此还可从用矩阵层次结构编程。用M矩阵的行序,或者用精确定位(见第二节)的方法。(4)矩阵的一维数组可看做mu个行数组。稀疏矩阵的行数组并不规则,相同行的三元组元素的行下标(域)相同。从相邻的特性可知,根据data1与行元素的

    11、个数,可知下一行的第一个元素的位置(下标)。这与基址存储器与段长存储器的做用一样。注意:用行下标变换的方法,求行数组的边界似乎不优美。5.程序详细分析程序分析主要内容:(1).M中元素的定位,驱动元素的选择;(2).驱动元素的相关范围(3).原子功能模块(4).目标矩阵元素求解的增长序M,T是稀疏矩阵。Status transposeSMatrix (TSMatrix M,TSMatrix &T).TSMatrix M 是三元组表.TSMatrix &T 三元组表转置算法使用的存储结构:M.data:数组按稀疏矩阵行排列。工作游标p的上下界是1,M.tu; T.data:行排列数组。工作游标q

    12、从1到T.tu。T.data是递增顺序,并未按照矩阵的行列结构。T.mu=M.nu;T.nu=M.nu; T.tu=M.tu; /目标T与已知M之间的映射关系:行数,列数,非零元个数。 if(T.tu) q=1; /目标矩阵T的一维数组data的游标 为q。先确定T.data1。T.data中确定元素的增长顺序是递增顺序。/问:M.data与T.data转置计算中的数据处理范围的定位与数据计算的映射关系?矩阵M每一列的元素与矩阵 T每一行的元素相等。以T的行序为主序,先将数据处理范围从M矩阵范围定位到一列的范围,算法主序M的列数col是驱动变量,然后在M.data 中,确定M的一列数据。转置计

    13、算中,驱动元素col的数据映射范围是M .data数组中的全部元素。/原子功能1:数据处理范围定位for(col=1;col=M.nu;+col) /选择M的列序,从后边的程序可见下一步是在这一列col中选择一个元素。/原子功能2:驱动变量col的数据映射范围for(p=1;p=M.tu;+p) /从整个数组M.data中确定全部与col同列值的元素。遍历数组M.data的方法与上边相同:简单的递增顺序。游标p+;if(M.datap.j=col) /数据范围广,应有所筛选。从中选择M.datap,列数j=col时对T.dataq进行转置处理,输出结构T.data中元素的增长序是q从1到tu的

    14、递增序;输出方式保持数组不变,直接输出。*转置算法的正确并不能用程序语句直接显示出来*T.dataq.i=M.datap.j; T.dataq.j=M.datap.i;T.dataq.e=M.datap.e;+q; /T.data顺序递增,q+.发现与col列值相等的元素M.datap,就转置复制成T.dataq.T.data的新增元素对转置算法没有影响。 /col处理M的一列元素,将这一列元素顺序复制到T.data中。col+。注意;驱动变量是矩阵的列数而不是M的每一个元素。/if(T.tu) /补充:T.tu是第二个for语句循环停止的条件。第一个for语句循环停止的条件是M的列数。P和

    15、q的上下界。/TransposeSMatrix6.几个看法(1).当驱动变量计算映射范围越不精确,则越需要if语句进行选择(2).for中有for循环,就是数据处理范围的选定。(3).q+是递增顺序,说明不是按照矩阵的逻辑结构,求出T的值。二快速转置程序与精确定位1.定位函数目标矩阵:递增序。已知矩阵:矩阵层级结构。因此按照目标矩阵的序,就是递增序,从T的行序到M的列序。方法2是按照已知矩阵的序。从M与N的对应关系,通过一定的下标计算方法,可知工作游标p,q的对应关系。这个精确计算是一个定位关系,可称为定位函数,使M的元素在T.data中建立一个精确定位关系。定位函数1)一维数组M.data的

    16、稀疏矩阵层次结构表示出来,用到辅助存储结构。在三元组表中稀疏矩阵每一行元素有多少个,每一列元素有多少个。2)每一行或每一列第一个非0元素在M.data数组中的位置。3)由矩阵的转置关系,可知M.data每一列第一个非0元素在T.data中的位置。稀疏矩阵存储数组与表达式的树结构一样有语义。定位函数的实现方法。(1)辅助存储结构numcol,表示矩阵M中,第col列中非0元的个数,从公式可知,等于T.data第col行中非0元的个数。cpotcol指示M中第col列的第一个非0元在T.data中的恰当位置。有公式:通过求M.data每一列的第一个非0元素的位置,定位T.data每一行第一个非0元

    17、素的位置。(2)求解: for(col=1;colM.nu;+col) numcol=0; for(t=1;tM.tu;+t) +numM.datat.j; /三元组元素行列的下标有相同的,因此作为另一个数组的下标可以产生有利的应用。可以将列数相同的元素放在同一个数组中。/获得一个col中的非0元素数目,要遍历整个数组。但在同一个遍历过程中,可实现全部col的非0元数目的计算。这是矩阵元素的相对独立性决定的。/数组numcol与一般数组不同,num的下标表示每一个列,有递增的关系。 cpot1=1;for (col=2;colM.nu;+col) cpotcol=cpotcol-1+numco

    18、l-1 /cpotcol与cpotcol之间存在计算关系,因为M的col是T的row,所以cpotcol=cpotcol-1+numcol-1,是T每一行第一个非0元素在T.data中的位置,numcol-1是T.data行元素的个数.这些元素是求解目标数组的驱动元素,而在上一个程序中只有一个驱动元素。2.快速转置程序Status FastTransposeSMatrix(TSMatrix M,TSMatrix &T)T.mu=M.nu;T.nu=M.nu;T.tu=M.tu; f(T.tu) /原子功能1:定位函数for(col=1;col=M.nu;+col) numcol=0; /M与T

    19、对应关系,在结构转置中表现出来。M每一列元素的个数=T每一行元素的个数。M中每一列第一个非0元素在数组M.data中的位置,对应T中每一行第一个非0元素在T.data中的位置。/num数组存放每一列非0元个数.使用数组因为data是一维数组,而且num的下标表示的每一列,有递增关系。for(t=1;t=M.tu;+t) +numM.datat.j;/驱动元素是全部列下标,可构成一个数组。每一个列下标col的数据映射范围是M.data数组中第col列的全部元素。等于T.data每一行的元素数目。驱动元素是一个数组,表示算法主序是多个线索。 /范围定位从矩阵同时到每一列。 cpot1=1;for

    20、(col=2;colM.nu;+col) cpotcol=cpotcol-1+numcol-1 /根据矩阵逻辑结构这几个变量计算相关/原子功能2:,并行转置for(p=1;p=M.tu;+p) /M.data的递增序,通过矩阵逻辑结构辅助数组,使一个方向,变成nu个方向。相关这nu个方向,所以设置一个游标q,P与q间的对应关系并不是递增关系。col=M.datap.j; q=cpotcol; /范围定位从矩阵并行到每一列。T.data按M的列分成nu个行数组,每个数组的游标cpotcol.从三元组可知,p在M的第col列,到T的第col行所在数组,当前元素下标cpotcol。所以当q时,Tq=

    21、Mp。T.dataq.i=M.datap.j; /映射定位,从p到q.T.dataq.j=M.datap.i;T.dataq.e=M.datap.e;+ cpotcol; /输出结构,行数组cpotcol并行递增 / cpotcol是col数组的游标. q每完成输出元素的一次确定,相应的col数组每增长一个元素,cpotcol+。用q代替cpot1.nu中的游标元素。/for /快速转置只遍历一次M.data /if Return Ok;/FastTransposeSMatrix 3.程序分析-算法主序一般转置算法,目标矩阵的T.data只有一个方向,称为算法线索。快速转置中,T.data有多

    22、个方向,称为多算法线索。每一个线索是M矩阵的一列。矩阵作为一个数学实体结构,有层次和元素顺序两个角度。一般转置算法只用到了矩阵元素的顺序。因此只有一个递增方向。而快速转置算法,用到了矩阵的层次,使目标矩阵每一行都有一个递增的方向,在一次数组遍历中就能实现确定T.data。而每一行的位置和元素个数,是从已知矩阵M中设置的,这是因为M与T有对应关系。辅助存储结构Num与cpot在存储结构旁边,用来说明矩阵的层次结构。T从辅助存储结构,可知T的矩阵逻辑结构在T.data中的反映,这本来是用T的辅助存储结构实现的,但是在转置算法中用M的辅助存储结构就可以知道。因此两个矩阵结构转置的信息可以从M的辅助矩

    23、阵中知道,例如每一个逻辑子结构(M的一列,T的一行)元素的个数;M的每一列第一个非0元素的位置,对应T的每一行第一个非0元素在T.data中的位置等等。在快速转置算法中,使用辅助存储结构,不仅仅知道T.data起始元素的驱动作用,还知道T.data中T矩阵每一行第一个非0元素的驱动作用。由于每一个行的元素个数已知numcol(col是M的列),所以T实际上被分成了几个数组,每一个数组都有自己的游标,可以同时递增。然而用一个q可以代表这几个游标,所以可不用游标数组,因为尽管几个行数组是同时增长的,但是for循环每一次只确定一个元素, 因此实际上数组的增长是交叉前进的。这与cpu的分时使用是一样的

    24、。另外,辅助数组的作用与操作系统文件存储的文件映照类似。多算法主序可用“齐头并进”描述,与归并排序的道理一样。因此速度应该比单算法线索快。算法线索在合理的程度上,越多越好。这是衡量程序并行度的一个标准。增加并行算法线索的数量,是提高软件效率的方法之一。总结:多算法主序表示几个局部并行变成一个整体4.程序框架关键是认识到将稀疏矩阵M数组从整体到nu个列分组,对应到T的nu个行分组。这是矩阵实例逻辑结构之间的对应关系。5.注意。(1)定位函数在快速转置与一般转置中,定位的用法是不一样的。快速转置中,M 与T有对应关系,使p,q有对应关系,这个对应关系称为转置。用定位函数实现,这个定位称为映射更合适,但是用映射表示定位的很少,所以暂时使用。一般转置中,数据处理范围,根据矩阵的结构进行框选,用“截取”能说明一些问题。但是截取并不形象。这方面的理论分析,在论文程序分析与结构编程中将进行详细的说明。(2)输出结构 输出结构并没有明确。是目标实体的输出结构,还是算法处理数据使用的中间结构,还是输出数据结构的逻辑结构。应进一步阐明。输出方法是中间结构到输出存储结构的转换方法。(3)快速转置的原子功能结构没有进行详细分析,在论文程序分析与结构编程中可见对转置算法的原子功能及程序框架的描述。


    注意事项

    本文(掌握数据结构21.docx)为本站会员主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2022 冰点文档网站版权所有

    经营许可证编号:鄂ICP备2022015515号-1

    收起
    展开