矩阵三元组的快速转置

1. 三元组矩阵的快速转置主要借助了两个外部数组,Num[]和Copt[],Num[]存放了转置之前的矩阵每一列中元素的个数。Copt[]矩阵存放了转置之后的三元组举证项应该存放的数据结构中的位置。

2. 由于转置前第n列第一个元素位置在转置之后的位置是转置之前第n列之前所有元素之和,所以通过Num[]和Copt[]数组就可以记录转置之后三元组矩阵每一项应该存放的位置。

 代码:

status FasterTransposesMatrix(TSMatrix M, TSMatrix &T){
    T.mu = M.nu;
    T.nu = M.mu;
    T.tu = M.tu;//将数据结构中M三元组的表头转置的复制到T的三元组表头中
    int Num[] = 0;
    if(T.tu){
        //初始化Num数组
        for(int col = 1; col <= M.nu; ++col){
            Num[col] = 0;
        }
        for(int t = 1; t <= M.tu; ++t){
            ++Num[M.data[t].j];//计算原数组中每一列的元素个数
        }
        int copt[1] = 1;
        //初始化copt数组,该数组存放转置后元素应该存放的三元组位置
        for (int col = 2; col <= M.nu; ++col){
            copt[col] = copt[col-1] + Num[col-1];
        }
        for (int p = 1; p<=M.tu; ++p){
            //找到转换之前M三元组对应数据结构位置
            col = M.data[p].j;
            //找到copt中存放的当前转置之前的三元组应该存放的转置之后的位置
            q = copt[col];
            T.data[q].i = M.data[p].j;
            T.data[q].j = M.data[p].i;
            T.data[q].v = M.data[p].v;
            //不要忘记在后移一项下一个元素需要移动的位置
            ++copt[col];
        }
    }
}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值