社区
数据结构与算法
帖子详情
在线等:不另申请空间,转置矩阵的算法
Creamdog
2004-11-11 10:11:32
求不另申请空间,转置矩阵的算法,矩阵的行列可不相等!
分不够可以再加,谢诸位大侠了!
...全文
442
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
打赏
举报
回复
1
假设原先矩阵是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
【数据结构】三元组表的定义以及快速转置
三元组表的定义以及快速转置
c语言稀疏矩阵转置实验报告,稀疏矩阵三元组实现矩阵转置
算法
实验报告
《稀疏矩阵三元组实现矩阵转置
算法
实验报告》由会员分享,可
在线
阅读,更多相关《稀疏矩阵三元组实现矩阵转置
算法
实验报告(5页珍藏版)》请在人人文库网上搜索。1、实验三稀疏矩阵的三元组表示实现矩阵转置
算法
学院专业班学号姓名一. 实习目的1. 掌握稀疏矩阵的三元组顺序表存储表示;2. 掌握稀疏矩阵三元组表示的传统转置
算法
的实现;3. 掌握稀疏矩阵三元组表示的快速转置
算法
的实现;二. 实习内容1. 稀疏矩阵...
C++矩阵转置:从基础实现到分块优化的性能提升
矩阵转置是线性代数中的基础运算,其核心原理是将矩阵的行列互换。在计算机科学中,这一操作不仅是
算法
学习的经典案例,更是理解内存布局和性能优化的关键切入点。从技术价值看,高效的转置实现能显著提升图像处理、科学计算和机器学习等领域的计算效率。应用场景广泛,尤其在处理大规模数据时,优化内存访问模式至关重要。本文深入探讨了C++中矩阵的不同存储结构(如vector
>和扁平化vector
)对转置性能的影响,并重点介绍了分块优化技术。通过利用CPU缓存特性,分块策略能有效减少缓存缺失,从而大幅提
OJ 1987: C语言实验——矩阵转置
问题及代码 题目描述 输入N*N的矩阵,输出它的
转置矩阵
。 输入 第一行为整数N(1≤N≤100)。 接着是一个N*N的矩阵。 输出
转置矩阵
。 样例输入 2 1 2 1 2 样例输出 1 1 2 2 /*烟台大学计算机学院 2016 作者: 马春澎 完成日期:2016年12月25日 */ #include #include #include int mai
【LeetCode】
转置矩阵
给定一个矩阵 A, 返回 A 的
转置矩阵
。 矩阵的转置是指将矩阵的主对角线翻转,交换矩阵的行索引与列索引。 示例 1: 输入:[[1,2,3],[4,5,6],[7,8,9]] 输出:[[1,4,7],[2,5,8],[3,6,9]] 示例 2: 输入:[[1,2,3],[4,5,6]] 输出:[[1,4],[2,5],[3,6]] 提示: 1 <= A.l...
数据结构与算法
33,025
社区成员
35,335
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章