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
PHP如何编写易读的代码
Jul 10 PHP
php adodb连接不同数据库
Mar 19 PHP
PHP STRING 陷阱原理说明
Jul 24 PHP
PHP安全性漫谈
Jun 28 PHP
PHP无限分类(树形类)的深入分析
Jun 02 PHP
phpmailer绑定邮箱的实现方法
Dec 01 PHP
基于swoole实现多人聊天室
Jun 14 PHP
Thinkphp5框架使用validate实现验证功能的方法
Aug 27 PHP
laravel 模型查询按照whereIn排序的示例
Oct 16 PHP
ThinkPHP5框架中使用JWT的方法示例
Jun 03 PHP
php实现简单四则运算器
Nov 29 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
追忆往昔!浅谈收音机的百年发展历史
2021/03/01 无线电
php中XMLHttpRequest(Ajax)不能设置自定义的Referer的解决方法
2011/11/26 PHP
hadoop常见错误以及处理方法详解
2013/06/19 PHP
php上传功能集后缀名判断和随机命名(强力推荐)
2015/09/10 PHP
php实现的网页版剪刀石头布游戏示例
2016/11/25 PHP
PHP实现百度人脸识别
2019/05/06 PHP
Extjs学习笔记之九 数据模型(上)
2010/01/11 Javascript
javascript replace()正则替换实现代码
2010/02/26 Javascript
基于jQuery的仿flash的广告轮播代码
2010/11/04 Javascript
jQuery EasyUI API 中文文档 - ProgressBar 进度条
2011/09/29 Javascript
JS中setTimeout()的用法详解
2013/04/14 Javascript
页面右下角弹出提示框示例代码js版
2013/08/02 Javascript
IE中图片的onload事件无效问题和解决方法
2014/06/06 Javascript
jQuery模拟黑客帝国矩阵效果实例
2015/06/28 Javascript
jQuery grep()方法详解及实例代码
2016/10/30 Javascript
vuejs如何配置less
2017/04/25 Javascript
bootstrap table表格使用方法详解
2017/04/26 Javascript
十个免费的web前端开发工具详细整理
2017/09/18 Javascript
浅析Node.js非对称加密方法
2018/01/29 Javascript
vue2.0.js的多级联动选择器实现方法
2018/02/09 Javascript
webpack源码之loader机制详解
2018/04/06 Javascript
JavaScript函数定义方法实例详解
2019/03/05 Javascript
Async/Await替代Promise的6个理由
2019/06/15 Javascript
vue解决跨域问题(推荐)
2020/11/10 Javascript
[00:37]食人魔魔法师轮盘吉兆顺应全新至宝将拥有额外款式
2019/12/19 DOTA
Python-Seaborn热图绘制的实现方法
2019/07/15 Python
python [:3] 实现提取数组中的数
2019/11/27 Python
CSS3 实现倒计时效果
2020/11/25 HTML / CSS
校园报刊亭创业计划书
2014/01/02 职场文书
《影子》教学反思
2014/02/21 职场文书
公司搬迁通知
2015/04/20 职场文书
党员发展大会主持词
2015/07/03 职场文书
三十年同学聚会致辞
2015/07/28 职场文书
共青团优秀团员申请书(范文)
2019/08/15 职场文书
深度好文:50条没人告诉你的人生经验,句句精辟
2019/08/22 职场文书
总结几个非常实用的Python库
2021/06/26 Python