我有一个(相对较大的)矩阵需要转置。例如,假设我的矩阵是
a b c d e f
g h i j k l
m n o p q r
我希望结果如下:
a g m
b h n
c I o
d j p
e k q
f l r
什么方法是最快的?
我有一个(相对较大的)矩阵需要转置。例如,假设我的矩阵是
a b c d e f
g h i j k l
m n o p q r
我希望结果如下:
a g m
b h n
c I o
d j p
e k q
f l r
什么方法是最快的?
我认为最快的方法不应该超过O(n^2),而且这样你只能使用O(1)的空间:
做到这一点的方法是成对交换,因为当你转置一个矩阵时,你所做的是:M[i][j]=M[j][i],所以将M[i][j]存储在temp中,然后M[i][j]=M[j][i],最后一步:M[j][i]=temp。这可以通过一次遍历完成,所以它应该需要O(n^2)的时间复杂度。
我的答案是3x3矩阵的转置
#include<iostream.h>
#include<math.h>
main()
{
int a[3][3];
int b[3];
cout<<"You must give us an array 3x3 and then we will give you Transposed it "<<endl;
for(int i=0;i<3;i++)
{
for(int j=0;j<3;j++)
{
cout<<"Enter a["<<i<<"]["<<j<<"]: ";
cin>>a[i][j];
}
}
cout<<"Matrix you entered is :"<<endl;
for (int e = 0 ; e < 3 ; e++ )
{
for ( int f = 0 ; f < 3 ; f++ )
cout << a[e][f] << "\t";
cout << endl;
}
cout<<"\nTransposed of matrix you entered is :"<<endl;
for (int c = 0 ; c < 3 ; c++ )
{
for ( int d = 0 ; d < 3 ; d++ )
cout << a[d][c] << "\t";
cout << endl;
}
return 0;
}