php 常用算法和时间复杂度_php技巧
按数量级递增排列,常见的时间复杂度有:常数阶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);

热AI工具

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

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

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

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

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

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

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

Java冒泡排序的时间复杂度分析及应用场景【导言】冒泡排序(BubbleSort)是一种基本的排序算法。它通过重复交换相邻的未按顺序排列的元素,直到序列完成排序。冒泡排序的时间复杂度较高,但是其实现简单,适用于小规模数据的排序。【算法原理】冒泡排序的算法原理很简单。首先,从序列会计较相邻的两个元素,如果顺序不对就交换位置;然后,依次对序列中的每一对相邻元素

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

通过使用std::chrono库或外部库等方法,可以测量C++算法的时间复杂度。为了改进时间复杂度,可以使用更有效的算法、数据结构优化或并行编程等技术。

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