• 稀疏数组 php


    当一个数组在中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。

    稀疏数组的处理方法;

    1. 记录数组一共有几行几列,有多少个不同的值。
    2. 把具有不同值的元素的行列有值记录在一个小规模的数组中,从而缩小程序的规模。

    由7x6的数组转换成3x9的稀疏数组

    <?php
    
    // 稀疏数组
    $arr = array();
    $row = $col = 11;
    
    // 创建个二维数组 填充 0
    for ($i = 0; $i < 11; $i++) {
    	for ($j = 0; $j < 11; $j++) {
    		$arr[$i][$j] = 0;
    	}
    }
    
    $arr[0][4] = 1;
    $arr[2][3] = 1;
    $arr[3][2] = 1;
    
    echo "转换之前的数组
    ";
    printArray($arr);
    
    echo "转换后的数组
    ";
    $arr = arrayToSparse($arr);
    printArray($arr);
    
    echo "转换回来
    ";
    $arr = sparseToArray($arr);
    printArray($arr);
    
    // 转为稀疏数组 第一行分别是行数和列数 和有效非 0的总数
    function arrayToSparse($arr)
    {
    	// 获取非的总数
    	$sum = 0;
    	foreach ($arr as $item) {
    		foreach ($item as $v) {
    			if ($v != 0) {
    				$sum++;
    			}
    		}
    	}
    	$row = count($arr);
    	$col = count($arr[0]);
    
    	$sparseArray[0][0] = $row;
    	$sparseArray[0][1] = $col;
    	$sparseArray[0][2] = $sum;
    
    	$count = 1;
    	// 填充有效的 到稀疏数组中
    	for ($i = 0; $i < $row; $i++) {
    		for ($j = 0; $j < $col; $j++) {
    			if ($arr[$i][$j] != 0) {
    				$sparseArray[$count][0] = $i;
    				$sparseArray[$count][1] = $j;
    				$sparseArray[$count][2] = $arr[$i][$j];
    				$count++;
    			}
    		}
    	}
    
    	return $sparseArray;
    
    }
    
    // 稀疏数组还原
    function sparseToArray($arr)
    {
    	// 新建全 0 的数组
    	$row = $arr[0][0];
    	$col = $arr[0][1];
    	$sum = $arr[0][2];
    
    	$old = array();
    	for ($i = 0; $i < $row; $i++) {
    		for ($j = 0; $j < $col; $j++) {
    			$old[$i][$j] = 0;
    		}
    	}
    
    	// 填充有效的 1
    	for ($i = 1; $i <= $sum; $i++) {
    		$old[$arr[$i][0]][$arr[$i][1]] = $arr[$i][2];
    	}
    
    	return $old;
    
    }
    
    
    // 打印数组
    function printArray($arr)
    {
    	foreach ($arr as $item) {
    		foreach ($item as $v) {
    			echo $v . "	";
    		}
    		echo "
    ";
    	}
    }
    

    结果

    ╭─mac@macdeMacBook-Pro ~/www/未命名文件夹/test222 
    ╰─$ php index.php    
    转换之前的数组
    0	0	0	0	1	0	0	0	0	0	0
    0	0	0	0	0	0	0	0	0	0	0
    0	0	0	1	0	0	0	0	0	0	0
    0	0	1	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
    转换后的数组
    11	11	3	
    0	4	1	
    2	3	1	
    3	2	1	
    转换回来
    0	0	0	0	1	0	0	0	0	0	0
    0	0	0	0	0	0	0	0	0	0	0
    0	0	0	1	0	0	0	0	0	0	0
    0	0	1	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
    ╭─mac@macdeMacBook-Pro ~/www/未命名文件夹/test222 
    
  • 相关阅读:
    iphone 自学常用网址
    @ApiParam @RequestParam @PathVariable 用法
    @RestController 与 @Controller 注解区别
    Java:post请求
    Java:清空文件内容
    Java:追加文件内容
    Java:获取文件内容
    Java:Md5加密
    Java:获取IP地址
    docker:安装tomcat
  • 原文地址:https://www.cnblogs.com/brady-wang/p/15139855.html
Copyright © 2020-2023  润新知