php 常用算法和时间复杂度


Posted in PHP onJuly 01, 2013

按数量级递增排列,常见的时间复杂度有:常数阶O(1),对数阶O(log2n),线性阶O(n),线性对数阶O(nlog2n),平方阶O(n2),立方阶O(n3)

//二分查找O(log2n)
function erfen($a,$l,$h,$f){
    if($l >$h){ return false;}
    $m = intval(($l+$h)/2);
    if ($a[$m] == $f){
        return $m;
    }elseif ($f < $a[$m]){
        return erfen($a, $l, $m-1, $f);
    }else{
        return erfen($a, $m+1, $h, $f);
    }}
$a = array(1,12,23,67,88,100);
var_dump(erfen($a,0,5,1));
//遍历树O(log2n)
function bianli($p){
    $a = array();
    foreach (glob($p.'/*') as $f){
        if(is_dir($f)){
            $a = array_merge($a,bianli($f));
        }else{
            $a[] = $f;
        }
    }
    return $a;
}
//阶乘O(log2n)
function jc($n){
    if($n<=1){
        return 1;
    }else{
        return $n*jc($n-1);
    }    
}
//快速查找  O(n *log2(n))
function kuaisu($a){
    $c = count($a);
    if($c <= 1){return $a;}
    $l = $r = array();    
    for ($i=1;$i<$c;$i++){
        if($a[$i] < $a[0]){
            $l[] = $a[$i];
        }else{
            $r[] = $a[$i];
        }
    }
    $l = kuaisu($l);
    $r = kuaisu($r);
    return array_merge($l,array($a[0]),$r);
}
//插入排序  O(N*N)
function charu($a){
  $c = count($a);
  for($i=1;$i<$c;$i++){
      $t = $a[$i];
      for($j=$i;$j>0 && $a[$j-1]>$t;$j--){
          $a[$j] = $a[$j-1];          
      }
      $a[$j] = $t;
  }
  return $a;
}
//选择排序O(N*N)
function xuanze($a){
    $c = count($a);
    for($i=0;$i<$c;$i++){
        for ($j=$i+1;$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=0;$i<$c;$i++){
        for ($j=$c-1;$j>$i;$j--){
            if($a[$j] < $a[$j-1]){
               $t = $a[$j-1];
               $a[$j-1] = $a[$j];
               $a[$j] = $t;
            }
        }    
    }
    return $a;
}

/**
 * 排列组合
 * 采用二进制方法进行组合的选择,如表示5选3时,只需有3位为1就可以了,所以可得到的组合是 01101 11100 00111 10011 01110等10种组合
 *
 * @param 需要排列的数组 $arr
 * @param 最小个数 $min_size
 * @return 满足条件的新数组组合
 */
function plzh($arr,$size=5) {
  $len = count($arr);
  $max = pow(2,$len);
  $min = pow(2,$size)-1;
  $r_arr = array();
  for ($i=$min; $i<$max; $i++){
   $count = 0;
   $t_arr = array();
   for ($j=0; $j<$len; $j++){
    $a = pow(2, $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(1,2,3,4,5,6,7),5);
var_dump($pl);

PHP 相关文章推荐
一步一步学习PHP(4) php 函数 补充2
Feb 15 PHP
使用php判断浏览器的类型和语言的函数代码
Feb 28 PHP
php文本转图片自动换行的方法
Mar 13 PHP
PHP使用Face++接口开发微信公众平台人脸识别系统的方法
Apr 17 PHP
CI框架数据库查询之join用法分析
May 18 PHP
php求数组全排列,元素所有组合的方法总结
Mar 14 PHP
PHP正则删除HTML代码中宽高样式的方法
Jun 12 PHP
thinkPHP框架实现多表查询的方法
Jun 14 PHP
PHP children()函数讲解
Feb 03 PHP
PHP实现微信公众号验证Token的示例代码
Dec 16 PHP
CentOS7系统搭建LAMP及更新PHP版本操作详解
Mar 26 PHP
Yii框架小部件(Widgets)用法实例详解
May 15 PHP
关于php循环跳出的问题
Jul 01 #PHP
深入解析PHP中的(伪)多线程与多进程
Jul 01 #PHP
IIS安装Apache伪静态插件的具体操作图文
Jul 01 #PHP
解析csv数据导入mysql的方法
Jul 01 #PHP
解析php根据ip查询所在地区(非常有用,赶集网就用到)
Jul 01 #PHP
浅析php插件 HTMLPurifier HTML解析器
Jul 01 #PHP
浅析php插件 Simple HTML DOM 用DOM方式处理HTML
Jul 01 #PHP
You might like
php中数字0和空值的区别分析
2014/06/05 PHP
PHP curl伪造IP地址和header信息代码实例
2015/04/27 PHP
浅析PHP中Session可能会引起并发问题
2015/07/23 PHP
Thinkphp连表查询及数据导出方法示例
2016/10/15 PHP
js实现的网页颜色代码表全集
2007/07/17 Javascript
js DOM模型操作
2009/12/28 Javascript
详解JavaScript中的forEach()方法的使用
2015/06/08 Javascript
AngularJS 实现按需异步加载实例代码
2015/10/18 Javascript
理解JavaScript中worker事件api
2015/12/25 Javascript
利用fecha进行JS日期处理
2016/11/21 Javascript
js实现彩色条纹滚动条效果
2017/03/15 Javascript
小程序分享链接onShareAppMessage的具体用法
2020/05/22 Javascript
[01:38]【DOTA2亚洲邀请赛】Sumail——梦开始的地方
2017/03/03 DOTA
Python中的特殊语法:filter、map、reduce、lambda介绍
2015/04/14 Python
Python程序中的观察者模式结构编写示例
2016/05/27 Python
Django自定义认证方式用法示例
2017/06/23 Python
django定期执行任务(实例讲解)
2017/11/03 Python
浅析Python3爬虫登录模拟
2018/02/07 Python
Django Admin实现三级联动的示例代码(省市区)
2018/06/22 Python
浅谈Django的缓存机制
2018/08/23 Python
Python3爬楼梯算法示例
2019/03/04 Python
Python列表list常用内建函数实例小结
2019/10/22 Python
基于python计算滚动方差(标准差)talib和pd.rolling函数差异详解
2020/06/08 Python
python中def是做什么的
2020/06/10 Python
详解HTML5中的标签
2015/06/19 HTML / CSS
整理的15个非常有用的 HTML5 开发教程和速查手册
2011/10/18 HTML / CSS
Html5 FileReader实现即时上传图片功能实例代码
2014/09/01 HTML / CSS
澳大利亚首屈一指的鞋类品牌:Tony Bianco
2018/03/13 全球购物
如何写出好的Java代码
2014/04/25 面试题
结构工程研究生求职信
2013/10/13 职场文书
致长跑运动员广播稿
2014/01/31 职场文书
项目委托协议书(最新)
2014/09/13 职场文书
毕业证代领委托书
2014/09/26 职场文书
2014年办公室个人工作总结
2014/11/12 职场文书
实用干货:敬酒词大全,帮你应付各种场合
2019/11/21 职场文书
TensorFlow的自动求导原理分析
2021/05/26 Python