首页 后端开发 php教程 php 常用算法和时间复杂度_php技巧

php 常用算法和时间复杂度_php技巧

May 17, 2016 am 08:57 AM
常用算法 时间复杂度

按数量级递增排列,常见的时间复杂度有:常数阶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   $count = 0;
   $t_arr = array();
   for ($j=0; $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);

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

仓库:如何复兴队友
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

C++ 递归函数的时间复杂度如何分析? C++ 递归函数的时间复杂度如何分析? Apr 17, 2024 pm 03:09 PM

递归函数的时间复杂度分析涉及:识别基本情况和递归调用。计算基本情况和每次递归调用的时间复杂度。求和所有递归调用的时间复杂度。考虑函数调用次数与问题大小之间的关系。例如,阶乘函数的时间复杂度为O(n),因为每次递归调用将递归深度增加1,总深度为O(n)。

PHP 函数中如何处理时间复杂度问题? PHP 函数中如何处理时间复杂度问题? Apr 26, 2024 pm 02:12 PM

时间复杂度是衡量函数执行时间的指标。常见的PHP函数时间复杂度问题包括循环嵌套、大量数组遍历和递归调用。优化时间复杂度的技术包括:使用缓存减少循环次数简化算法使用并行处理

分析 Go 语言中的时间复杂度和空间复杂度 分析 Go 语言中的时间复杂度和空间复杂度 Mar 27, 2024 am 09:24 AM

Go语言是一种越来越流行的编程语言,它被设计成易于编写、易于阅读和易于维护的语言,同时也支持高级编程概念。时间复杂度和空间复杂度是算法和数据结构分析中重要的概念,它们衡量着一个程序的执行效率和占用内存大小。在本文中,我们将重点分析Go语言中的时间复杂度和空间复杂度。时间复杂度时间复杂度是指算法执行时间与问题规模之间的关系。通常用大O表示法来表示时间

如何使用C++中的时间复杂度和空间复杂度分析算法 如何使用C++中的时间复杂度和空间复杂度分析算法 Sep 21, 2023 am 11:34 AM

如何使用C++中的时间复杂度和空间复杂度分析算法时间复杂度和空间复杂度是对算法运行时间和所需空间的度量。在软件开发中,我们常常需要评估算法的效率,以选择最优的解决方案。C++作为一种高性能编程语言,提供了丰富的数据结构和算法库,同时也具备强大的计算能力和内存管理机制。本文将介绍如何使用C++中的时间复杂度和空间复杂度分析算法,并通过具体的代码示例解释如何进行

PHP数组打乱排序后的时间复杂度是多少? PHP数组打乱排序后的时间复杂度是多少? May 01, 2024 am 10:00 AM

PHP数组打乱排序时间复杂度为O(n),执行时间与数组大小成正比。实战案例:创建数组使用shuffle函数打乱排序打印打乱排序后的数组

C++ 时间复杂度的常见陷阱和优化策略 C++ 时间复杂度的常见陷阱和优化策略 Jun 01, 2024 pm 10:09 PM

理解时间复杂度陷阱至关重要,优化策略包括:1.使用正确算法;2.减少不必要的拷贝;3.优化遍历。实战案例探讨了计算数组平方和、将字符串转换为大写以及在无序数组中查找元素的优化方法。

学习PHP中计数排序算法的原理及时间复杂度分析。 学习PHP中计数排序算法的原理及时间复杂度分析。 Sep 21, 2023 pm 02:12 PM

学习PHP中计数排序算法的原理及时间复杂度分析计数排序是一种非比较排序算法,适用于数据范围较小且已知的情况下。它的基本思想是统计每个元素出现的次数,然后依次填充到输出数组中,从而实现排序。本文将介绍计数排序的原理、步骤以及时间复杂度的分析,并提供具体的PHP代码示例。原理:计数排序的原理相对简单。假设待排序的数组为array,其中的元素范围为[0,k],我

在C程序中以O(n)时间复杂度和O(1)空间复杂度打印数组的左旋转 在C程序中以O(n)时间复杂度和O(1)空间复杂度打印数组的左旋转 Sep 10, 2023 pm 03:45 PM

给定一个大小为n的数组和多个整数值,我们需要从给定索引k开始旋转数组。我们希望从索引k开始旋转数组,如下所示-示例Input:arr[]={1,2,3,4,5}  K1=1  K2=3  K3=6Output:  23451  45123  23451算法STARTStep1-&gt

See all articles