数据l构W五章算法设计题[1]_跨考网
1. 以三元组表存贮的E疏矩?/span>AQ?/span>B非零元个数分别ؓ(f)m?/span>n。试用类PASCAL语言~写旉复杂度ؓ(f)OQ?/span>m+nQ的法矩?/span>B加到矩阵A上去?/span>A的空间够大Q不另加辅助I间。要求描q所用结构。?a target="_blank">北京工业大学 1997 ?/span> (10?/span>)?/span>
【参考答案?/span>
[题目分析]讄疏矩늚非零元素的三元组以行序ؓ(f)d储在三元l表中。矩늚相加是对应元素的相加。对两非零元素相加,若行号不{,则行号大者是l果矩阵中的非零元素。若行号相同Q则列号大者是l果中一非零元素Q若行号列号相同Q若对应元素g和ؓ(f)Ӟ不予存储Q否则,作ؓ(f)C元组存到三元l表中。题目中要求旉复杂度ؓ(f)OQ?/span>m+nQ。因此需从两个三元组表的最后一个元素开始相加。第一个非零元素放?/span>A矩阵三元l表的第m+n位置上。结果的三元l至多是m+n个非零元素。最后若发生对应元素相加和ؓ(f)零的情况Q对三元l表中元素要q行整理Q以便ɽW一个三元组存放在下?/span>1的位|上?/span>
CONST maxnum=大于非零元素数的某个帔R
TYPE tuple=RECORD
i,jQ?/span>integerQ?/span> vQ?/span>elemtpQ?/span>
ENDQ?/span>
sparmattp=RECORD
muQ?/span>nuQ?/span>tuQ?/span>integerQ?/span>
data: ARRAY[1..maxnum] OF tupleQ?/span>
ENDQ?/span>
PROC AddMatrixQ?/span>VAR AQ?/span>sparmattpQ?/span>BQ?/span>sparmattpQ;
// E疏矩?/span>A?/span>B各有m?/span>n个非零元素,以三元组表存储?/span>A的空间够大Q本法实现两个E疏矩늛加,l果攑ֈA中?/span>
L:=mQ?/span>p:=nQ?/span>k:=m+nQ?/span>// L,p?/span>AQ?/span>B三元l表指针Q?/span>k为结果三元组表指针(下标Q?/span>
A.tu:=m+nQ?/span>// 暂存l果矩阵非零元素个数
WHILEQ?/span>L?/span>1Q?/span>ANDQ?/span>p?/span>1Q?/span>DO
[CASE // 行号不等Ӟ行号大者的三元lؓ(f)l果三元l表中一V?/span>
A.data[L].i>B.data[p].iQ?/span>A.data[k]:=A.data[L]Q?/span>L:=L-1Q?/span>// A中当前项为结果项
A.data[L].i<B.data[p].iQ?/span>A.data[k]:=B.data[p]Q?/span>p:=p-1Q?/span>//B中当前项为结果当前项
A.data[L].i=B.data[p].iQ?/span>
CASE //行号相等Ӟ比较列号
A.data[L].j>B.data[p].jQ?/span>A.data[k]:=A.data[L]Q?/span>L:=L-1Q?/span>
A.data[L].j<B.data[p].jQ?/span>A.data[k]:=B.data[p]Q?/span>p:=p-1Q?/span>
A.data[L].j=B.data[p].jQ?/span>IF A.data[L].v+B.data[p].v?/span>0 THEN
[A.data[L].v=A.data[L].v+ B.data[p].vQ?/span>
A.data[k]:= A.data[L]Q?/span>]
L:=L-1Q?/span>p:=p-1Q?/span>
ENDCQ?/span> //l束行号相等时的处理
ENDCQ?/span> //l束行号比较处理?/span>
k:=k-1Q?/span> //l果三元l表的指针前U(?/span>1Q?/span>
]//l束WHILE循环?/span>
WHILE p>0 DO[A.data[k]:=B.data[p]Q?/span>k:=k-1Q?/span>p:=p-1Q?/span>] //处理B的剩余部分?/span>
WHILE L>1 DO[A.data[k]:=A.data[L]Q?/span>k:=k-1Q?/span>L:=L-1Q?/span>] //处理A的剩余部分?/span>
IF k>1 THEN //E疏矩늛应元素相加时Q有和ؓ(f)零的元素Q因而元素L<m+n?/span>
[FOR p:=k TO m+n DO A[p-k+1]:=A[p]Q?/span>// 三元l前U,使第一个三元组的下标ؓ(f)1?/span>
A.tu=m+n-k+1Q?/span>] // 修改l果三元l表中非零元素个数?/span>
ENDPQ?/span> // l束addmatrix
[法讨论]法中三元组的赋值是“成l赋值”,可用行倹{列值和元素值的三个赋值句代替?/span>A?/span>B的三元组表的当前元素的指?/span>L?/span>pQ在每种情况处理后均有修改,而结果三元组表的指针k?/span>CASE语句后统一处理Q?/span>k:=k-1Q。算法在B的第一个元素“大于?/span>A的最后一个元素时Q时间复杂度最佳ؓ(f)OQ?/span>nQ,最差情冉|每个元素都移动(赋|(j)?jin)一ơ,且出C(jin)和ؓ(f)零的元素Q致使最后(m+n-k+1Q个元素向前q移一ơ,旉复杂度最差ؓ(f)OQ?/span>m+nQ?/span>
2022考研初复试已l接q尾壎ͼ考研学子全面q入2023届备?/b>Q跨考ؓ(f)23考研的考生准备?0大课包全E准备、全q复?fn)备考计划、目标院校专业辅对{全真复试模拟练?fn)和全程针对性指|2023考研的小伙伴针也已经开始择校和复习(fn)?jin),跨考考研畅学5.0版本全新升Q无Z在校在家都可以更自如的完成你的考研复习(fn)Q?/a>暑假集训?/span>带来?jin)院校专业初步选择Q明方向;考研备考全q规划,核心(j)知识点入门;个性化制定备考方案,助你赢在赯U,早出发一点离成功更q一点!
点击右侧咨询?/strong>直接前往?jin)解更?/strong>
考研院校专业选择和考研复习(fn)计划 | |||
2023备考学?/td> | 2023U上U下随时学习(fn) | 34所自划UK校考研复试分数U汇?/td> | |
2022考研复试最全信息整?/a> | 全国各招生院校考研复试分数U汇?/a> | ||
2023全日制封闭训l?/span> | 全国各招生院校考研调剂信息汇?/a> | ||
2023考研先知 | 考研考试U目有哪些? | 如何正确看待考研分数U? | |
不同院校相同专业如何选择更适合自己?/a> | 从就业说考研如何择专业? | ||
手把手教你如何选专业? | 高校研究生教育各学科门类排行?/a> |
相关推荐
跨考考研评
班型 | 定向班型 | 开班时?/td> | 高定?/td> | 标准?/td> | 评介绍 | 咨询 |
U季集训 | 冲刺?/td> | 9.10-12.20 | 168000 | 24800?/td> | 班面授+专业??+专业译֮向辅?协议加强评(高定?+专属规划{疑(高定?+_化答?复试资源(高定?+复试译(高定?+复试指导(高定?+复试班主?v1服务(高定?+复试面授密训(高定?+复试1v1(高定? | |
2023集训畅学 | 非定向(政英?数政qQ?/td> | 每月20?/td> | 22800?协议? | 13800?/td> | 先行阶在U课E?基础阶在U课E?强化阶在U课E?真题阶在U课E?冲刺阶在U课E?专业NҎ(gu)一对一评+班主dE督学服?全程规划体系+全程试体系+全程_化答?择校择专业能力定位体p?全年关键环节指导体系+初试加强?初试专属服务+复试全科标准班服?/td> |