数据结构Java实现——④数组——>稀疏矩阵三元组顺序存储
来源:互联网 发布:开源淘宝客系统 编辑:程序博客网 时间:2024/06/05 08:34
作者信息
写在前面
闲话不想多说,接着总结,今天说的是稀疏矩阵三元组存储的顺序结构。
文字描述
一、名词解释
1、稀疏矩阵
矩阵阵中非零元素较少且分布的没有规律
2、三元组存储
矩阵中的一个元素有三个属性:行号,列号,元素的值,成为三元组
3、顺序结构
对于每一个三元组而已,根据行号优先或者列号优先排序起来,便于后期针对矩阵的运算
二、压缩与还原
1、压缩
逐行扫描矩阵,遇见非零元素就记录下来即可
2、还原
遍历顺序存储的数据,将每一个数据放入到矩阵的合适位置即可
代码实现
1、三元组抽象结构
package org.Stone6762.entity;/** * @Stone6762 */public class TripleNode {/** * @Fields row : TODO(该元素所在的行) */private int row;/** * @Fields column : TODO(该元素所在的列) */private int column;/** * @Fields value : TODO(该位置所储存的内容) */private double value;/** * @构造器 * @param row * @param column * @param value */public TripleNode(int row, int column, double value) {super();this.row = row;this.column = column;this.value = value;}/** * @构造器 */public TripleNode() {this(0, 0, 0);}public int getRow() {return row;}public void setRow(int row) {this.row = row;}public int getColumn() {return column;}public void setColumn(int column) {this.column = column;}public double getValue() {return value;}public void setValue(double value) {this.value = value;}@Overridepublic String toString() {return "[ (" + row + "," + column + "), "+ value + " ]";}}2、三元组的顺序存储及其还原过程
import org.Stone6762.Utils.ArrayUtils;import org.Stone6762.entity.TripleNode;/** * @Stone6762 */public class SparseArray {/** * @Fields data : TODO(储存数据的地方) */private TripleNode data[];/** * @Fields rows : TODO(原始数据的行数) */private int rows;/** * @Fields cols : TODO(原始数据的列数) */private int cols;/** * @Fields nums : TODO(现存数据的个数) */private int nums;public TripleNode[] getData() {return data;}public void setData(TripleNode[] data) {this.data = data;this.nums = data.length;}public int getRows() {return rows;}public void setRows(int rows) {this.rows = rows;}public int getCols() {return cols;}public void setCols(int cols) {this.cols = cols;}public int getNums() {return nums;}public void setNums(int nums) {this.nums = nums;}public SparseArray() {super();}/** * @构造器 * @param maxSize */public SparseArray(int maxSize) {data = new TripleNode[maxSize];for (int i = 0; i < data.length; i++) {data[i] = new TripleNode();}rows = 0;cols = 0;nums = 0;}/** * @构造器 * @param arr */public SparseArray(double arr[][]) {this.rows = arr.length;this.cols = arr[0].length;// 统计有多少非零元素,以便于下面空间的申请for (int i = 0; i < arr.length; i++) {for (int j = 0; j < arr[0].length; j++) {if (arr[i][j] != 0) {nums++;}}}// 根据上面统计的非零数据的个数,将每一个非零元素的信息进行保存data = new TripleNode[nums];for (int i = 0, k = 0; i < arr.length; i++) {for (int j = 0; j < arr[0].length; j++) {if (arr[i][j] != 0) {data[k] = new TripleNode(i, j, arr[i][j]);k++;}}}}/** * @Title: printArray * @Description: TODO(打印储存后的稀疏矩阵) */public void printArrayOfRC() {System.out.println("稀疏矩阵的三元组储存结构为: ");System.out.println("行数" + rows + ", 列数为:" + cols + " ,非零元素个数为: "+ nums);System.out.println("行下标 列下标 元素值 ");for (int i = 0; i < nums; i++) {System.out.println(" " + data[i].getRow() + " "+ data[i].getColumn() + " " + data[i].getValue());}}/** * @Description: TODO( ) */public void printArr() {System.out.println("稀疏矩阵的三元组储存结构为: ");System.out.println("行数" + rows + ", 列数为:" + cols + " ,非零元素个数为: "+ nums);double origArr[][] = reBackToArr();ArrayUtils.printMulArray(origArr);}/** * @Description: TODO(将稀疏矩阵还原成影视矩阵 ) * @return */public double[][] reBackToArr() {double arr[][] = new double[rows][cols];for (int i = 0; i < nums; i++) {arr[data[i].getRow()][data[i].getColumn()] = data[i].getValue();}return arr;}}
1 0
- 数据结构Java实现——④数组——>稀疏矩阵三元组顺序存储
- 数据结构Java实现——④数组—>稀疏矩阵三元组顺序存储-->矩阵的倒置
- 数据结构Java实现——④数组——>稀疏矩阵十字链表存储法
- 稀疏矩阵的三元组表示的实现及应用(2)——采用三元组存储稀疏矩阵,设计两个稀疏矩阵相加的运算算法
- 数据结构实践——稀疏矩阵的三元组表示
- 数据结构——稀疏矩阵三元组操作
- 数据结构—稀疏矩阵三元组基础及应用
- 稀疏矩阵相乘——三元组稀疏矩阵
- 稀疏矩阵 三元组顺序存储
- 稀疏矩阵的三元组顺序存储
- 矩阵的压缩存储————用三元组表存储稀疏矩阵
- 数据结构-数组-稀疏矩阵三元组
- 第九周 数据结构实践项目——数组和广义表【项目3.1-稀疏矩阵的三元组表示的实现及应用】
- (数据结构第五章)稀疏矩阵三元顺序表存储
- 数据结构与算法(Java描述)-15、稀疏矩阵以及稀疏矩阵的三元组实现
- 稀疏矩阵——行逻辑连接的顺序三元组表
- 数据结构 数组操作 稀疏矩阵采用三元组存储,设计算法求两个矩阵的和。
- 【数组项目3-稀疏矩阵的三元组表示的实现及应用——第9周】
- 室内风水学之玄关
- Android IOS WebRTC 音视频开发总结(七)
- ios平台UI自动化策略-UIautomation版(一)[谢绝转载]
- Android Volley完全解析(三),定制自己的Request
- linux下jdk1.7安装
- 数据结构Java实现——④数组——>稀疏矩阵三元组顺序存储
- 组合数取模计算模板
- 自定义控件-中间画线的view
- android的进程和线程
- delphi之多线程编程
- Delphi 枚举
- UI中的手势部分
- Mysql命令
- 检测版本更新