数据结构Java实现——④数组—>稀疏矩阵三元组顺序存储-->矩阵的倒置
来源:互联网 发布:南昌豫章书院知乎 编辑:程序博客网 时间:2024/06/16 20:56
作者信息
文字描述
倒置:把矩阵A的行换成相应的列,得到的新矩阵称为A的转置矩阵,记作AT或A。
通常矩阵的第一列作为转置矩阵的第一行,第一行作为转置矩阵的第一列。
那么,在已经存储好的三元组的顺序存储结构中,如果如何实现矩阵的倒置呢???
第一反应肯定是直接遍历,然后行列对换即可,但是因为要求按照行号优先(也可以是列号优先,但是必须倒置前和倒置后都按照一种优先的方式排列),所以如果直接对换,那么就会变得没有顺序,还需要一次排序,这样反而不妙。
1、正常倒置
既然要进行行列对换,那么对换后的行号就是对换前的列号,因此可以多次扫描列号,
从列号小的开始扫描对换,那么进行对换后一定能够满足行号优先
2、快速倒置
很显然对于正常的倒置来说,要多次扫描整个存储空间,浪费大量的时间,因此可以对其进行优化
我们可以首先记录每一列(倒置后就是行)有多少元素,然后预留出空间
然后一遍扫描直接将其元素放入合适的预留位置即可
代码实现
1、正常倒置
/** * @Stone6762 */public SparseArray transpose() {SparseArray tm = new SparseArray(nums);// 创建一个转置后的矩阵对象tm.cols = rows;// 行列变化,非零个数不变tm.rows = cols;tm.nums = nums;int q = 0;// 从小到大扫描列号,然后进行变化for (int col = 0; col < cols; col++) {for (int p = 0; p < nums; p++) {if (data[p].getColumn() == col) {tm.data[q].setColumn(data[p].getRow());tm.data[q].setRow(data[p].getColumn());tm.data[q].setValue(data[p].getValue());q++;}}}return tm;}
2、快速倒置
/** * @Stone6762 */public SparseArray fastTranspose() {/* * 首先将位置进行预留,然后再“填空”。 num [cols];每一个“空”的大小 。 copt[cols];每一个“空”的起始位置 */SparseArray tm = new SparseArray(nums);// 创建一个转置后的对象tm.cols = rows;// 行列变化,非零元素个数不变tm.rows = cols;tm.nums = nums;int tCol = 0, indexOfC = 0;if (nums > 0) {int[] num = new int[cols];// 原始矩阵中第Col列的非零元素的个数int[] copt = new int[cols];// 初始值为N中的第col列的第一个非零元素在TM中的位置// 初始化num和copt数组for (int i = 0; i < nums; i++) {tCol = data[i].getColumn();num[tCol]++;}copt[0] = 0;for (int i = 1; i < cols; i++) {copt[i] = copt[i - 1] + num[i - 1];}// 找到每一个元素在转置后的三元组中的位置for (int i = 0; i < nums; i++) {tCol = data[i].getColumn();// 取得扫描TN中的第i个元素的列值tColindexOfC = copt[tCol];// 取得该tCol列的下一个元素应该存储的位置tm.data[indexOfC].setRow(data[i].getColumn());tm.data[indexOfC].setColumn(data[i].getRow());tm.data[indexOfC].setValue(data[i].getValue());copt[tCol]++;// 此时的copt[col]表示的是下一个该 col列元素会存储的位置}}return tm;}
1 0
- 数据结构Java实现——④数组—>稀疏矩阵三元组顺序存储-->矩阵的倒置
- 数据结构Java实现——④数组——>稀疏矩阵三元组顺序存储
- 稀疏矩阵的三元组顺序存储
- 稀疏矩阵的三元组表示的实现及应用(2)——采用三元组存储稀疏矩阵,设计两个稀疏矩阵相加的运算算法
- 数据结构实践——稀疏矩阵的三元组表示
- 数据结构Java实现——④数组——>稀疏矩阵十字链表存储法
- 数据结构与算法(Java描述)-15、稀疏矩阵以及稀疏矩阵的三元组实现
- 数据结构 数组操作 稀疏矩阵采用三元组存储,设计算法求两个矩阵的和。
- 稀疏矩阵 三元组顺序存储
- 矩阵的压缩存储————用三元组表存储稀疏矩阵
- 数据结构:稀疏矩阵的三元组顺序表
- 数据结构-数组-稀疏矩阵三元组
- 稀疏矩阵的三元组顺序表存储
- 数据结构——稀疏矩阵三元组操作
- 数据结构—稀疏矩阵三元组基础及应用
- 稀疏矩阵相乘——三元组稀疏矩阵
- (数据结构第五章)稀疏矩阵三元顺序表存储
- 稀疏矩阵的三元组行逻辑链接的顺序表存储结构表示及实现
- NYOJ 题目117求逆序数
- JS实现控制月末日期的下拉列表
- 编译无错误,但是不能签名
- SQL行列转换
- android 布局输入框 输入时 不显示输入内容
- 数据结构Java实现——④数组—>稀疏矩阵三元组顺序存储-->矩阵的倒置
- hdu-4405(dp+期望)
- uva 1346 Songs(贪心)
- 关于Java中的IEEE765浮点数表示法
- MediaPlayer info
- windows 2003建立ftp
- Foundation框架: 7.NSMutableString的基本认识
- 我发现的最好的新闻图片网站
- Maven+Mybatis+Spring配置之第一步:配置pom.xml依赖