稀疏矩阵
- 在矩阵中,若数值为0的元素数目远远多于非0元素的数目,并且非0元素分布没有规律时,则称该矩阵为稀疏矩阵。
- 可以通过 同时
(1)存储稀疏矩阵的在整体信息(矩阵行数,矩阵列数、非零元素个数)
(2)存储稀疏矩阵中非0元素信息(行序号、列序号、对应值)
来简化稀疏矩阵的存储。 - 通过2可知,存储稀疏矩阵的这种数据结构是一个多行三列的矩阵,在网上看的尚硅谷韩顺平老师讲的数据结构与算法,老师称此矩阵为稀疏数组。
示例代码
在代码中实现了如何将一个稀疏矩阵转化为稀疏数组,如何将稀疏数组存储到磁盘上,如何从磁盘读取稀疏数组并将其转化为稀疏矩阵。
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
/**
* 二维矩阵与稀疏数组间的转化
* 稀疏数组特点:
* - 只有三列(行序号、列序号、对应值)
* - 第一行数据是对矩阵的整体描述(矩阵大小,矩阵中非零数值个数)
* @author dxt
*
*/
public class SparseArr {
/**
* 将稀疏矩阵的稀疏数组形式 写入到 指定文件
* @param sparseArr
* @param row
* @param col
* @param path
*/
public static void writeToFile(int[][] sparseArr, int row, int col, String path) {
//文件地址
File dest = new File(path);
//选择流
BufferedWriter bw = null; //字符缓冲流
try {
bw = new BufferedWriter(new FileWriter(dest));
for(int i=0; i<row; i++) {
for(int j=0; j<col; j++) {
bw.write(sparseArr[i][j] + "\t"); //写数据
}
bw.newLine(); //换行
}
bw.flush();
} catch (IOException e) {
e.