【数据结构与算法】数组应用3:稀疏矩阵压缩(Java实现)
2017-10-28 10:04
791 查看
直接看下面的程序代码:
package chapter02; import java.util.Arrays; /* * 稀疏矩阵压缩(简单版) */ public class CH02_05 { public static void main(String[] args) { //定义一个稀疏矩阵 int[][] arr = { {25, 0, 0, 32, 0, -25}, {0, 33, 77, 0, 0, 0}, {0, 0, 0, 55, 0, 0}, {0, 0, 0, 0, 0, 0}, {101, 0, 0, 0, 0, 0}, {0, 0, 38, 0, 0, 0} }; //输出稀疏矩阵 for(int i = 0; i < arr.length; i++){ System.out.println(Arrays.toString(arr[i])); } //压缩稀疏矩阵的准备工作 int rows = arr.length; //稀疏矩阵的行 int cols = arr[0].length; //稀疏矩阵的列 int real = 0; //稀疏矩阵非0元素 //遍历获取稀疏矩阵的非0元素个数 for(int i = 0; i < rows; i++){ for(int j = 0; j < cols; j++){ if(arr[i][j] != 0){ real += 1; } } } //定义一个数组,用来保存压缩后的稀疏矩阵 int[][] arrResult = new int[real+1][3]; //初始化arrResult for(int i = 0; i < arrResult.length; i++){ Arrays.fill(arrResult[i], 0); } //在arrResult中保存稀疏矩阵的基本信息 //arrResult[0][0]:稀疏矩阵的行数 arrResult[0][1]:稀疏矩阵的列数 arrResult[0][2]:稀疏矩阵非0元素个数 arrResult[0][0] = rows; arrResult[0][1] = cols; arrResult[0][2] = real; //输出初始化后的arrResult System.out.println(); for(int i = 0; i < arrResult.length; i++){ System.out.println(Arrays.toString(arrResult[i])); } //开始压缩稀疏矩阵 int k = 1; //用来记录arrResult到第几行,因为第0行已经用来保存基本信息,所以从第1行开始 for(int i = 0; i < rows; i++){ for(int j = 0; j < cols; j++){ if(arr[i][j] != 0){ arrResult[k][0] = i; arrResult[k][1] = j; arrResult[k][2] = arr[i][j]; k++; } } } //输出压缩后的稀疏矩阵 System.out.println(); for(int i = 0; i < arrResult.length; i++){ System.out.println(Arrays.toString(arrResult[i])); } } }执行结果如下:
[25, 0, 0, 32, 0, -25] [0, 33, 77, 0, 0, 0] [0, 0, 0, 55, 0, 0] [0, 0, 0, 0, 0, 0] [101, 0, 0, 0, 0, 0] [0, 0, 38, 0, 0, 0] [6, 6, 8] [0, 0, 0] [0, 0, 0] [0, 0, 0] [0, 0, 0] [0, 0, 0] [0, 0, 0] [0, 0, 0] [0, 0, 0] [6, 6, 8] [0, 0, 25] [0, 3, 32] [0, 5, -25] [1, 1, 33] [1, 2, 77] [2, 3, 55] [4, 0, 101] [5, 2, 38]
相关文章推荐
- 【数据结构与算法】数组应用1:矩阵乘法(Java实现)
- 【数据结构与算法】数组应用2:矩阵转置(Java实现)
- 【数据结构与算法】数组应用4:多项式计算Java版
- 数据结构——二维矩阵——数组实现(C++)
- Java数据结构与算法--数组
- 数据结构之应用 "栈(Stack)" 实现: 解析算术表达式及计算求值 (C#/Java)
- 三元组表压缩存储稀疏矩阵实现稀疏矩阵的快速转置(Java语言描述)
- 数据结构与实现——数组、矩阵、链表、队列、栈、对象、二叉树和红黑树
- 数据结构——快速排序原理及算法Java实现
- YYMMDD转换成4位字符压缩表示算法java实现——应用各位不等进制的思想
- 数据结构之应用 "栈(Stack)" 实现: 解析算术表达式及计算求值 (C#/Java)
- (4) 数据结构与算法 ---- 线性表 及Java实现 顺序表、链表、栈、队列
- 数据结构中关键路径算法的实现与应用
- 三元组表压缩存储稀疏矩阵实现稀疏矩阵的快速转置(Java语言描述)
- 三元组顺序结构实现稀疏矩阵相加,行序优先(Java语言描述)
- 【数据结构与算法】第三章 表c实现应用一-----------多项式
- 数据结构与算法学习笔记——链表部分实现(数组形式)
- 【数据结构与算法基础】以数组实现的循环队列 / Circular Queue implemented by array
- 【数据结构与算法】汉诺塔算法——java递归实现
- 数据结构与算法之动态数组实现堆栈