矩阵的转置:按一定规律变换元素的位置,一个m行n列的矩阵转置后变成一个n行m列的矩阵。矩阵转置就是把矩阵元素的行和列对换。
设a b是采用三元组表存放的矩阵 b是a的转置矩阵
1) 一般插入算法:对a.data扫描一遍,扫描过程中依次取出a.data中的每一个三元组元素,将对应的行号和列号对换,放入b.data中。
为保证b.data具有三元组存放元素的规律,需在放入前和前面的元素按行及列比较,插在对应位置上。
PS:这种方法由于可能要移动元素花去大量时间
2) transpose算法:考虑到b.data中的行就是a.data中的列,要想得到b.data中行号为x的三元组元素,可对a.data扫描一遍,找出a.data中列号为x的元素即可
对a.data 扫描a.n遍,数组转置完成。
C算法代码:
程序代码
void transpose(SpMartix b, SpMartix a)
{
int p,q,col;
b.m = a.n;//行列数互换
b.n = a.m;
b.t = a.t;//非零元素个数不变
if(a.t)
{
q = 1;
for(col = 1; col <= a.n; ++col)
for(p = 1; p <= a.t; p++)
if(a.data[p].j == col)
{
b.data[q].j = a.data[p].i;
b.data[q].i = a.data[p].j;
b.data[q].v = a.data[p].v;
q++;
}
}
}
没有评论:
发表评论