社区
数据结构与算法
帖子详情
在线等:不另申请空间,转置矩阵的算法
Creamdog
2004-11-11 10:11:32
求不另申请空间,转置矩阵的算法,矩阵的行列可不相等!
分不够可以再加,谢诸位大侠了!
...全文
371
12
打赏
收藏
在线等:不另申请空间,转置矩阵的算法
求不另申请空间,转置矩阵的算法,矩阵的行列可不相等! 分不够可以再加,谢诸位大侠了!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
12 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
cao12m
2004-12-11
打赏
举报
回复
按错键拉不好意思 比如说
1 2 3
4 5 6
进去出来后就成拉6 5 4
3 2 1
再进6 3
5 2
4 1
出来就成拉1 4
2 5
3 6
哈哈简单把不过要用到栈你也可以不用栈完成以上功能
你也可以用三元组法该一下下标就好拉
cao12m
2004-12-11
打赏
举报
回复
最简单的一种算法就是那样意思很简单你比如说 1 2 3
4 5 6
cao12m
2004-12-11
打赏
举报
回复
把所有元素按行优先推入栈中再按行出来再按列优先推进去按行取出来 第二次出来时候是行列交换这样就好拉
mathe
2004-11-29
打赏
举报
回复
假设原先矩阵是W*H的,那么变换以后的矩阵是H*W的
对于任何一个原先矩阵中位置为(i,j)的元素,它存放的位置为
i*H+j,那么变换后,位置为j*W+i.
我们就可以使用上面的算法依次把每个元素移动到它的新位置,只是在移动之前,
先要保存新位置上元素到一个临时变量中。由于要求不开辟新内存,我们只能使用
最多常数个变量,所以下一步就应该新位置上面的元素((j*W+i)/H,(j*W+i)%H)。
现在的问题是我们如何判断一个元素是否已经被移动了,就可以了。
for(int i=0;i<W;i++){
for(int j=0;j<H;j++){
//code to judge whether location (i,j) has been moved.
int start=i*H+j;
int i0=i,j0=j;
int next;
do{
next=j0*W+i0;
i0=next/H;j0=next%H;
}while(next>start);
if(next==start){ //The location (i,j) has not been moved.
float tmp=a[start];
i0=i,j0=j;
do{
float tmp2;
next=j0*W+i0;
i0=next/H;j0=next%H;
tmp2=a[next];
a[next]=tmp;
tmp=tmp2;
}while(next!=start);
a[start]=tmp;
}
}
}
LoveCreatesBeauty
2004-11-28
打赏
举报
回复
Rotate a 3*3 array of int by 90 degrees clockwise
http://www.cnblogs.com/lovecreatesbeauty/archive/2004/09/25/46508.html
qrlvls
2004-11-26
打赏
举报
回复
for里面的变量不算是另外申请空间对吧,呵呵,看来还是汇编管用
rickone
2004-11-26
打赏
举报
回复
转置有什么用?
我看干脆不用交换,只把下标换一下就行了。
a[i][j]是n*m矩阵,转置成b[i][j] m*n,就反过来读,b[i][j]=a[j][i]
写一个读矩阵元素的函数getvalue(i,j,t),t标识是否是转置后的矩阵,不是就返回a[i][j],否则返回a[j][i]。
行不行?
pcboyxhy
2004-11-26
打赏
举报
回复
int *p = new int[ n*n ];
a[i][j]就是*(p+ n*i +j)
管他几维的数组,
全部化为一维的
NowCan
2004-11-11
打赏
举报
回复
行列不等,转置后怎么可能放在原来的矩阵里?
Creamdog
2004-11-11
打赏
举报
回复
楼上的,行列不相等时怎么交换啊
寻开心
2004-11-11
打赏
举报
回复
解决交换两个变量不利用中间变量的办法就可以了
对于两个变量a和b,交换他们数值的办法有很多
主要根据他们的类型来选择合适的办法
对于矩阵应该说是浮点类型,可以用:
a=a+b
b=a-b
a=a-b
转置就可以按照两两交换无需其他变量的方法一次交换就可以了e,
寻开心
2004-11-11
打赏
举报
回复
多加一个判断就可以了
假定原来的矩阵是M*N
转置后的就是N×M
for ( int i=0; i<n; i++ )
for (int j=0; j<m; j++ ) {
if (j>i)
交换新矩阵i,j位置,和老矩阵i,j位置
else
交换新矩阵i,j位置,和老矩阵j,i位置
}
注: 新矩阵i,j位置就是 数组的 (i-1)*m + j-1
老矩阵i,j位置就是 数组的 (i-1)*n + j-1
比如一个5×3的矩阵,假定数值就是 11 12 13 14 15 21 22 23 24 25 31 32 33 34 35
按照上述算法,i=0时候,交换完成的结果就是
11 21 31 14 15 12 22 23 24 25 13 32 33 34 35
i=1交换完成后的结果就是
11 21 31 12 22 32 14 15 34 24 25 13 12 33 34 35
...
最终结果就是
11 21 31 12 22 32 13 23 33 14 24 34 15 25 35
矩阵原地转置
算法
实现矩阵的原地转置
数据结构与
算法
三元组转置
算法
(稀疏矩阵)
三元组稀疏矩阵转置
算法
及相关讨论 本篇文章介绍稀疏矩阵中的数据如何存储的更加高效,以及矩阵转置的优良
算法
------三元组稀疏矩阵转置
算法
。 稀疏矩阵定义:矩阵中非零元素的个数远远小于矩阵元素的总数,并且非零元素的分布没有规律,通常认为矩阵中非零元素的总数比上矩阵所有元素总数的值小于等于0.05时,则称该矩阵为稀疏矩阵(sparse matrix)。 稀疏因子:矩阵中的有效数据量 / 矩阵总元素...
矩阵转置
算法
和一些简单的加,减,乘法
矩阵转置分为方阵的转置和非方阵的转置,方阵支持原地转置,非方阵则不支持。方阵原地转置
算法
:template<class T> void transpose(T **a,int rows) { for(int i=0;i<rows;i++) for(int j=i+1;j<rows;j++) swap(a[i][j],a[j][i]) }因为方阵转置前后他们的形状...
三元组稀疏矩阵转置
算法
三元组稀疏矩阵转置运算 1.关于稀疏矩阵的解释(定义) 矩阵中非零元素的个数远远小于矩阵元素的总数,并且非零元素的分布没有规律,通常认为矩阵中非零元素的总数比上矩阵所有元素总数的值小于等于0.05时,则称该矩阵为稀疏矩阵(sparse matrix),该比值称为这个矩阵的稠密度。 摘自:https://baike.so.com/doc/5775258-5988034.html 2.有关稀疏矩阵的空...
[解题报告]【第33题】给定一个 n X n 的矩阵,求它的
转置矩阵
全文目录????主要知识点矩阵的转置????课后习题867.
转置矩阵
????写在最后 今天是c语言基础打卡的第32天,主要内容是矩阵的操作,还牵扯了亿点点二级指针的相关知识点,希望大家能够理解呢。 相关链接: 【第33题】给定一个 n X n 的矩阵,求它的
转置矩阵
????????作者简介:一个从工业设计改行学嵌入式的年轻人 ✨联系方式:2201891280(QQ) ⏳全文大约阅读时间: 10min ????主要知识点 矩阵的转置 只要遍历矩阵的上半部分或者下半部分进行元素的交换就好了。 voi
数据结构与算法
33,008
社区成员
35,326
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章