您的位置:首页 > 其它

实现两个N×N矩阵的乘法,矩阵由一维数组表示

2017-05-30 14:04 281 查看
此题的关键在于找到矩阵乘法的不变式!

例如:

矩阵a × 矩阵b = 矩阵ab

1 2
5 6

×

3 4
7 8

显然 ab[0] = a[0] * b[0] + a[1] * b[2]

ab[1] = a[0] * b[1] + a[1] * b[3]

ab[2] = a[0] * b[0] + a[3] * b[2]

ab[3] = a[0] * b[1] + a[3] * b[3]

由此可以找出一个规律:

ab[i] = a[n*(i/n) + 0] * b[i%n + 0 * n] +
a[n*(i/n) + 1] * b[i%n +
1 * n] + ... +a[n*(i/n) + n - 1] * b[i%n + (n-1)*n]

不变式找到了就可以很容易的写出代码!

#include<iostream>
#include<iterator>
#include<algorithm>
#include<vector>
using namespace std;

bool can(string a,string b)
{
if(a.size() != b.size())
return false;

return true;
}

int main()
{
int n;
cin >> n;
vector<int> a(n * n),b(n * n),ab(n * n, 0);
for(int i = 0; i < n * n; ++i)
cin >> a[i];
for(int i = 0; i < n * n; ++i)
cin >> b[i];
for(int i = 0; i < n * n; ++i)
{
for(int j = 0; j < n; ++j)
ab[i] += a[n * (i / n) + j] * b[i % n + j*n];
}
copy(ab.begin(), ab.end(), ostream_iterator<int> (cout, " "));
cout<<"\n";
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: