首页 开发编程 正文

php怎么运算的(php常用算法和时间复杂度)

//遍历树O(log2n)functionbianli($p){$a=array();}}return$a;=1){return$a;$i<$a[0]){$l[]=$a[$i];}else{$r[]=$a[$i];}}$l=kuaisu($l);$a[$j]=$a[$i];$a[$i]=$t;$a[$j-1]=$a[$j];$a...

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<$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);

使用while循环计算4096是2的几次方?

参考代码:

$i=1;

$a=2;

while($i)

{

$a=$a*2;

$i++;

if($a==4096)

break;

}

echo $i;

php怎么计算脚本运行时间?

startTime = microtime(true); //将获取的时间赋值给成员属性$startTime}//脚本结束处嗲用脚本结束的时间微秒值function stop(){$this->stopTime = microtime(true); //将获取的时间赋给成员属性$stopTime}//返回同一脚本中两次获取时间的差值function spent(){//计算后4舍5入保留4位返回return round(($this->stopTime-$this->startTime),4);}} $timer= new Timer();$timer->start(); //在脚本文件开始执行时调用这个方法usleep(1000); //脚本的主题内容,这里可以休眠一毫秒为例$timer->stop(); //在脚本文件结束处调用这个方法 echo "执行该脚本用时".$timer->spent().""; ?>

php返回值计算公式?

$sql="SELECT COUNT(*) AS count FROM mark WHERE hID = '$hid'";

$result = mysql_fetch_array(mysql_query($sql));

$count = $result['count'];

$count++;

$numOfScore = $count;$count = mysql_result(mysql_query("SELECT COUNT(*) AS count FROM mark WHERE hID = $hid"),0);

$numOfScore = $count + 1;

PHP取数组中几个数值求和等于指定值的算法?

看不懂你的问题。。

$a=array(12,25,45,78,3);$sum=$a[0]+$[1]

; //sum=37

本文转载自互联网,如有侵权,联系删除