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和ACCESS写聊天室(七)
Oct 09 PHP
FleaPHP的安全设置方法
Sep 15 PHP
php中使用$_REQUEST需要注意的一个问题
May 02 PHP
php共享内存段示例分享
Jan 20 PHP
Discuz!X中SESSION机制实例详解
Sep 23 PHP
PHP使用MPDF类生成PDF的方法
Dec 08 PHP
AJAX PHP无刷新form表单提交的简单实现(推荐)
Sep 09 PHP
Yii框架扩展CGridView增加导出CSV功能的方法
May 24 PHP
PHP获取文件扩展名的常用方法小结【五种方式】
Apr 27 PHP
PHP+Ajax实现的检测用户名功能简单示例
Feb 12 PHP
PHP使用CURL实现下载文件功能示例
Jun 03 PHP
PHP+iframe模拟Ajax上传文件功能示例
Jul 02 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
多文件上载系统完整版
2006/10/09 PHP
PHP输出控制功能在简繁体转换中的应用
2006/10/09 PHP
input、button的不同type值在ajax提交表单时导致的陷阱
2009/02/24 Javascript
js DOM的学习笔记
2011/12/22 Javascript
JS中的构造函数详细解析
2014/03/10 Javascript
js动态删除div元素基本思路及实现代码
2014/05/08 Javascript
javascript实现博客园页面右下角返回顶部按钮
2015/02/22 Javascript
jQuery判断元素上是否绑定了指定事件的方法
2015/03/17 Javascript
完美实现仿QQ空间评论回复特效
2015/05/06 Javascript
javascript数组去重的六种方法汇总
2015/08/16 Javascript
js+css实现超简洁的二级下拉菜单效果代码
2015/09/07 Javascript
jQuery实现鼠标滑过链接控制图片的滑动展开与隐藏效果
2015/10/28 Javascript
详解Wondows下Node.js使用MongoDB的环境配置
2016/03/01 Javascript
浅析jQuery中使用$所引发的问题
2016/05/29 Javascript
jQuery实现ajax的叠加和停止(终止ajax请求)
2016/08/08 Javascript
JS中的作用域链
2017/03/01 Javascript
javaScript强制保留两位小数的输入数校验和小数保留问题
2018/05/09 Javascript
详解如何更好的使用module vuex
2019/03/27 Javascript
JavaScript遍历数组的方法代码实例
2020/01/14 Javascript
jQuery 隐藏/显示效果函数用法实例分析
2020/05/20 jQuery
[29:23]2014 DOTA2国际邀请赛中国区预选赛 LGD-GAMING VS CIS 第一场1
2014/05/23 DOTA
Django框架 querySet功能解析
2019/09/04 Python
基于Django统计博客文章阅读量
2019/10/29 Python
使用 Python ssh 远程登陆服务器的最佳方案
2020/03/06 Python
HTML5 Canvas锯齿图代码实例
2014/04/10 HTML / CSS
瑞士国际航空官网:SWISS
2016/07/21 全球购物
No7 Beauty美国官网:英国国民护肤品牌
2019/10/31 全球购物
Yahoo-PHP面试题2
2014/12/06 面试题
区三好学生主要事迹
2014/01/30 职场文书
承诺保证书格式
2015/02/28 职场文书
个人求职自荐信范文
2015/03/06 职场文书
Python OpenCV 彩色与灰度图像的转换实现
2021/06/05 Python
Python中seaborn库之countplot的数据可视化使用
2021/06/11 Python
Python requests用法和django后台处理详解
2022/03/19 Python
Python利用capstone实现反汇编
2022/04/06 Python
win10壁纸在哪个文件夹 win10桌面背景图片文件位置分享
2022/08/05 数码科技