中压缩数组_Java稀梳数组,什么是稀梳数组?为什么使用稀梳数组?
生活随笔
收集整理的這篇文章主要介紹了
中压缩数组_Java稀梳数组,什么是稀梳数组?为什么使用稀梳数组?
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
別讓怯弱否定自己,別讓憊懶誤了青春。
簡介
- 有些時候,一個二維數組中很多值默認為0,因此很多無意義數據,這個時候就可以使用稀梳數組,例如:一個棋盤 10*10,但是只落下了兩顆子,需要你保存整個棋盤的布局
原理
- 記錄數組一共有幾行幾列,有多少個地方存在不同的值
- 把不同值得元素及值記錄在一個全新創建的小規模的數組中,從而壓縮數據大小
示例
// 以上面5*5棋盤為例:// 2排第二個不同// 3排第3個不同int[] ints = {{5,5,2},{1,1,1},{2,2,2}} // 5行5列2個不同值相互轉化
// 原始數組int[][] ints = new int[5][5];ints[1][1] = 1;ints[2][2] = 2;for (int[] intArray : ints) {for(int intValue : intArray) {System.out.print(intValue+"t");}System.out.println();}// 輸出---------------0 0 0 0 0 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 // 轉化為稀疏數組--------------// 1.獲取有效值數量,遍歷二維數組得到有效的個數int sum = 0;for (int i = 0; i < ints.length; i++) {for (int j = 0; j < ints[i].length; j++) {if(ints[i][j] != 0){sum ++;}}}System.out.println(sum);// 轉化為稀疏數組-------------int[][] sparseArray = new int[sum+1][3];sparseArray[0][0] = 5;sparseArray[0][1] = 5;sparseArray[0][2] = sum;int sumSparse = 0;for (int i = 0; i < ints.length; i++) {for (int j = 0; j < ints.length; j++) {if(ints[i][j] != 0){sumSparse++;sparseArray[sumSparse][0] = i;sparseArray[sumSparse][1] = j;sparseArray[sumSparse][2] = ints[i][j];}}}for (int i = 0; i < sparseArray.length; i++) {System.out.printf("%dt%dt%dtn",sparseArray[i][0],sparseArray[i][1],sparseArray[i][2]);}// 輸出稀疏數組-------------5 5 2 1 1 1 2 2 2 // 還原稀疏數組-----------// 根據稀疏數組第一行生成數組長度int renewArray[][] = new int [sparseArray[0][0]][sparseArray[0][1]];// 根據稀疏數組的值還原數組for (int i = 1; i < sparseArray.length; i++) {renewArray[sparseArray[i][0]][sparseArray[i][1]] = sparseArray[i][2];}for (int[] row : renewArray) {for(int data : row) {System.out.printf("%dt",data);}System.out.println();}應用場景
- 用于壓縮數據
- 使用稀疏數組,保存棋盤、地圖之類的二維數組
- 把稀疏數組還原成原來的二維數組
本文作者《猿氏·凱》,如果雷同,純屬抄襲····
總結
以上是生活随笔為你收集整理的中压缩数组_Java稀梳数组,什么是稀梳数组?为什么使用稀梳数组?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 发布地图服务属性表_Web3D地图来了!
- 下一篇: 特征图大小_新手向快速了解图神经网络