【发布时间】:2012-03-04 10:16:06
【问题描述】:
据我了解,Strassen 的矩阵相乘方法应该是最快的……但分治法显然是我测试中最快的……我做错了什么吗?或者这样说对吗?
指令是:“然后将花费的总时间除以执行算法的次数,以获得解决给定实例所花费的时间”
所以我只是在每个方法中都有一个单独的“counter++”并划分时间“recorded / counter++”
到目前为止,这是我的时代:(按上/下顺序:经典、分而治之、施特拉森)(大小 = 矩阵大小)
尺寸 2
经过的时间:8660 纳秒
经过的时间:3849 纳秒
经过的时间:5377 纳秒
尺寸 4
经过的时间:24864 纳秒
经过的时间:3080 纳秒
经过的时间:5229 纳秒
8 号
经过的时间:125435 纳秒
经过的时间:2920 纳秒
经过的时间:5196 纳秒
尺寸 16
经过的时间:867149 纳秒
经过的时间:1559 纳秒
经过的时间:2853 纳秒
尺寸 32
经过的时间:5191721 纳秒
经过的时间:972 纳秒
经过的时间:1722 纳秒
64 码
经过的时间:8155785 纳秒
经过的时间:874 纳秒
经过的时间:1696 纳秒
样本输出 这是我输出的大小为 4 的矩阵的示例:
第一个随机生成的矩阵:
10 57 33 70
6 12 38 70
20 41 65 98
83 0 31 73
第二个随机生成的矩阵:
11 70 54 79
2 51 38 71
27 53 37 86
48 87 20 41
经典乘法矩阵:
4475 11446 5327 10545
4476 9136 3586 7464
6761 15462 7003 14099
5254 13804 7089 12216
经过的时间:21232 纳秒
分治乘法矩阵:
4475 11446 5327 10545
4476 9136 3586 7464
6761 15462 7003 14099
5254 13804 7089 12216
经过的时间:3042 纳秒
施特拉森乘法矩阵:
4475 11446 5327 10545
4476 9136 3586 7464
6761 15462 7003 14099
5254 13804 7089 12216
经过的时间:5303 纳秒
【问题讨论】:
-
你确定你的分治算法能给出正确的结果吗? Strassen 本质上是分而治之;他们以这种方式进行多次加法和乘法一定有一些原因。
-
是的,我实际上将所有计算的矩阵打印到控制台,并确保它们都是相同的
-
我同意pad,确保你在比较结果。不是用手。计算并打印均方误差。
-
我保证我做到了。我将复制并粘贴我的输出示例(编辑 OP)
-
"计算并打印均方误差。"我不知道该怎么做,或者这意味着什么
标签: performance algorithm matrix matrix-multiplication divide-and-conquer