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 相关文章推荐
优化NFR之一 --MSSQL Hello Buffer Overflow
Oct 09 PHP
php面向对象全攻略 (五) 封装性
Sep 30 PHP
PHP URL地址获取函数代码(端口等) 推荐
May 15 PHP
php中Smarty模板初体验
Aug 08 PHP
第四章 php数学运算
Dec 30 PHP
基于MySQL体系结构的分析
May 02 PHP
PHP中__get()和__set()的用法实例详解
Jun 04 PHP
在Yii框架中使用PHP模板引擎Twig的例子
Jun 13 PHP
PHP采用XML-RPC构造Web Service实例教程
Jul 16 PHP
php编写的抽奖程序中奖概率算法
May 14 PHP
PHP异步进程助手async-helper
Feb 05 PHP
解决PHP Opcache 缓存刷新、代码重载出现无法更新代码的问题
Aug 24 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中使用Oracle数据库(4)
2006/10/09 PHP
PHP脚本数据库功能详解(上)
2006/10/09 PHP
php mssql 时间格式问题
2009/01/13 PHP
php使用curl并发减少后端访问时间的方法分析
2016/05/12 PHP
php封装的mysqli类完整实例
2016/10/18 PHP
laravel通过a标签从视图向控制器实现传值
2019/10/15 PHP
JavaScript的Function详细
2006/11/14 Javascript
js实现iframe动态调整高度的代码
2008/01/06 Javascript
jquery实现点击文字可编辑并修改保存至数据库
2014/04/15 Javascript
深入理解JavaScript系列(37):设计模式之享元模式详解
2015/03/04 Javascript
js实现的后台左侧管理菜单代码
2015/09/11 Javascript
jquery实现的伪分页效果代码
2015/10/29 Javascript
跟我学习javascript的prototype使用注意事项
2015/11/17 Javascript
利用BootStrap弹出二级对话框的简单实现方法
2016/09/21 Javascript
react+ant design实现Table的增、删、改的示例代码
2018/12/27 Javascript
Vue项目实现简单的权限控制管理功能
2019/07/17 Javascript
Vue请求java服务端并返回数据代码实例
2019/11/28 Javascript
layui使用及简单的三级联动实现教程
2020/12/01 Javascript
[00:11]战神迅矛
2019/03/06 DOTA
Python完全新手教程
2007/02/08 Python
Python3中详解fabfile的编写
2018/06/24 Python
Python变量类型知识点总结
2019/02/18 Python
python跳出双层for循环的解决方法
2019/06/24 Python
python梯度下降算法的实现
2020/02/24 Python
python使用paramiko实现ssh的功能详解
2020/03/06 Python
Python内存映射文件读写方式
2020/04/24 Python
基于Python的接口自动化读写excel文件的方法
2021/01/15 Python
css3 边框、背景、文本效果的实现代码
2018/03/21 HTML / CSS
自我评价怎么写好呢?
2013/12/05 职场文书
远程教育心得体会
2014/01/03 职场文书
《春到梅花山》教学反思
2014/04/16 职场文书
学校募捐倡议书
2014/05/14 职场文书
建筑工程技术专业求职信
2014/07/16 职场文书
领导走群众路线整改措施思想汇报
2014/10/12 职场文书
指导老师鉴定意见
2015/06/05 职场文书
mysql字符串截取函数小结
2021/04/05 MySQL