php

位置:IT落伍者 >> php >> 浏览文章

php 常用算法和时间复杂度


发布日期:2019年11月19日
 
php 常用算法和时间复杂度
本篇文章是对php中的常用算法以及时间复杂度进行了详细的分析介绍需要的朋友参考下

按数量级递增排列常见的时间复杂度有常数阶O()对数阶O(logn)线性阶O(n)线性对数阶O(nlogn)平方阶O(n)立方阶O(n)

复制代码 代码如下:
//二分查找O(logn)
function erfen($a$l$h$f){
if($l >$h){ return false;}
$m = intval(($l+$h)/);
if ($a[$m] == $f){
return $m;
}elseif ($f < $a[$m]){
return erfen($a $l $m $f);
}else{
return erfen($a $m+ $h $f);
}

}
$a = array();
var_dump(erfen($a));
//遍历树O(logn)
function bianli($p){
$a = array();
foreach (glob($p/*) as $f){
if(is_dir($f)){
$a = array_merge($abianli($f));
}else{
$a[] = $f;
}
}
return $a;
}
//阶乘O(logn)
function jc($n){
if($n<=){
return ;
}else{
return $n*jc($n);
}   
}
//快速查找  O(n *log(n))
function kuaisu($a){
$c = count($a);
if($c <= ){return $a;}
$l = $r = array();   
for ($i=;$i<$c;$i++){
if($a[$i] < $a[]){
$l[] = $a[$i];
}else{
$r[] = $a[$i];
}
}
$l = kuaisu($l);
$r = kuaisu($r);
return array_merge($larray($a[])$r);
}
//插入排序  O(N*N)
function charu($a){
$c = count($a);
for($i=;$i<$c;$i++){
$t = $a[$i];
for($j=$i;$j> && $a[$j]>$t;$j){
$a[$j] = $a[$j];         
}
$a[$j] = $t;
}
return $a;
}
//选择排序O(N*N)
function xuanze($a){
$c = count($a);
for($i=;$i<$c;$i++){
for ($j=$i+;$j<$c;$j++){
if($a[$i]>$a[$j]){
$t = $a[$j];
$a[$j] = $a[$i];
$a[$i] = $t;
}
}
}
return $a;
}
//冒泡排序   O(N*N)
function maopao($a){
$c = count($a);
for($i=;$i<$c;$i++){
for ($j=$c;$j>$i;$j){
if($a[$j] < $a[$j]){
$t = $a[$j];
$a[$j] = $a[$j];
$a[$j] = $t;
}
}   
}
return $a;
}复制代码 代码如下:


/**
* 排列组合
* 采用二进制方法进行组合的选择如表示只需有位为就可以了所以可得到的组合是 种组合
*
* @param 需要排列的数组 $arr
* @param 最小个数 $min_size
* @return 满足条件的新数组组合
*/
function plzh($arr$size=) {
$len = count($arr);
$max = pow($len);
$min = pow($size);
$r_arr = array();
for ($i=$min; $i<$max; $i++){
$count = ;
$t_arr = array();
for ($j=; $j<$len; $j++){
$a = pow( $j);
$t = $i&$a;
if($t == $a){
$t_arr[] = $arr[$j];
$count++;
}
}   
if($count == $size){
$r_arr[] = $t_arr;   
}   
}
return $r_arr;
}

$pl = pl(array());
var_dump($pl);

               

上一篇:PHP性能优化

下一篇:浅析PHP绘图技术