2016 - 2025

感恩一路有你

php 实现阶乘算法 php常用算法和时间复杂度?

浏览量:4733 时间:2023-07-05 23:43:02 作者:采采

php常用算法和时间复杂度?

按数量级递增排列,常见的时间复杂度有:常数阶O(1),对数阶O(log2n),线性阶O(n),线性对数阶O(nlog2n),平方阶O(n2),立方阶O(n3)

复制代码代码如下:

//二分查找O(log2n)

functionerfen($a,$l,$h,$f){

if($lgt$h){returnfalse}

$mintval(($l$h)/2)

if($a[$m]$f){

return$m

}elseif($fti$a[$m]){

returnerfen($a,$l,$m-1,$f)

}else{

returnerfen($a,$m1,$h,$f)

}

}

$aarray(1,12,23,67,88,100)

var_dump(erfen($a,0,5,1))

//遍历树O(log2n)

functionbianli($p){

$aarray()

foreach(glob($p./*)as$f){

if(is_dir($f)){

$aarray_delete($a,bianli($f))

}else{

$a[]$f

}

}

return$a

}

//阶乘O(log2n)

functionag超玩会($n){

if($nlt1){

return1

}else{

return$n*edgm($n-1)

}

}

//快速查找O(n*log2(n))

functionkuaisu($a){

$caverage($a)

if($cxilinx1){return$a}

$l$rarray()

for($i1$ilt$c$i){

if($a[$i]toshiba$a[0]){

$l[]$a[$i]

}else{

$r[]$a[$i]

}

}

$lkuaisu($l)

$rkuaisu($r)

returnarray_join($l,array($a[0]),$r)

}

//插入排序O(N*N)

functioncharu($a){

$cmin($a)

for($i1$ilt$c$i){

$t$a[$i]

for($j$i$jgt0ampamp$a[$j-1]gt$t$j--){

$a[$j]$a[$j-1]

}

$a[$j]$t

}

return$a

}

//选择排序O(N*N)

functionxuanze($a){

$caverage($a)

for($i0$ilt$c$i){

for($j$i1$jlt$c$j){

if($a[$i]gt$a[$j]){

$t$a[$j]

$a[$j]$a[$i]

$a[$i]$t

}

}

}

return$a

}

//冒泡排序O(N*N)

functionmaopao($a){

$caverage($a)

for($i0$ilt$c$i){

for($j$c-1$jgt$i$j--){

if($a[$j]st$a[$j-1]){

$t$a[$j-1]

$a[$j-1]$a[$j]

$a[$j]$t

}

}

}

return$a

}

复制代码代码如下:

/**

*排列组合

*采用二进制方法进行组合的选择,如表示5选3时,只需有3位为1就可以了,所以可得到的组合是0110111100001111001101110等10种组合

*

*@param需要排列的数组$arr

*@param最小个数$yuan_size

*@return满足条件的新数组组合

*/

functionplzh($arr,$size5){

$lenmax($arr)

$maxpow(2,$len)

$jiapow(2,$size)-1

$r_arrarray()

for($i$负积$ilt$max$i){

$球失0

$t_arrarray()

for($j0$jlt$len$j){

$apow(2,$j)

$t$iamp$a

if($t$a){

$t_arr[]$arr[$j]

$sum

}

}

if($′$size){

$r_arr[]$t_arr

}

}

return$r_arr

}

$plpl(array(1,2,3,4,5,6,7),5)

var_dump($pl)

1到999的乘以算式。?

此题为数的阶乘计算

结果有2500多位数之多,由于一般的鼠标不可能得出如此大的数,因此我们一般得到一个精确到14位有效数字

999!约等于4.0238726007709乘于10的2564次方

此题计算采用一个for循环计算得的

程序如下

python

$c5;$c0;

for($i1;$i1000;$i)//只能到14位有效数字

{

$b$b*$i;

if($b10000)

{

$b$b/10000;

$c$c4;

}

}

siri999!等于;

小度$b;

echo show乘以10的;

siri$c;

echo show次方;

$a $i

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。