java 稀疏矩阵
来源:互联网 发布:网页游戏自动挂机软件 编辑:程序博客网 时间:2024/06/05 15:28
java稀疏矩阵
描述:
实现一个稀疏矩阵的正解析,反解析。
正解析:
将矩阵中非0的数据,以(数据,行下标,列下标)方式输出成新的矩阵,并附上矩阵的统计信息(有效数据个数,原矩阵行数,原矩阵列数)
反解析:
将正解析后的矩阵,反解析。
数据变化:
=== 生成随机矩阵 ===
4行 5列
=== 输出矩阵 ===
3,3,3,2,1
3,2,2,3,3
0,3,1,3,3
2,1,3,1,1
=== 正解析矩阵 ===
3,0,0
3,0,1
3,0,2
2,0,3
1,0,4
3,1,0
2,1,1
2,1,2
3,1,3
3,1,4
3,2,1
1,2,2
3,2,3
3,2,4
2,3,0
1,3,1
3,3,2
1,3,3
1,3,4
19,4,5
=== 反解析矩阵 ===
3,3,3,2,1
3,2,2,3,3
0,3,1,3,3
2,1,3,1,1
代码:
package com.test;import java.util.Random;/** * Created by CDP * 2016/11/28. */public class Matrix1 { /** * ************************************************************************************************************* * 生成随机矩阵 */ public static int[][] makeMatrix(int x, int y) { int matrix[][] = new int[x][y]; for (int i = 0; i < matrix.length; i++) { for (int j = 0; j < matrix[1].length; j++) { matrix[i][j] = new Random().nextInt(4); } } return matrix; } /** * *********************************************************************************************************** * === 正解析矩阵 === * 接收入参随机矩阵,计算出行和列,并以计算出的行和列创建新的二维数组 * 双for循环遍历入参矩阵,将矩阵(数据,行,列)赋值到新的二维数组实现正解析 * 二维数组末尾添加一行矩阵统计信息(有效数据,入参矩阵总该行数,入参矩阵总列数)用于反解析 */ public static int[][] positiveMatrix(int[][] matrix) { int row = matrix.length; //计算入参矩阵的行 int line = matrix[0].length; //计算入参矩阵的列 int allRow = row * line + 1; //计算入参矩阵所有数据,并+1行为统计信息预留 int posMatrix[][] = new int[allRow][3]; //创建一个二维数组用于返回 int allData = 0; //所有 数据 的 计数器 int effData = 0; //所有 有效数据 的 计数器 for (int i = 0; i < matrix.length; i++) { for (int j = 0; j < matrix[i].length; j++) { if (matrix[i][j] != 0) effData++; //有效数据记数 if (allData < allRow) { posMatrix[allData] = new int[]{matrix[i][j], i, j}; //解析矩阵并赋值到二维数组 allData++; //所有数据记数 } if (allData == allRow - 1) { posMatrix[allData] = new int[]{effData, row, line}; //矩阵统计信息加入二维数组最后一行 } } } return posMatrix; } /** * ************************************************************************************************************* * === 反解析矩阵 === * 根据正解析矩阵最后的统计信息(有效数据个数,行,列)取行和列,用于创建新的二维数组 * 创建入参矩阵所有数据计数器用于遍历入参矩阵,遍历矩阵每个数组的第一个值赋值到新创建的二维数组中,实现反解析 */ public static int[][] reverseMatrix(int[][] matrix) { int row = matrix[matrix.length - 1][matrix[0].length - 2]; //计算入参矩阵的行 int line = matrix[matrix.length - 1][matrix[0].length - 1]; //计算入参矩阵的列 int allRow = matrix.length - 1; //计算入参矩阵所有数据 int revMatrix[][] = new int[row][line]; //创建一个二维数组用于返回 int allData = 0; //所有 数据 的 计数器 for (int i = 0; i < revMatrix.length; i++) { for (int j = 0; j < revMatrix[i].length; j++) { if (allData < allRow) { revMatrix[i][j] = matrix[allData][0]; //反解析矩阵并赋值到二维数组 allData++; //所有数据记数 } } } return revMatrix; } /** * ************************************************************************************************************* * 输出矩阵所有值 */ public static void printMatrix(int[][] matrix) { for (int i = 0; i < matrix.length; i++) { for (int j = 0; j < matrix[1].length; j++) { if (j < matrix[1].length - 1) { System.out.print(matrix[i][j] + ","); } else { System.out.print(matrix[i][j]); } } System.out.println(); } } /** * ************************************************************************************************************* * 输出矩阵有效值 * 例如,非0的值 */ public static void printEffMatrix(int[][] matrix) { for (int i = 0; i < matrix.length; i++) { String temp = ""; for (int j = 0; j < matrix[1].length; j++) { temp += matrix[i][j] + ","; } if (!temp.startsWith("0")) { System.out.println(temp.substring(0, temp.length() - 1)); } } } public static void main(String[] args) { System.out.println("=== 生成随机矩阵 ==="); int x = 4; int y = 5; int[][] randomMatrix = makeMatrix(x, y); System.out.println(" " + x + "行 " + y + "列"); System.out.println("=== 输出随机矩阵 ==="); printMatrix(randomMatrix); System.out.println("=== 正解析矩阵 ==="); printEffMatrix(positiveMatrix(randomMatrix)); System.out.println("=== 反解析矩阵 ==="); printMatrix(reverseMatrix(positiveMatrix(randomMatrix))); }}
0 0
- java 稀疏矩阵
- 《矩阵》——稀疏矩阵(Java)
- 稀疏矩阵
- 稀疏矩阵
- 稀疏矩阵
- 稀疏矩阵
- 稀疏矩阵
- 稀疏矩阵
- 稀疏矩阵
- 稀疏矩阵
- 稀疏矩阵
- 稀疏矩阵
- 稀疏矩阵
- 稀疏矩阵
- 稀疏矩阵
- 稀疏矩阵
- 稀疏矩阵
- 稀疏矩阵
- HTTP POST请求报文格式分析与Java实现文件上传
- CentOS安装Nginx 报错“configure: error: the HTTP rewrite module requires the PCRE library”解决办法
- poj 2386 Lake Counting(dfs)
- 【JavaScript】 判断横竖屏
- C++开源日志库选择
- java 稀疏矩阵
- 解决LibclangError: [Error 193] %1 不是有效的 Win32. To provide e Config.set_library_path() or Config.
- 一:Spark介绍
- 搜索二维矩阵
- 头文件和宏模板
- mybatis一对多查询过程只查询了一个结果
- FFMpeg Intro - Subtitles and Metadata
- 简介Swift面向协议编程
- 设置Sublime Text新标签页打开文件