php 排列算法

  
  
           
  
  
  1. // 排列 
  2. function Permutation($arr$size = 1) { 
  3.     $len = count($arr); 
  4.     $start = array_slice(array_keys($arr), 0, $size); 
  5.     $end = array_reverse(array_slice(array_keys($arr),-$size)); 
  6.     $r_arr = array(); 
  7.     do { 
  8.         if ( compare($end$start)<0 ) break
  9.         if (array_unique ($start) != $startcontinue
  10.         $t = array(); 
  11.         foreach ($start as $k) { 
  12.             $t[] = $arr[$k]; 
  13.         } 
  14.         $r_arr[] = $t
  15.     } while ( $start = addone($start$len) ); 
  16.     return $r_arr
  17.  
  18. // 加一 
  19. function addone ($arr$max_num) { 
  20.     $size = count($arr); 
  21.     for ($i=$size-1; $i>=0; $i--) { 
  22.         if ($arr[$i] + 1 < $max_num) { 
  23.             $arr[$i]++; 
  24.             return $arr
  25.         } else { 
  26.             if ($i == 0) return false; 
  27.             $arr[$i] = 0; 
  28.         } 
  29.     } 
  30.  
  31. // 數組大小比較 
  32. function compare ($a$b) { 
  33.     for ($i=0; $i<count($a); $i++) { 
  34.         if ($a[$i] != $b[$i]) { 
  35.             return $a[$i]>$b[$i] ? 1 : -1; 
  36.         } 
  37.     } 
  38.     return 0; 
  39.  
  40. $p = Permutation(array(1,2,3,4,5), 4); 
  41. echo '<pre>'
  42. print_r($p); 
  43. echo '</pre>'
  44. exit
相關文章
相關標籤/搜索