c语言程序 稀疏矩阵乘法运算,C ++中的稀疏矩阵乘法

假设我们有两个矩阵A和B,我们必须找到AB的结果。我们可以假设A的列号等于B的行号。

因此,如果输入像[[1,0,0],[-1,0,3]] [[7,0,0],[0,0,0],[0,0,1]] ,100

-103

700

000

001

那么输出将是[[7,0,0],[-7,0,3]]700

-703

为了解决这个问题,我们将遵循以下步骤-r1:= A的大小,r2:= B的大小

c1:= A [0]的大小,c2:= B [0]的大小

定义顺序为r1 x c2的一个2D数组ret

定义成对的数组sparseA [r1]

对于初始化i:= 0,当i

在sparseA [i]的末尾插入{j,A [i,j]}

对于初始化j:= 0,当j

对于初始化i:= 0,当i

ret [i,k]:= ret [i,k] + sparseA [i,j] * B [x,k]的第二个元素

x:= sparseA [i,j]的第一个元素

如果B [x,k]不等于0,则-

对于初始化j:= 0,当j

返回ret

让我们看下面的实现以更好地理解-class Solution {

public:

vector multiply(vector& A, vector& B) {

int r1 = A.size();

int r2 = B.size();

int c1 = A[0].size();

int c2 = B[0].size();

vector  ret(r1, vector 

vector  > sparseA[r1];

for(int i = 0; i 

for(int j = 0; j 

if(A[i][j] != 0)sparseA[i].push_back({j, A[i][j]});

}

}

for(int i = 0; i 

for(int j = 0; j 

for(int k = 0; k 

int x = sparseA[i][j].first;

if(B[x][k] != 0){

ret[i][k] += sparseA[i][j].second * B[x][k];

}

}

}

}

return ret;

}

};

输入值{{1,0,0},{-1,0,3}},{{7,0,0},{0,0,0},{0,0,1}}

输出结果[[7, 0, 0, ],[-7, 0, 3, ],]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值