万绥江 2023-06-14 10:36 采纳率: 0%
浏览 40
已结题

稀疏矩阵的运算实现快速转置

用三元组存储稀疏矩阵,实现其快速转置及矩阵相乘。可在输入矩阵的过程中建立三元组表及rpos(或cpot)数组。思路简洁

  • 写回答

8条回答 默认 最新

  • 断水流大撕兄 HarmonyOS创作领域新星创作者 2023-06-14 10:54
    关注
    获得0.90元问题酬金

    附上代码示例,便于你理解

    #include <iostream>
    using namespace std;
    
    // 三元组结构体 
    struct Triple {
        int row;
        int col;
        int val;
    };
    
    // 稀疏矩阵结构体
    struct SparseMatrix {
        int m; // 行数
        int n; // 列数
        int num; // 非零元个数
        Triple *data; // 三元组数组
        int *rpos; // 行指针,rpos[i]表示第i行第一个非零元在data中的位置 
    };
    
    // 快速转置 
    SparseMatrix transpose(SparseMatrix M) {
        SparseMatrix T;
        T.m = M.n; T.n = M.m;
        T.num = M.num; 
        T.data = new Triple[T.num];
        T.rpos = new int[T.m+1];
        
        // 构造T的rpos[]数组
        for (int i = 0; i <= M.m; i++) T.rpos[i] = 0;
        for (int i = 0; i < M.num; i++) T.rpos[M.data[i].col+1]++;
        for (int i = 1; i <= M.n; i++) T.rpos[i] += T.rpos[i-1];
        
        // 构造T的data[]数组
        for (int i = 0; i < M.num; i++) {
            int j = M.data[i].col;
            int k = T.rpos[j];
            T.data[k].row = M.data[i].col;
            T.data[k].col = M.data[i].row;
            T.data[k++].val = M.data[i].val;
            T.rpos[j] = k;
        }
        return T;
    }
    
    // 矩阵乘法
    SparseMatrix multiply(SparseMatrix A, SparseMatrix B) {
        //  ommitted 
    }
    
    int main() {
        //测试用例...
    }
    
    评论

报告相同问题?

问题事件

  • 系统已结题 6月22日
  • 创建了问题 6月14日

悬赏问题

  • ¥30 电脑误删了手机的照片怎么恢复?
  • ¥15 (标签-python|关键词-char)
  • ¥15 python+selenium,在新增时弹出了一个输入框
  • ¥15 苹果验机结果的api接口哪里有??单次调用1毛钱及以下。
  • ¥20 学生成绩管理系统设计
  • ¥15 来一个cc穿盾脚本开发者
  • ¥15 CST2023安装报错
  • ¥15 使用diffusionbert生成文字 结果是PAD和UNK怎么办
  • ¥15 有人懂怎么做大模型的客服系统吗?卡住了卡住了
  • ¥20 firefly-rk3399上启动卡住了