转置矩阵

对称矩阵及稀疏矩阵浅谈

时光怂恿深爱的人放手 提交于 2019-11-30 13:11:12
1.对称矩阵 特点: 关于对角线对称,Aij == Aji。 下面实现: ①对称矩阵的压缩存储 ②对称矩阵的访问 ③对称矩阵的还原 实现代码如下: #define _CRT_SECURE_NO_WARNINGS 1 #include<iostream> using namespace std ; //对称矩阵的压缩存储 template < class T> class SymmetricMatrix { public : SymmetricMatrix(T* array , size_t N) :_N(N) ,_a(NULL) { _a = new T[(N * (N + 1 ))>> 1 ]; for (size_t i = 0 ; i < N; ++i) { for (size_t j = 0 ; j < N; ++j) { if (i >= j) //表明是下三角数据时 { _a[(i * (i + 1 ))>> 1 + j] = array [i * N + j]; } else { break ; } } } } T& Access(size_t x, size_t y) { if (x < y) //如果访问上三角元素 { swap(x, y); } return _a[(x * (x + 1 )) >> 1 + y]; } void DisPlay() { for

有趣的算法-转置图像

╄→гoц情女王★ 提交于 2019-11-29 19:59:44
将 说明: 你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。 示例 1: 给定 matrix = [ [1,2,3], [4,5,6], [7,8,9] ], 原地旋转输入矩阵,使其变为: [ [7,4,1], [8,5,2], [9,6,3] ] 示例 2: 给定 matrix =s [ [ 5, 1, 9,11], [ 2, 4, 8,10], [13, 3, 6, 7], [15,14,12,16] ], 原地旋转输入矩阵,使其变为: [ [15,13, 2, 5], [14, 3, 4, 1], [12, 6, 8, 9], [16, 7,10,11] ] 我发现,好像矩阵转置一下再每一行左右变换就可以了 [1,2], [00 01] 翻转 [00 10] [3,4] [10 11] [01 11] 然后每一行左右互换 after: [3,1] [10 00] [4,2] [11 01] 三维矩阵也是一样 给定 matrix = [ [1,2,3], [00 01 02] 翻转 [00 10 20] [4,5,6], [10 11 12] [01 11 21] [7,8,9] [20 21 22] [22 21 20] ], 然后开始写代码,可能是有点困傻了,写转置的时候我居然写成了这样 for (int i=0;i<matrix

Leetcode之转置矩阵(java实现)

浪子不回头ぞ 提交于 2019-11-26 22:37:29
题目:给定一个矩阵 A, 返回 A 的转置矩阵。 矩阵的转置是指将矩阵的主对角线翻转,交换矩阵的行索引与列索引。 题解: 进行双重循环将A[i][j]与A[j][i]交换位置 关键方法: 获取矩阵的行数和列数 A.length//行数 A[0].length//列数 class Solution { public int[][] transpose(int[][] A) { int leni=A.length; int lenj=A[0].length; int [][] arix=new int[lenj][leni]; for(int i=0;i<leni;i++) for(int j=0;j<lenj;j++) { arix[j][i]=A[i][j]; } return arix; } } 来源: https://blog.csdn.net/qq_43826123/article/details/99171519