• 締切済み

"n!"(階乗)の数字列の生成

ある"n"(数字)を入力すると、"n!"(階乗)通りの数字列を生成するプログラムを作りたいのですが、 どのような考え方でプログラムを作成すればよいのかわかりません。 例えば、"7"と入力すると 1,2,3,4,5,6,7 1,2,3,4,5,7,6 1,2,3,4,6,5,7    ・    ・    ・ 7,6,5,4,3,2,1 のように7!通りの数字列を出力されるようにしたいのです。 アドバイスを頂けないでしょうか。よろしくお願いします。

みんなの回答

回答No.2

Oiron_Uotiさん、今日は。 順列生成の基本的な考えは、n!個の順列に1からn!までの重複しない番号をつけることです。 それができたら番号を受け取って順列を返す関数を作ります。(下記参考サイトでは最小完全ハッシュ関数と呼んでいます。C言語を使っていますが、原理が載っていますので、VBに直すのもたいした手間じゃないでしょう) それを例えばSub GetPerm(Number as integer, Perm() as byte)とするとき、  for i=1 to 100 GetPerm(i,Perm); next i; のように書くと、Permに順に番号1から100までの順列が入ることになります。 ネット上で検索すると1番目の順列を元に2番目を作る、2番目を基にして3番目を作る・・・というようなやり方がほとんどですが、上で書いたやり方の大きな利点は、例えば100億個の順列がほしいとき、10億個毎に別マシンで行うというように簡単に分散化できることです。 ところで、nはどの程度の大きさを想定していますか。 通常は、12!までしか取り扱えないことはご存知ですよね。

参考URL:
http://www.ic-net.or.jp/home/takaken/nt/slide/hash.html
Oiron_Uoti
質問者

お礼

ありがとうございます。 このやり方だと、先頭が"1"の文字列のみ欲しいという場合にも対応できそうですね。

Oiron_Uoti
質問者

補足

nは9くらいまでを想定しています。 12!までしか扱えないということは知りませんでした。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1
参考URL:
http://okweb.jp/kotaeru.php3?qid=1123441
Oiron_Uoti
質問者

お礼

ありがとうございます。 C言語はわかりませんが、参考にします。

関連するQ&A

専門家に質問してみよう