2016-11-08 6 views
0

им вдохновлен этой должности:Все возможные комбинации с п цифр (букв, цифр)

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

им, используя следующий фрагмент кода:

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

Этот работает хорошо, но проблема в том, что он создает мне комбинации следующим образом:

(А, В, а) (А, В, С) (А, В, С, 0) (А, В, С, 1, 2)

я хочу, чтобы пропустить все эти комбинации 3 для, я просто хочу, чтобы все комбинации из 7 цифр, например:

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

и так далее ...

Как я мог настроить этот код,

Благодарим за помощь!

ответ

0

Ваш код отлично подходит для меня. Попробуйте запустить его всего тремя элементами, и вы увидите, что он выводит только комбинации длины 7. Не забывайте печатать_r ($ v) в конце.

+0

Здравствуйте, спасибо за вашу помощь, я видел его и получил его работу. Проблема в том, что у моего набора данных есть 64 значения, а у моего n 20, поэтому у меня будет много много много много много много комбинаций .... Проблема в том, что для этого потребуются годы, чтобы вычислить все комбинации, есть ли способ сократить время или что-то, что я могу сделать? – redigaffi

+0

Вы не можете, потому что 64 выберите 20 1.9619726 * 10^16, поэтому генерация этого списка займет много времени, независимо от того, как вы это сделаете. Если есть что-то еще, что вы хотите сделать, это не связано с генерацией всего списка, но вы можете сделать это быстрее. – Neal