稀疏數組
當一個數組中大部分元素爲0,或者爲同一個值的數組時,可使用稀疏數組來保存該數組.
處理方法:
- 記錄數組一共有幾行幾列;
- 把具備不一樣值的元素的行列及值記錄在一個小規模的數組中,從而縮小程序的規模.
案列:五子棋盤存檔與恢復
二維數組轉稀疏數組思路:
- 遍歷原始的二維數組,獲得有效數據的個數sum;
- 根據sum就能夠建立稀疏數組sparseArraysum+1;
稀疏數組轉恢復二維數組:
- 先讀取稀疏數組的第一行,根據第一行初始化二維數組;
- 在讀取稀疏數組後幾行的數據,並賦給原始二維數組便可.
<?php
$arr = [];
//先初始化一個6行7列的二維數組,每一個元素的初始值爲0
for ($i = 0; $i < 11; $i++) {
for ($j = 0; $j < 11; $j++) {
$arr[$i][$j] = 0;
}
}
//分別在第二行第三列,第三行第四列設置一個黑子和藍子
//1表示黑子,2表示藍子
$arr[1][2] = 1;
$arr[2][3] = 2;
//將二維數組轉化爲稀疏數組
//1.獲取二維數組幾行幾列,有多少個非0元素
$sparseArr = [];
$sum = 0;
for ($i = 0; $i < 11; $i++) {
for ($j = 0; $j < 11; $j++) {
if ($arr[$i][$j] != 0) {
$sum++;
$sparseArr[$sum][0] = $i;
$sparseArr[$sum][1] = $j;
$sparseArr[$sum][2] = $arr[$i][$j];
}
}
}
$sparseArr[0][0] = 11;
$sparseArr[0][1] = 11;
$sparseArr[0][2] = $sum;
//將稀疏數組恢復爲二維數組
//1.將第一行第一列和第二列取出,初始化二維數組
//2.遍歷後面的數據,賦值給二維數組
$rearr = [];
$row = $sparseArr[0][0];
$col = $sparseArr[0][1];
for($i = 0;$i<$row;$i++){
for($j = 0;$j<$col;$j++){
$rearr[$i][$j] = 0;
}
}
for($i = 1;$i<$sparseArr[0][2] + 1;$i++){
$rearr[$sparseArr[$i][0]][$sparseArr[$i][1]] = $sparseArr[$i][2];
}
//打印恢復後的二維數組
for($i = 0 ; $i<11;$i++){
for($j=0;$j<11;$j++){
echo $rearr[$i][$j].' ';
}
echo "\n";
}