1. 程式人生 > 其它 >02 資料結構與演算法之稀疏陣列

02 資料結構與演算法之稀疏陣列

技術標籤:資料結構與演算法演算法資料結構java

介紹

當一個數組中大部分元素為0,或者為同一個值時,可以用稀疏陣列來儲存該陣列

稀疏陣列的處理方法

1. 記錄陣列中一共有幾行幾列,有多少個不同的值
2. 把具有不同值的元素的行、列及值記錄在一個小規模的陣列中,從而縮小程式的規模。

二維陣列:
二維陣列
轉換後的稀疏陣列:
稀疏陣列
說明:第一行儲存陣列有多少行,多少列,多少個有效值。後面的所有行分別記錄有效值的行號和列號。

程式碼實現

  • 二維陣列轉換為稀疏陣列
    1、遍歷原始的二維陣列,得到有效資料的個數sum
    2、根據sum,就可以建立稀疏陣列sparseArr int[sum + 1][3]
    3、將二維陣列的有效資料存入到稀疏陣列

    	//建立一個原始的二維陣列 11*11
        //0:沒有棋子  1:黑子  2:藍子
        int[][] chessArr1 = new int[11][11];
        for(int i = 0; i<chessArr1.length; i++){
            for(int j = 0; j<chessArr1[i].length; j++)
                chessArr1[i][j] = 0;
        }
        chessArr1[1][2] = 1;
        chessArr1[2][3] = 2;
        
    	//將二維陣列轉稀疏陣列
        //1、先遍歷二維陣列,得到非0資料的個數
    int sum = 0; for(int i = 0; i < chessArr1.length; i++){ for(int j = 0; j < chessArr1[i].length; j++){ if(chessArr1[i][j] != 0) sum++; } } //2、建立稀疏陣列 int sparseArr[][] = new int[sum + 1][3]; //給稀疏陣列賦值 sparseArr[0][0] = chessArr1.length;
    sparseArr[0][1] = chessArr1[0].length; sparseArr[0][2] = sum; //遍歷二維陣列,將非0值填入稀疏陣列 int rows = 1; //記錄往稀疏陣列的第幾行填值 for(int i = 0; i < chessArr1.length; i++){ for(int j = 0; j < chessArr1[i].length; j++){ if(chessArr1[i][j] != 0){ sparseArr[rows][0] = i; sparseArr[rows][1] = j; sparseArr[rows++][2] = chessArr1[i][j]; } } }
  • 稀疏陣列恢復成二維陣列

    
    //將稀疏陣列恢復成二維陣列
        int[][] chessArr2 = new int[sparseArr[0][0]][sparseArr[0][1]];
        for(int i = 0; i<sparseArr[0][2]; i++){
            chessArr2[sparseArr[i+1][0]][sparseArr[i+1][1]] = sparseArr[i+1][2];
        }