Учитывая (A, B, C, D)
Что такое алгоритм, который может уменьшить его до уникальных не дублированных множеств размера n.
Например, если n равно 3.
[A,B,C]
[A,C,D]
[A,B,D]
[B,C,D]
Как вы заметили, A, A, A не может быть действительным, ни A, A, B и [A, C, D] = [C, A, D] = [A, C, D] = [D, C, A] = и т.д..
есть способ не генерировать силовой набор и уменьшать его, потому что набор из 7 элементов равен n ^ 7, который быстро становится исчерпывающим.
Взгляните на Math_Combinatorics.
<?php
require 'Combinatorics.php';
$combinatorics = new Math_Combinatorics;
$result = $combinatorics->combinations( ['A','B','C','D'], 3 );
var_export($result);
печать
array (
0 =>
array (
0 => 'A',
1 => 'B',
2 => 'C',
),
1 =>
array (
0 => 'A',
1 => 'B',
3 => 'D',
),
2 =>
array (
0 => 'A',
2 => 'C',
3 => 'D',
),
3 =>
array (
1 => 'B',
2 => 'C',
3 => 'D',
),
)
Он также имеет метод permutations
(т.е. [A, B, C]! = [A, C, B] и, следовательно, оба находятся в наборе результатов)
composer
находится на подъеме, см. Bioinfornetics.blogspot.de/2014/01/…
Choose(N,k)=n!/(nk)!k!
, из тех. (3) Размер блока питания составляет2^n
, а неn^n
, поэтому для 7 элементов - это 2 ^ 7.