2016-11-08 34 views
0

IM通過這個帖子的啓發所有可能的組合:有n個數字(字母,數字)

PHP algorithm to generate all combinations of a specific size from a single set

使用下面的代碼片段IM:

function comb ($n, $elems) { 
 
    if ($n > 0) { 
 
     $tmp_set = array(); 
 
     $res = comb($n-1, $elems); 
 
     foreach ($res as $ce) { 
 
      foreach ($elems as $e) { 
 
      array_push($tmp_set, $ce . $e); 
 
      } 
 
     } 
 
     return $tmp_set; 
 
    } 
 
    else { 
 
     return array(''); 
 
    } 
 
} 
 
$elems = array('A','B','C', 'a', 'b', 'c', 0, 1, 2, 3); 
 
$v = comb(7, $elems);

這工作不錯,但問題是,它創建了我的組合是這樣的:

(A,B,A) (A,B,C) (A,B,C,0) (A,B,C,1,2)

我想跳過所有這些(A,B,C,0,1,2,a) (A,B,C,0,1,2,...,3)的組合,我只想要7位數字的所有組合,例如:

B)

等等...

我怎麼能調整此代碼,

謝謝您的幫助!

回答

0

您的代碼爲我工作得很好。試着用三個元素運行它,你會發現它只輸出長度爲7的組合。不要忘記在最後print_r($ v)。

+0

您好,感謝您的幫助,我看過它,得到它的工作。問題是,我的數據集有64個值,和我的n爲20,所以我有很多很多很多很多很多很多很多的組合....但問題是,這將需要幾年計算所有組合,有沒有減少時間或我可以做什麼的方法? – redigaffi

+0

你不能因爲64選20爲1.9619726×10^16,所以生成列表將需要很長的時間,不管你怎麼做。如果還有其他事情你想做,那不涉及生成整個列表,但你可以更快地做到這一點。 – Neal