首页
题库
面试
求职
学习
竞赛
More+
所有博客
搜索面经/职位/试题/公司
搜索
我要招人
去企业版
登录 / 注册
首页
>
试题广场
>
有两个N*N的矩阵A和B,想要在PC上按矩阵乘法基本算法编程
[单选题]
有两个N*N的矩阵A和B,想要在PC上按矩阵乘法基本算法编程实现计算A*B。假设N较大,本机内存也很大,可以存下A、B和结果矩阵。那么,为了计算速度,A和B在内存中应该如何存储(按行存指先存储第一行,再第二行,直到最后一行;按列存指先存储第一列,再第二列,直到最后一列)?
A按行存,B按行存。
A按行存,B按列存。
A按列存,B按行存。
A按列存,B按列存。
查看正确选项
添加笔记
求解答(215)
邀请回答
收藏(1563)
分享
28个回答
添加回答
70
notlie
我们来看看传统的分块矩阵相乘:
很明显依然是行乘以列的方式。
再来看看Strassen矩阵相乘:
同样是分块,只是计算方式不同
很明显,涉及到行的加法(a+b,c+d,e+f,g+h),列的减法(f-h,g-e,b-d,a-c),对角线的加法(a+d,e+h)以及行列的乘法,所以无论是
A按行存,B按行存。
A按行存,B按列存。
计算速度都是差不多的。
而如果用的是传统矩阵相乘法,按B选项的方式存储计算速度更快。综上所述,我觉得答案应该选B。
编辑于 2015-08-17 17:35:17
回复(0)
82
lwya
这个题最开始我选的是B,想到的是传统矩阵相乘的方法,时间复杂度为O(n
3
),但是这不是最优的方法,最优方法为
Strassen矩阵相乘发,时间复杂度降低为O(n
2.81
),用分治的思想将矩阵分块计算,在这个算法中按行存储更有利。所以正确答案为A。
编辑于 2015-07-24 09:56:01
回复(6)
1
CodingOneLife
矩阵很大,内存很大,考察重点应该不是分治,当然分治会更快一些。
很多人都回复了,该题的考察重点应该是缓存相关的问题。
普通的矩阵相乘算法就是左行乘以右行
A按行存储,B按列存储,能够最大程度降低data *** miss
发表于 2019-07-03 09:47:14
回复(0)
1
sunwuyi
有两个N*N的矩阵A和B,想要在PC上按矩阵乘法基本算法编程实现计算A*B。假设N较大,本机内存也很大,可以存下A、B和结果矩阵。那么,为了计算速度,A和B在内存中应该如何存储?_阿里巴巴笔试题_牛客网
发表于 2018-10-12 08:47:27
回复(0)
1
Poundingtherock
这题难道不是应该考察缓存的??什么优化矩阵乘啊没有get到这个考点啊!!
发表于 2016-01-31 21:42:09
回复(0)
1
逗逗逗地主
既然提到了按矩阵乘法基本算法,为何不是B
发表于 2015-11-22 00:43:18
回复(0)
1
Echo001
题目说了,按矩阵乘法基本算法编程,为毛不是左行乘右列?
发表于 2015-09-03 23:40:55
回复(0)
1
森林里的金色阳光
详见http://www.ituring.com.cn/article/17978
发表于 2015-08-14 20:04:08
回复(1)
1
伊凡少爷
感觉应该是B,基本算法编程~~~
发表于 2015-08-13 21:48:41
回复(0)
1
过好每一天_20868
按照传统的计算方法,我觉得应该是选择B选项,这题难道不是这样的吗?
发表于 2015-08-11 10:21:24
回复(0)
1
Royal_Highness
因为按行存储,才可将矩阵分块,便于Strassen乘
发表于 2015-07-30 11:21:38
回复(1)
1
Prokias
为什么不是B?
发表于 2015-07-23 21:30:00
回复(0)
1
baixiangcpp
为什么不是B?
发表于 2015-07-22 23:20:05
回复(0)
1
royad
B
发表于 2015-04-02 17:33:53
回复(0)
3
葛小爷不在缑城
B
发表于 2015-03-31 21:58:35
回复(0)
1
kmust_XiaQing
A.按行存储,便于矩阵分块,使用
Strassen乘
发表于 2015-08-12 16:41:56
回复(0)
8
stephen.D.C
楼下的看到题目中“
按矩阵乘法基本算法编程实现计算A*B
”了么?
发表于 2015-08-12 17:09:46
回复(0)
2
不要把我当工具人
这里考察的应该是空间局部性,矩阵a和b相乘,大致就是a的行乘b的列,所以a按行存储满足空间局部性,b按列存储(把列的值存储成一行)满足空间局部性,其实读数组一直都是一行一行读,要想有空间局部性就得把一列存储为一行
发表于 2021-11-14 14:11:20
回复(0)
2
牛客182385号
想要在PC上按矩阵乘法基本算法编程实现计算A*B,所以有可知是基本行列算法(本人数学专业,只是我们本科阶段最常用的方法),所以我觉得这道题就是从计算机操作系统角度考虑,比如I7采用的三级缓存架构,一级缓存延时1ns,二级缓存延时10-20ns,三级缓存延时30,主存缓存延迟100ns(读取调用延时),因此可知当即可能提高数据在内存的命中率可以有效的提高计算机CPU的执行效率,所以采用B的方法最为合理。
发表于 2016-02-24 14:12:19
回复(0)
0
西园公子zwj
应该是考缓存问题
发表于 2023-08-10 12:21:33
回复(0)
这道题你会答吗?花几分钟告诉大家答案吧!
提交观点
问题信息
阿里巴巴
操作系统
来自:
阿里巴巴2015实习生笔试题
上传者:
muglelala
难度:
28条回答
1563收藏
35172浏览
热门推荐
相关试题
请编写实现malloc()内存分配...
微软
C++
操作系统
评论
(3)
进程阻塞的原因不包括()
阿里巴巴
操作系统
测试
后端开发
客户端开发
前端开发
数据
运维/技术支持
评论
(21)
来自
阿里巴巴2013研发工程...
小数值1.5625的二进制表示是?
编译和体系结构
评论
(15)
来自
阿里巴巴2015实习生笔试题
编程题 ,按照要求创建Java 应...
Java
评论
(1)
扫描二维码,关注牛客网
意见反馈
下载牛客APP,随时随地刷题