У меня есть массив, сказатьPerl все перестановки массива один на один
@array = qw(11 12 13 14 15);
Я хочу, чтобы выполнить какую-то операцию и проверьте состояние. Если условие выполнено, я выйду из своей программы, но если не выполнил, я хотел бы обновить свой массив до следующей перестановки в лексикографическом порядке, т. Е. Попытаться с помощью @ array = qw (11 12 13 15 14);
В настоящее время я использую этот код:
sub permute {
return ([]) unless (@_);
return map {
my @cdr = @_;
my $car = splice @cdr, $_, 1;
map { [$car, @$_]; } &permute(@cdr);
} 0 .. $#_;
}
my @array = qw(11 12 13 14 15);
foreach (&permute(@array)) {
if (condition met) {
print "@$_";
exit;
}
}
Проблема: Этот код работает суб переставлять слишком много раз. Это замедляет мою программу за большой промежуток времени, если размер массива большой. Мне не нужна вся перестановка, мне просто нужна следующая перестановка, пока мое условие не выполняется. Предположим, что возможны 100 перестановок, я хочу начать с 1-го. Если условие выполнено, выход else переместится на 2-й, 3-й и т. Д. И т. Д. Итак, я хочу, чтобы метод перестановки выполнялся только для поиска следующей перестановки и не для всех.
Пожалуйста, помогите.
Я не хочу использовать алгоритм :: Permute; и я не хочу все перестановки, но следующий. Итак, я не думаю, у меня есть мой ответ в ссылке выше. Не дублировать. –