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();
		}
	}
}

發佈了18 篇原創文章 · 獲贊 1 · 訪問量 566
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章