人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

【Perl】リストの全ての並び順を取得するアルゴリズムは?

配列要素の逆順並びは reverse で得られますが、全ての並び順を得る方法はあるでしょうか?

@A = qw( a b c 4 );

の場合、以下の全配列を取得したいのです。

abc4
ab4c
acb4
ac4b
a4bc
a4cb
bac4
ba4c
bca4
bc4a
b4ac
b4ca
cab4
ca4b
...
4cba # reverse @A で得られる

4 * 3 * 2 * 1 = 24通り?

配列の要素数は一定ではありません。


●質問者: radio3
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:24 Perl アルゴリズム リスト 素数
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● b-wind
●500ポイント ベストアンサー
sub permutation {
 my @array = @_;
 return [] unless @array;
 my @result = ();
 for(my $i=0; $i<@array; $i++ ) {
 my @sub = @array;
 splice @sub,$i,1;
 my @permutation_list = permutation(@sub);
 foreach $permutation ( @permutation_list ) {
 push @result ,[$array[$i],@{$permutation}];
 }
 }
 return @result;
}

my @A = qw/a b c 4/;
my @result = permutation(@A);
foreach my $array ( @result ) {
 print join('',@{$array}),"\n";
}

こんな感じ?

同じ文字が含まれた時の事は考慮してません。

◎質問者からの返答

素晴らしい!!

お見事です。ありがとうございました!

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ