php 常用算法和時間復雜度_PHP教程

      編輯Tag賺U幣
      教程Tag:暫無Tag,歡迎添加,賺取U幣!

      推薦:解析PHP跳出循環的方法以及continue、break、exit的區別介紹
      PHP中的循環結構大致有for循環,while循環,do{} while 循環以及foreach循環幾種,不管哪種循環中,在 PHP中跳出循環大致有這么幾種方式: 代碼: 復制代碼 代碼如下: ?php $i = 1; while (true) { // 這里看上去這個循環會一直執行 if ($i==2) {// 2跳過不顯示 $i++;

      本篇文章是對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 curl選項列表(超詳細)
      本篇文章是對php中的curl選項列表進行了詳細的分析介紹,需要的朋友參考下 第一類: 對于下面的這些option的可選參數,value應該被設置一個bool類型的值: 選項 可選value值 備注 CURLOPT_AUTOREFERER 當根據Location:重定向時,自動設置header中的Referer:信息。 CURLO

      來源:模板無憂//所屬分類:PHP教程/更新時間:2013-07-02
      相關PHP教程