php 實(shí)現(xiàn)階乘算法 php常用算法和時(shí)間復(fù)雜度?
php常用算法和時(shí)間復(fù)雜度?按數(shù)量級遞增排列,常見的時(shí)間復(fù)雜度有:常數(shù)階O(1),對數(shù)階O(log2n),線性階O(n),線性對數(shù)階O(nlog2n),平方階O(n2),立方階O(n3)復(fù)制代碼代碼如
php常用算法和時(shí)間復(fù)雜度?
按數(shù)量級遞增排列,常見的時(shí)間復(fù)雜度有:常數(shù)階O(1),對數(shù)階O(log2n),線性階O(n),線性對數(shù)階O(nlog2n),平方階O(n2),立方階O(n3)
復(fù)制代碼代碼如下:
//二分查找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超玩會(huì)($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
}
復(fù)制代碼代碼如下:
/**
*排列組合
*采用二進(jìn)制方法進(jìn)行組合的選擇,如表示5選3時(shí),只需有3位為1就可以了,所以可得到的組合是0110111100001111001101110等10種組合
*
*@param需要排列的數(shù)組$arr
*@param最小個(gè)數(shù)$yuan_size
*@return滿足條件的新數(shù)組組合
*/
functionplzh($arr,$size5){
$lenmax($arr)
$maxpow(2,$len)
$jiapow(2,$size)-1
$r_arrarray()
for($i$負(fù)積$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的乘以算式。?
此題為數(shù)的階乘計(jì)算
結(jié)果有2500多位數(shù)之多,由于一般的鼠標(biāo)不可能得出如此大的數(shù),因此我們一般得到一個(gè)精確到14位有效數(shù)字
999!約等于4.0238726007709乘于10的2564次方
此題計(jì)算采用一個(gè)for循環(huán)計(jì)算得的
程序如下
python
$c5;$c0;
for($i1;$i1000;$i)//只能到14位有效數(shù)字
{
$b$b*$i;
if($b10000)
{
$b$b/10000;
$c$c4;
}
}
siri999!等于;
小度$b;
echo show乘以10的;
siri$c;
echo show次方;