- 1、本文档共52页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
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++; } } 算法中主要程序段: 方法2 快速转置 思路:依次把M.data中的元素直接送入T.data的恰当位置上(即三元组的p指针不回溯)。 关键:怎样寻找T.data的“恰当”位置? 求 三 元 组 表 T.data i j e q 1 2 3 4 p 1 2 3 4 . . . . ② 3 1 9 ① 2 1 12 ③ 1 3 -3 ④ 5 3 14 ⑤ 3 4 24 ⑥ 2 5 18 已知 三 元 组 表 M.data i j e 如果能预知M矩阵每一列(即T的每一行)的非零元素个数,就能很快得知每一列的第一个非零元素在T.data中的位置,则扫描M.data时便可以将每个元素准确定位 解决思路: 1)先确定M中每一列第一个非零元在T中位置 实现:设两个数组 cpot[col]:指示M中第col列第一个非零元在T 中的位置 num[col]:表示矩阵M中第col列中非零元个数 设计步骤: col 1 2 3 4 5 6 num[col] 1 2 2 0 1 0 cpot[col] 1 i j e 已知 三 元 组 表 M.data 显然有:cpot[1]=1; cpot[col]=cpot[col-1]+num[col-1]; 2 4 6 6 7 //求num[col]: for(p=1;p=M.tu;p++) { col=M.data[p].j; num[col]++; } //求cpot[col] cpot[1]=1; for(col=2;col=M.nu;col++) { cpot[col]=cpot[col-1]+num[col-1];} 部分程序段: 2)再到M中从头到尾扫描每一个元素,按其列值和cpot[col]的值存放在T中; 设计步骤: 求 三 元 组 表 T.data i j e q 1 2 3 4 p 1 2 3 4 . . ② 3 1 9 ① 2 1 12 ③ 1 3 -3 ④ 5 3 14 已知 三 元 组 表 M.data i j e col 1 2 3 4 5 6 cpot[col] 1 2 4 6 6 7 5 6 求 三 元 组 表 T.data i j e q 1 2 3 4 p 1 2 3 4 . . 3 1 9 2 1 12 1 3 -3 5 3 14 已知 三 元 组 表 M.data i j e col 1 2 3 4 5 6 cpot[col] 2 3 5 6 7 7 5 6 设计中一个技巧:每存入一个列为col的元素,其cpot[col]值+1,使其不再固定指向本列第一个非零元素,而是预备给同列的下一非零元素定位之用 ⑤ 3 4 24 ⑥ 2 5 18 1 2 4 6 6 7 部分程序段: for(p=1;p=M.tu;p++) { col=M.data[p].j; 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]++;
文档评论(0)