php 常用演算法以及時間複雜度

來源:互聯網
上載者:User
本篇文章詳細的介紹了關於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);

相關推薦:

PHP常用演算法和資料結構樣本

PHP 中巧用數組降低程式的時間複雜度

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.