У вас много проблем в этой программе.В ваших типах данных есть несоответствие.
Если вы хотите использовать frequency
, вы указываете уникальные элементы только один раз, но указываете, сколько раз они появляются.Ссылка на массив, который вы указываете для частоты, должна быть той же длины, что и массив данных:
use Math::Combinatorics;
my @array = (1,0); # an array, not an array reference
$c = Math::Combinatorics->new(
count => 5,
data => \@array, # now you take a reference
frequency => [3,2]
);
while (@permu = $c->next_string ){
print "@permu\n";
}
Теперь вы должны получить желаемый вывод, представляющий собой различные комбинации, в которых вы не можете определить разницу междукратные 1 и множественные 0:
0 1 1 1 0
0 1 1 0 1
0 1 0 1 1
0 0 1 1 1
1 0 1 1 0
1 0 1 0 1
1 0 0 1 1
1 1 0 1 0
1 1 0 0 1
1 1 1 0 0
Если вы не используете frequency
, вам просто нужно указать все элементы в массиве данных.Тем не менее, вы, вероятно, избегаете этого, поскольку он рассматривает каждый элемент как отдельный, чтобы не сворачивать то, что выглядит как одна и та же комбинация.