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相关资料
Oct 09 PHP
杏林同学录(六)
Oct 09 PHP
php 读取文件乱码问题
Feb 20 PHP
php下清空字符串中的HTML标签的代码
Sep 06 PHP
PHP json_encode中文乱码问题的解决办法
Sep 09 PHP
PHP的Socket通信之UDP通信实例
Jul 02 PHP
解决yii2左侧菜单子级无法高亮问题的方法
May 08 PHP
PHP中读取文件的几个方法总结(推荐)
Jun 03 PHP
详解PHP原生DOM对象操作XML的方法
Oct 17 PHP
thinkPHP实现签到功能的方法
Mar 15 PHP
PHP 应用容器化以及部署方法
Feb 12 PHP
浅谈PHP5.6 与 PHP7.0 区别
Oct 09 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设计模式之装饰器(装饰者)模式(Decorator)入门与应用详解
2019/12/13 PHP
css把超出的部分显示为省略号的方法兼容火狐
2008/07/23 Javascript
Javascript学习笔记二 之 变量
2010/12/15 Javascript
jquery trim() 功能源代码
2011/02/14 Javascript
js将字符串转成正则表达式的实现方法
2013/11/13 Javascript
JS获取单击按钮单元格所在行的信息
2014/06/17 Javascript
浅谈js中变量初始化
2015/02/03 Javascript
javascript正则表达式之分组概念与用法实例
2016/06/16 Javascript
浅谈JS的基础类型与引用类型
2016/09/13 Javascript
javascript中获取元素标签中间的内容的实现方法
2016/10/08 Javascript
JavaScript事件处理程序详解
2017/09/19 Javascript
jQuery zTree 异步加载添加子节点重复问题
2017/11/29 jQuery
jQuery实现文件编码成base64并通过AJAX上传的方法
2018/04/12 jQuery
vue 基于element-ui 分页组件封装的实例代码
2018/12/10 Javascript
JS查找孩子节点简单示例
2019/07/25 Javascript
微信小程序引入VANT组件的方法步骤
2019/09/19 Javascript
JS数组方法reduce的用法实例分析
2020/03/03 Javascript
Vue toFixed保留两位小数的3种方式
2020/10/23 Javascript
node使用async_hooks模块进行请求追踪
2021/01/28 Javascript
[04:03]DOTA2英雄梦之声_第02期_风暴之灵
2014/06/30 DOTA
python处理图片之PIL模块简单使用方法
2015/05/11 Python
python+pyqt实现12306图片验证效果
2017/10/25 Python
python自动化测试三部曲之request+django实现接口测试
2020/10/07 Python
海蓝之谜(LA MER)澳大利亚官方商城:全球高端奢华护肤品牌
2017/10/27 全球购物
美国手工艺品市场的领导者:Annie’s
2019/04/04 全球购物
澳大利亚儿童鞋在线:The Trybe
2019/07/16 全球购物
俄罗斯花园种植材料批发和零售网上商店:Беккер
2019/07/22 全球购物
新闻专业应届生求职信
2013/10/31 职场文书
七一党建活动方案
2014/01/28 职场文书
服装创业计划书范文
2014/02/05 职场文书
记帐员岗位责任制
2014/02/08 职场文书
《日月潭》教学反思
2014/02/28 职场文书
卫生院健康教育实施方案
2014/06/07 职场文书
医德医风自我评价2015
2015/03/03 职场文书
教师自荐信范文
2015/03/06 职场文书
社区禁毒宣传活动总结
2015/05/07 职场文书