程序举例:不同的方法,处理相同的程序,执行效率上会有什么差别?
/* 问题目标:从包含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倍。
假如 程序一要执行一年半,同样的处理结果,程序二只需要执行一天。
原文:http://www.cnblogs.com/ahguSH/p/5797059.html