n!
perlで配列のすべての順列を生成するための最良の(エレガントで、シンプルで、効率的な)方法は何ですか?
たとえば、配列がある場合、@arr = (0, 1, 2)
すべての順列を出力したいと思います。
0 1 2
0 2 1
1 0 2
1 2 0
2 0 1
2 1 0
これはおそらくイテレータを返す関数である必要があります(n!
非常に大きくなる可能性があるため、評価の遅延/遅延)。したがって、次のように呼び出すことができます。
my @arr = (0, 1, 2);
my $iter = getPermIter(@arr);
while (my @perm = $iter->next() ){
print "@perm\n";
}