稀疏矩阵乘法(三元数组存储)
来源:互联网 发布:dsp性能优化的ei期刊 编辑:程序博客网 时间:2024/06/06 00:43
#include<stdio.h>
#include<stdlib.h>
typedef struct
{
int r;
int c;
int v;
}SPNode;
typedef struct
{
int mu,nu,tu;
SPNode data[7001];
}SPMatrix;
int num[10001],rpot[10001];
SPMatrix *A,*B,*C;
void num_rpot()
{
int i,j;
for(i=0;i<(B->mu);i++)
num[i]=0;
for(i=1;i<=(B->tu);i++)
{
j=B->data[i].r;
num[j]++;
}
rpot[0]=1;
for(i=1;i<(B->mu);i++)
rpot[i]=rpot[i-1]+num[i-1];
}
int main()
{ // freopen("1.txt","r",stdin);
A=(SPMatrix *)malloc(sizeof(SPMatrix));
B=(SPMatrix *)malloc(sizeof(SPMatrix));
C=(SPMatrix *)malloc(sizeof(SPMatrix));
int i,k;
scanf("%d%d%d",&A->mu,&A->nu,&A->tu);
for(i=1;i<=(A->tu);i++)
scanf("%d%d%d",&A->data[i].r,&A->data[i].c,&A->data[i].v);
scanf("%d%d%d",&B->mu,&B->nu,&B->tu);
for(i=1;i<=(B->tu);i++)
scanf("%d%d%d",&B->data[i].r,&B->data[i].c,&B->data[i].v);
C->mu=A->mu;
C->nu=B->nu;
if(A->nu!=B->mu)
return 0;
else if(A->tu*B->tu==0)
printf("%d %d 0\n",C->mu,C->nu);
else
{
num_rpot();
int temp[10001];
int j,r,q,p,t;
p=1; //指示A.data中当前非零元素的位置
r=0; //计数C中非零元素的个数
for(i=0;i<(A->mu);i++)
{
for(j=0;j<(B->nu);j++)
temp[j]=0; //Cij的累加器的初始化
while(A->data[p].r==i) //求第i行的
{
k=A->data[p].c; //A中当前非零元素的列号
if(k<(B->mu)-1) //确定B.data中第k行最后一个非零元素的位置
t=rpot[k+1]-1;
else
t=(B->tu);
for(q=rpot[k];q<=t;q++) //B中第k行的每一个非零元素
{
j=B->data[q].c;
temp[j]=temp[j]+(A->data[p].v)*(B->data[q].v);
}
p++;
}//while
for(k=0;k<(B->nu);k++)
if(temp[k])
{
r++;
C->data[r].r=i;
C->data[r].c=k;
C->data[r].v=temp[k];
}
}//for
C->tu=r;
printf("%d %d %d\n",C->mu,C->nu,C->tu);
if(C->tu>=1)
for(i=1;i<=r;i++)
printf("%d %d %d\n",C->data[i].r,C->data[i].c,C->data[i].v);
}
return 0;
}
- 稀疏矩阵乘法(三元数组存储)
- 稀疏矩阵三元组存储
- 稀疏矩阵用三元数组表示后的矩阵乘法算法 集合!
- 顺序存储结构的三元组稀疏矩阵的乘法运算
- 稀疏矩阵的实现(三元组存储)C++
- 稀疏矩阵 三元组顺序存储
- 稀疏矩阵的三元组存储结构
- 稀疏矩阵的三元组顺序存储
- 稀疏矩阵的三元组存储
- 第九周--三元组存储稀疏矩阵
- 稀疏矩阵的三元组存储算法
- 数据结构 数组操作 稀疏矩阵采用三元组存储,设计算法求两个矩阵的和。
- 数据结构-数组-稀疏矩阵三元组
- 稀疏矩阵的三元组表示的实现及应用(2)——采用三元组存储稀疏矩阵,设计两个稀疏矩阵相加的运算算法
- 三元组表示的稀疏矩阵的加法和乘法
- 数据结构Java实现——④数组——>稀疏矩阵三元组顺序存储
- 数组与广义表_稀疏矩阵的压缩存储_三元组做存储结构_矩阵转置
- 数组与广义表_稀疏矩阵的压缩存储_三元组做存储结构_矩阵相乘
- Android推送通知指南
- Android应用程序发送广播(sendBroadcast)的过程分析
- Adobe Flex + Adobe Air 3 + Alternativa 3D = 桌面3D引擎
- 正确的使用语句块
- 克什米尔
- 稀疏矩阵乘法(三元数组存储)
- 写程序 控制cpu占用率-4 绘制CPU使用率的正弦曲线2 通过C#指定线程运行的 CPU
- POJ_取石子游戏
- js禁止按回车键时表单自动提交
- ExpandableListView扩展(BaseExpandableListAdapter的使用)
- SYBASE中生成所有建表语句的过程
- 关于vc中edit控件的换行
- 业务逻辑层JDBC模板代码(没有使用manager代理类)
- 提升用户体验:HTML5 拖放文件上传