1. 程式人生 > 實用技巧 >dwm.exe_什麼是桌面視窗管理器(dwm.exe),為什麼執行?

dwm.exe_什麼是桌面視窗管理器(dwm.exe),為什麼執行?

稀疏陣列

什麼是稀疏陣列

​ 如果在一個數組中,大部分元素的值均為0(或同一值)時,傳統的二維陣列儲存方式,會利用大量的儲存空間來存放0值,從而浪費大量記憶體。比如說醫學影象中的背景,或者一些資料轉化後的特徵等都會出現這種問題。

​ 為了解決這個問題引入了稀疏陣列的概念,它是通過一個三元組的方式將非0資料儲存到一個數組中,該陣列即是稀疏陣列。

程式碼實現

package Scanner;

public class Demo4 {
    public static void main(String[] args) {
        //生成原始陣列
        int[][] array = new int[11][11];
        array[1][2] = 1;
        array[2][3] = 2;
        System.out.println("輸出原始陣列");

        for(int[] arr : array){
            for(int val : arr){
                System.out.print(val + "\t");
            }
            System.out.println();
        }


        //統計原始陣列中非0值的個數
        int sum = 0;
        for(int i = 0; i < array.length; i++){
            for(int j = 0; j < array[0].length; j++){
                if(array[i][j] != 0)
                    sum++;
            }
        }
        System.out.println("非零值的個數:" + sum);


        //建立一個稀疏陣列的陣列, 稀疏陣列的第一行為原始陣列的行數,列數,非零值個數
        int [][] SparseArray = new int[sum+1][3];
        SparseArray[0][0] = array.length;
        SparseArray[0][1] = array[0].length;
        SparseArray[0][2] = sum;


        //將非零值的資訊放到稀疏陣列中
        //每一行存放非零值的行數,列數,值
        int cnt = 0;
        for(int i = 0; i < array.length; i++){
            for(int j = 0; j < array[i].length; j++){
                if(array[i][j] != 0){
                    cnt++;
                    SparseArray[cnt][0] = i;
                    SparseArray[cnt][1] = j;
                    SparseArray[cnt][2] = array[i][j];
                }
            }
        }

        System.out.println("輸出稀疏陣列");
        for(int i = 0; i < SparseArray.length; i++){
            for(int j = 0; j < SparseArray[i].length; j++){
                System.out.print(SparseArray[i][j] + "\t");
            }
            System.out.println();
        }

        //還原陣列
        int[][] RestoreArray = new int[SparseArray[0][0]][SparseArray[0][1]];
        for(int i = 1; i < SparseArray.length; i++){
            RestoreArray[SparseArray[i][0]][SparseArray[i][1]] = SparseArray[i][2];
        }

        System.out.println("輸出還原後的陣列");
        for(int[] arr : RestoreArray){
            for(int val : arr){
                System.out.print(val + "\t");
            }
            System.out.println();
        }
    }
}

結果

輸出原始陣列
0	0	0	0	0	0	0	0	0	0	0	
0	0	1	0	0	0	0	0	0	0	0	
0	0	0	2	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
非零值的個數:2
輸出稀疏陣列
11	11	2	
1	2	1	
2	3	2	
輸出還原後的陣列
0	0	0	0	0	0	0	0	0	0	0	
0	0	1	0	0	0	0	0	0	0	0	
0	0	0	2	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	

Process finished with exit code 0