JAVA数据结构学习1.1稀疏矩阵

稀疏矩阵:

将一个庞大的、具有大量重复值的矩阵简化为不含重复值的稀疏矩阵
目的:减少存储空间的占用,简化矩阵形式
方法:稀疏矩阵的大概模式:
每一行的参数意义:row(行) | col(列) | count
稀疏矩阵只有三列,分别代表行数,列数,值;
共有n+1行,对应原数组有效值的个数+1;
除第一行外,每一行对应一个有效值的行、列、值的信息,
稀疏矩阵的第一行对应原矩阵的行数,列数,有效值个数

稀疏矩阵的实现代码:

package primDataStructure;

public class sparseMatrix {
	public static void main(String args[]) {
		int [][]preMatrix=new int[10][8];
		preMatrix[3][4]=1;
		preMatrix[7][2]=6;
		preMatrix[3][5]=9;
		int cacu=0;
		//计算矩阵的有效值
		for(int k[]:preMatrix) {
			for(int m:k) {
				if(m!=0) {
					cacu++;
				}
			}
		}
		//建立稀疏矩阵,行为有效值+1,列为3
		int[][]sparseM=new int[cacu+1][3];
		//为稀疏矩阵插入有效值的行列信息和值
		int i=0,j=0,count=0;
		for(int []k:preMatrix) {
			j=0;
			for(int m:k) {
				if(m!=0) {
					sparseM[count+1][0]=i;
					sparseM[count+1][1]=j;
					sparseM[count+1][2]=m;
					count++;
				}
				j++;
			}
			i++;
		}
		//为稀疏矩阵的头部赋值(原矩阵的行列信息和有效值个数)
		sparseM[0][0]=i;
		sparseM[0][1]=j;
		sparseM[0][2]=cacu;
		//遍历原矩阵
		for(int x=0;x<10;x++) {
			for(int y=0;y<8;y++) {
				System.out.print(preMatrix[x][y]+" ");
			}
			System.out.println();
		}
		//遍历稀疏矩阵
		for(int x=0;x<cacu+1;x++) {
			for(int y=0;y<3;y++) {
				System.out.print(sparseM[x][y]+" ");
			}
			System.out.println();
		}
		//还原矩阵
		int reMatrix[][]=new int[sparseM[0][0]][sparseM[0][1]];
		for(int x=0;x<sparseM[0][2];x++) {
			reMatrix[sparseM[x+1][0]][sparseM[x+1][1]]=sparseM[x+1][2];
		}
		for(int x=0;x<sparseM[0][0];x++) {
			for(int y=0;y<sparseM[0][1];y++) {
				System.out.print(reMatrix[x][y]+" ");
			}
			System.out.println();
		}
	}
}

发布了13 篇原创文章 · 获赞 1 · 访问量 456

猜你喜欢

转载自blog.csdn.net/weixin_43458072/article/details/104331402
今日推荐