社区
数据结构与算法
帖子详情
求Strassen矩阵乘法的C++语言实现
egao
2004-09-25 07:28:29
各位大虾,请帮个忙。用C/C++做两个128阶方阵(128*128的矩阵)的乘法。C128=A128*B128,多谢。
...全文
860
12
打赏
收藏
求Strassen矩阵乘法的C++语言实现
各位大虾,请帮个忙。用C/C++做两个128阶方阵(128*128的矩阵)的乘法。C128=A128*B128,多谢。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
12 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Win32Boy
2004-10-15
打赏
举报
回复
认真思考,克服困难,争取胜利。
egao
2004-10-11
打赏
举报
回复
谢谢各位的支持,仍然期待时间复杂度小于n^3的程序,stranssen算法的实现。
FatPeter
2004-10-03
打赏
举报
回复
算法导论上有介绍的。
zhangxq1983
2004-10-02
打赏
举报
回复
这个矩阵的阶数任意。不过这个矩阵有一个问题就是:再初始化的时候(令n=3),如果第一次你输入了10个数,那么第10个数将成为下一个被初始化矩阵的第一个数。
zhangxq1983
2004-10-02
打赏
举报
回复
#include<iostream.h>
struct node
{
int data;
node *next;
};
class Vector
{
public:
node * list;
int n;
public:
void init();
void show();
void ch(Vector v1,Vector v2);
// ~Vector();
};
void Vector::init()
{
node *p1, *p2, *head;
int a;
head=0;
cout<<"请输入矩阵,两数之间用空格或回车格开"<<endl;
for(int i=0;i<n*n;i++)
{
cin>>a;
p1=new node;
p1->data=a;
if(head==0)
{
head=p1;
p2=p1;
}
else
{
p2->next=p1;
p2=p1;
}
}
list=head;
}
void Vector::ch(Vector v1,Vector v2)
{
node *p1,*p2,*head;
node *vp1=v1.list;
node *vp2=v2.list;
head=0;
int m=0;
for(int k=0;k<n*n;k++)
{
int ji=0;
for(int j=0;j<n;j++)
{
ji+=(vp1->data)*(vp2->data);
if(j<n-1)
{
vp1=vp1->next;
for(int l=0;l<n;l++)vp2=vp2->next;
}
else break;
}
p1=new node;
p1->data=ji;
if(head==0)
{
head=p1;
p2=p1;
}
else
{
p2->next=p1;
p2=p1;
}//将节点加入到链表中
m++;
vp1=v1.list;
vp2=v2.list;
for(j=0;j<m/n;j++)
for(int e=0;e<n;e++)vp1=vp1->next;
for(j=0;j<m%n;j++)vp2=vp2->next;
}
this->list=head;
}
void Vector::show()
{
node *p1;
int b;
int c=0;
p1=this->list;
for(int i=0;i<n*n;i++)
{
b=p1->data;
p1=p1->next;
cout<<b<<'\t';
c++;
if(c%n==0)cout<<endl;
}
cout<<endl;
}
void main()
{
Vector A,B,C,AB,BC,D,E;
int jie;
cout<<"请输入矩阵的阶数"<<'\t';
cin>>jie;
A.n=B.n=C.n=D.n=E.n=AB.n=BC.n=jie;
A.init();
cout<<"你刚才输入的矩阵A是:"<<endl;
A.show();
B.init();
cout<<"你刚才输入的矩阵B是:"<<endl;
B.show();
C.init();
cout<<"你刚才输入的矩阵C是:"<<endl;
C.show();
AB.ch(A,B);
cout<<"AB相乘得到的矩阵是:"<<endl;
AB.show();
BC.ch(B,C);
cout<<"BC相乘得到的矩阵是:"<<endl;
BC.show();
D.ch(A,BC);
cout<<"A与BC相乘得到的矩阵是:"<<endl;
D.show();
E.ch(AB,C);
cout<<"AB与C相乘得到的矩阵是:"<<endl;
E.show();
}
你运气好!最近一个大二的要做一个C++的课程设计要我帮忙,题目和这差不多。正好给你!
egao
2004-10-01
打赏
举报
回复
是啊,不知FatPeter是否能给俺个详细的算法。期待~……
egao
2004-09-30
打赏
举报
回复
谢谢blas,我的EMAIL:youjian_2008@eyou.com
FatPeter
2004-09-30
打赏
举报
回复
矩阵乘法小于n^3的实现?
blas
2004-09-29
打赏
举报
回复
干吗要Strassen算法,这种算法好看不中用!
我曾写过一个矩阵乘法,用icc8.0编译时效率还可以,如果你要的话请给个email!
egao
2004-09-29
打赏
举报
回复
各位大虾,请帮个忙。
egao
2004-09-29
打赏
举报
回复
专门的库我看不到原码呀/我想要看的是源代码!
jaredcsdn
2004-09-27
打赏
举报
回复
不是由专门的库嘛
MTL: http://www.osl.iu.edu/research/mtl/
算法导论(part1)
书中的算法以英语加伪代码的形式给出,只要有一点程序设计经验的人都能读懂,并可以用任何计算机
语言
(如C/
C++
和Java等)方便地
实现
。在书中,作者将算法的讨论集中在一些比较现代的例子上,它们来自分子生物学(如...
算法导论(part2)
书中的算法以英语加伪代码的形式给出,只要有一点程序设计经验的人都能读懂,并可以用任何计算机
语言
(如C/
C++
和Java等)方便地
实现
。在书中,作者将算法的讨论集中在一些比较现代的例子上,它们来自分子生物学(如...
Stra
sse
n
矩阵乘法
C++
实现
直接根据
矩阵乘法
的定义来遍历计算。 Cij=∑k=1bAik×Bkj C_{ij}=\sum_{k=1}^{b}{A_{ik}\times B_{kj}} Cij=k=1∑bAik×Bkj
c++
语言
代码: void matrixMul(int** A,int** B,int** C,int m,int b,int n){ ...
Stra
sse
n
矩阵乘法
(
C++
)
思路 两个矩阵A,B相乘时.有以下三种方法 暴力计算法. 三个for循环, 这时候时间复杂度为O(n^3)....n)Aik*Bkj,需要一个循环, 且C中有n^2个元素, 所以时间复杂度为O(n^3) ...用T(n)表示n*n矩阵的乘法, 所以有T
[算法]用
C++
实现
Stra
sse
n方法
求
矩阵乘法
(详细思路+代码+注释+测试)
学完《数据结构与算法分析(
C++
版)》(第三版)16.3.3节
Stra
sse
n矩阵相乘的算法流程后,用
C++
实现
Stra
sse
n方法
求
矩阵乘法
参考了这个博客的思路添加链接描述
Stra
sse
n矩阵相乘的算法,相比起普通算法,只是少了一次...
数据结构与算法
33,008
社区成员
35,326
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章