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 相关文章推荐
详解:――如何将图片储存在数据库里
Dec 05 PHP
深入php self与$this的详解
Jun 08 PHP
PHP添加Xdebug扩展的方法
Feb 12 PHP
php读取大文件示例分享(文件操作类)
Apr 13 PHP
CI(CodeIgniter)框架中的增删改查操作
Jun 10 PHP
php中fgetcsv()函数用法实例
Nov 28 PHP
php生成静态html页面的方法(2种方法)
Sep 14 PHP
Yii1.1中通过Sql查询进行的分页操作方法
Mar 16 PHP
thinkphp3.2嵌入百度编辑器ueditor的实例代码
Jul 13 PHP
ThinkPHP框架实现的微信支付接口开发完整示例
Apr 10 PHP
php pdo连接数据库操作示例
Nov 18 PHP
如何利用PHP实现上传图片功能详解
Sep 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 或网站服务器日志,并正确配置 PHP 安装(win+linux)
2012/05/05 PHP
详解PHP编码转换函数应用技巧
2016/10/22 PHP
Yii框架表单提交验证功能分析
2017/01/07 PHP
PHP更安全的密码加密机制Bcrypt详解
2017/06/18 PHP
PHP读取CSV大文件导入数据库的实例
2017/07/24 PHP
laravel-admin的多级联动方法
2019/09/30 PHP
基于JQuery的动态删除Table表格的行和列的代码
2011/05/12 Javascript
Jquery:ajax实现翻页无刷新功能代码
2013/08/05 Javascript
jQuery 获取和设置select下拉框的值实现代码
2013/11/08 Javascript
利用jQuary实现文字浮动提示效果示例代码
2013/12/26 Javascript
使用FlexiGrid实现Extjs表格效果方法分享
2014/12/16 Javascript
快速解决jquery.touchSwipe左右滑动和垂直滚动条冲突
2016/04/15 Javascript
页面get请求 中文参数方法乱码问题的快速解决方法
2016/05/31 Javascript
使用vue.js2.0 + ElementUI开发后台管理系统详细教程(一)
2017/01/21 Javascript
BootStrap Datetimepicker 汉化的实现代码
2017/02/10 Javascript
JavaScript使用链式方法封装jQuery中CSS()方法示例
2017/04/07 jQuery
使用JS实现导航切换时高亮显示的示例讲解
2018/08/22 Javascript
vue进入页面时滚动条始终在底部代码实例
2019/03/26 Javascript
Vue组件模板的几种书写形式(3种)
2020/02/19 Javascript
python 分离文件名和路径以及分离文件名和后缀的方法
2018/10/21 Python
python 文件查找及内容匹配方法
2018/10/25 Python
使用Python 统计高频字数的方法
2019/01/31 Python
Python 实现取多维数组第n维的前几位
2019/11/26 Python
MNIST数据集转化为二维图片的实现示例
2020/01/10 Python
PyTorch的torch.cat用法
2020/06/28 Python
增大python字体的方法步骤
2020/07/05 Python
Python常用外部指令执行代码实例
2020/11/05 Python
西班牙在线宠物食品和配件商店:bitiba
2019/10/11 全球购物
中学教师实习自我鉴定
2013/09/28 职场文书
活动策划邀请函
2014/02/06 职场文书
社保委托书怎么写
2014/08/02 职场文书
高三复习计划
2015/01/19 职场文书
学校教学工作总结2015
2015/05/19 职场文书
2016年五一劳动节专题校园广播稿
2015/12/17 职场文书
2016形势与政策学习心得体会
2016/01/12 职场文书
公开致歉信
2019/06/24 职场文书