在矩阵中,若数值为0的元素数目远远多于非0元素的数目,并且非0元素分布没有规律时,则称该矩阵为稀疏矩阵;与之相反,若非0元素数目占大多数时,则称该矩阵为稠密矩阵。定义非零元素的总数比上矩阵所有元素的总数为矩阵的稠密度。
复习下顺便发到CSDN记录下日常。
上述博客简要概述了稀疏矩阵的概念及存储格式,下述代码主要采用Coordinate(COO)存储格式。
菜鸟程序员一名!欢迎大家交流互动,指导批评。
完整代码如下:
import java.util.Arrays; public class SparseMatrix { public static void main(String[] args) { int[][] array1=new int[11][11]; array1[1][2]=1; array1[3][2]=1; array1[2][2]=1; array1[5][5]=1; System.out.println("输出原始数组"); int row=1; //row纯粹是为了输出原始数组的行数方便后续观看对比 可以删去 for (int[] ints : array1) { System.out.print(row+++"|t"); //row纯粹是为了输出原始数组的行数方便后续观看对比 可以删去 for (int anInt : ints) { System.out.print(anInt+"t"); } System.out.println(); } //创建一个稀疏数组,先求有效值个数,再求有效值都为啥 int sum=0; for (int i = 0; i < array1.length; i++) { for (int j = 0; j < array1.length; j++) { if (array1[i][j]!=0){ sum++; } } } System.out.println("有效值个数:"+sum+"==============="); //稀疏数组的行数为有效值个数+零元素, 列数为 横纵坐标+ 值 即3列。 int [][] array2= new int[sum+1][3]; System.out.println("稀疏数组为"); int count=0; for (int i = 0; i < array1.length; i++) { for (int j = 0; j < array1.length; j++) { if (array1[i][j]!=0){ //当遇到第一个不为零元素的值时,记录行列坐标和对应的值赋给二维数组 array2[count][0]=i+1; //因为数组下标是从零开始的,为了在行列式中显示更直观,直接对i行和j列进行了+1处理,删去的话则恢复到默认稀疏数组是从第零行第零列开始。 array2[count][1]=j+1; array2[count][2]= array1[i][j]; count++; } } } //输出稀疏矩阵 不要忘了数组下标和 行列式大小相差1 System.out.println("it"+"jt"+"value"); for (int i = 0; i < array2.length-1; i++) { System.out.println(array2[i][0]+"t"+array2[i][1]+"t"+array2[i][2]); } //还原稀疏矩阵 至少要知道原来的数值矩阵的行列数 } }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)