私が理解していることから、行列を乗算するための Strassen の方法は最速であるはずです...しかし、Divide & Conquer 方法は私のテストでは明らかに最速です...私は何か間違ったことをしていますか? それともこれは正しいですか?
指示は次のとおりです。
したがって、すべてのメソッドに個別の「カウンター++」があり、時間を「記録/カウンター++」で分割します
これまでのところ、私の時間は次のとおりです: (上/下の順に: クラシック、分割統治、ストラッセン) (サイズ = マトリックスのサイズ)
サイズ 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 の行列の出力例を次に示します。
1 番目のランダム生成行列: 10 57 33 70
6 12 38 70
20 41 65 98
83 0 31 73
2 番目のランダム生成行列: 11 70 54 79
2 51 38 71
27 53 37 86
48 87 20 41
従来の乗算行列: 4475 53144
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ナノ秒
Strassen 乗算行列: 4475 11446 5327 10545
4476 9136 3586 7464
6761 15462 7003 14099
5254 13804 7089 12216
経過時間: 5303ナノ秒