初识算法-算法思想的重要性

程序举例:不同的方法,处理相同的程序,执行效率上会有什么差别?

/* 问题目标:从包含1000个值的数组(值为1-100的随机数)中得到不重复的值。*/

方法一:

/* 进行循环比较,
 *    $myda中第一个值 和 后面999个值进行比较,如果找不到与之相等的值,则将第一个值放进结果数组($goal)中,否则继续进行比较
 * 然后 $myda中第2个值 和 后面998个值进行比较,如果找不到与之相等的值,则将第一个值放进结果数组($goal)中
 * 一次类推,知道数组循环完毕*/


/* 第一步:构造一个$myda数组。其中数组长度为1000,值为1-100的随机数 */
$i=0;
$myda=array();
while($i<1000){
    $i++;
    array_push($myda, mt_rand(1, 100));
}
echo '待处理的数组长度:'.count($myda); //打印数组长度
echo "</br>";
echo "</br>";

/* 第二步 : 通过两层循环,得到目标数组*/
$start=microtime(true);//返回当前的时间戳 (Return current Unix timestamp with microseconds)
$goal=array(); //定义目标数组,用来存放目标结果。

$j=0;

第一层循环
 while($j<count($myda)-1){
     $s=$j+1;
     $falg=true;

     第二层循环
     while($s<count($myda)){
         if($myda[$j]==$myda[$s]){    //将$myda[$j]与$myda中出本身外的其他所有值进行比较
            $falg=false;
         }
         $s++;
     }
     if($falg==true){      //成立则代表:$myda[$j]在 $myda中是独一无二的。即可将$myda[$j] 放入目标数组 $goal中。
        array_push($goal, $myda[$j]);
     }
     $j++;
 }
 array_push($goal, $myda[999]);

 echo '目标数组长度:'.count($goal);
 echo "</br>";
 $end=microtime(true);
 echo "程序运行时间:";echo $end-$start."秒";//打印出程序运行所花费的时间
 
 /* 将结果 按值升序排列,此时得到的目标数据存放在 $goal的值中。*/
 sort($goal);
 
 var_dump($goal);

运行结果如下:

结果:成功得到1-100的所有不重复的数据。程序运行时间为:5.4秒

方法二:

/* 循环遍历$myda 数组中的值一次,
 * 如果在将任意$myda的值$myda[$j],作为$goal的键时,$goal[$myda[$j]]未定义,则定义$goal[$myda[$j]],此时$myda[$j]是$goal的一个键
 * 因此循环遍历结束后,$goal中的键会存放所有,$myda中不相等的值。*/

/*同上 第一步:构造一个$myda数组。其中数组长度为1000,值为1-100的随机数 */


$i=0;
$myda=array();
while($i<1000){
    $i++;
    array_push($myda, mt_rand(1, 100));
}
echo '待处理的数组长度:'.count($myda); //打印数组长度
echo "</br>";
echo "</br>";


 $j=0;
  while($j<count($myda)){
      if(empty($goal[$myda[$j]])==1){
        $goal[$myda[$j]]=1;    //将$myda中不相等的值,定义为$goal数组的一个键
      }
      $j++;
  }
 
 echo '目标数组长度:'.count($goal);
 echo "</br>";
 $end=microtime(true);
 echo "程序运行时间:";echo $end-$start."秒";     //打印出程序运行所花费的时间
 
 /* 将结果 按键升序排列,因为此时得到的目标数据存放在 $goal的键中。*/
 ksort($goal);
 var_dump($goal);

运行结果如下:

结果:同样,成功得到1-100的所有不重复的数据。程序运行时间为:0.0099秒

综合以上两种方法:

同样都可以得到想要的结果。但是在运行时间上:

程序一:5.4秒

关键代码执行次数:(999+0)*1000/2 ,大于为50,0000次

程序二:0.0099秒

关键代码执行次数:1000次

5.4 (秒)/ 0.0099(秒)=545.4545。

程序一的执行时间是程序二执行时间的545倍。

假如 程序一要执行一年半,同样的处理结果,程序二只需要执行一天。

原文地址:https://www.cnblogs.com/ahguSH/p/5797059.html