程序设计百科

广告

稀疏矩阵转置程序2-2

2012-06-19 10:23:44 本文行家:玻尔特.李

稀疏矩阵----数据处理类数据结构与算法(续),本文内容是数据处理研究的结论,欢迎同行共同研究讨论。

 

我想要无边的世界我想要无边的世界

 

5.程序详细分析

程序分析主要内容:

(1).M中元素的定位,驱动元素的选择;

(2).驱动元素的相关范围

(3).原子功能模块

(4).目标矩阵元素求解的增长序

        M,T是稀疏矩阵。

Status transposeSMatrix (TSMatrix MTSMatrix &T)

         .TSMatrix M 是三元组表

         .TSMatrix &T 三元组表

转置算法使用的存储结构:

           M.data[]:数组按稀疏矩阵行排列。工作游标p的上下界是[1,M.tu];          

           T.data[]:行排列数组。工作游标q1T.tuT.data[]是递增顺序,

         并未按照矩阵的行列结构。

{

T.mu=M.nu;T.nu=M.nu; T.tu=M.tu;        //目标T与已知M之间的

                                                        映射关系:行数,列数,

                                                        非零元个数。                      

if(T.tu){                           

            q=1;                   //目标矩阵T的一维数组data[]的游标

                                       为q。先确定T.data[1]T.data[]

                                      确定元素的增长顺序是递增顺序。

                           //问:M.dataT.data转置计算中的数据处理范围的定位与数

                            据计算的映射关系?

                        矩阵M每一列的元素与矩阵 T每一行的元素相等。以T的行序

                        为主序,先将数据处理范围从M矩阵范围定位到一列的范围,算

                        法主序M的列数col是驱动变量,然后在M.data []中,确定M

                        一列数据。转置计算中,驱动元素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.data[p].j==col){               //数据范围广,应有所筛选。从中

                                          选择M.data[p],列数j=col时对

                                                   T.data[q]进行转置处理,

                                           输出结构T.data[]中元素的增长

                                           序是q1tu的递增序;输出

                                          方式保持数组不变,直接输出。

                                                     ***转置算法的正确并不能用程

                                            序语句直接显示出来***

      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;}                              //T.data[]顺序递增,q++.发现与

                                                   col列值相等的元素M.data[p]

                                          就转置复制成T.data[q].

                                                  T.data[]的新增元素对转置算法

                                          没有影响。

                                            //col处理M的一列元素,将这一

                                            列元素顺序复制到T.data[]中。

                                                      col++。注意;驱动变量是矩阵的

                                             列数而不是M的每一个元素。

}//if(T.tu)                               //补充:T.tu是第二个for语句循环停

                                           止的条件。第一个for语句循环停

                                            止的条件是M的列数。P q的上

                                            下界。

}//TransposeSMatrix

6.几个看法

(1).当驱动变量计算映射范围越不精确,则越需要if语句进行选择

(2).for中有for循环,就是数据处理范围的选定。

(3).q++是递增顺序,说明不是按照矩阵的逻辑结构,求出T的值

 

 

分享:
标签: 自然科学 计算机软件 | 收藏
百科的文章(含所附图片)系由网友上传,如果涉嫌侵权,请与客服联系,我们将按照法律之相关规定及时进行处理。如需转载,请注明来源于www.baike.com

本文行家向Ta提问

玻尔特.李软件专业硕士生,编程,计算机硬件设计,网络。

行家更新