今回は、Java言語で順列を作るクラスを練習問題に取り上げます。数学では言葉と式で表現していたものをプログラミング言語に置き換えます。高校数学や大学受験の問題を解くのに十分な程度の品質を目標として取り組んで下さい。
問題 「n個の数値からk個を取る順列」を全て列挙するプログラムを作りましょう
1からnまでの整数から順番にk個取り出す場合を考えましょう。そして、取り得る場合を全て作成し、画面に出力するプログラムを作りましょう。
出力の形式は
- カウント:1番目の数値,2番目の数値,・・・,k番目の数値
としましょう。
順列を生成するクラスはPermutationという名前にします。以下にスケルトンを示します。正しく処理するためのコードを追加して完成させましょう。
完成したPermutationクラスを利用して、次のコードを動作させましょう。このソースコードを変更する必要はありません。このままで、Permutationクラスを利用してください。
TestPermutation.javaの実行結果は次のようになるはずです。
解説
問題 「n個の数値からk個を取る順列」を全て列挙するプログラムを作りましょう。
実装の方法は様々考えられます。ここに示す実装がベストであるとは思いません。むしろ色々突っ込みどころが多いと思います。特に、順列の総数は階乗ですから、すぐに膨大な数になります。そのための対応策は一切含んでいません。実際の問題に利用する場合には、問題に応じてじっくり検討する必要があります。
ともあれ、ひとつの取っかかりとして、このソースコードを参考にしていただけると幸いです。
ソースコード:Permutation.java完成版
今回はここまで
演習問題はいかがでしたか?今回の問題の解説用ソースコードを作るに当たって、いくつものアドバイスをいただく機会がありました。その中にはLispやPythonで順列を生成するものがあり、それらは大変シンプルなコードでした。どちらも10行から20行程度です。Java言語でクラスを作成するということを考えると、とてもそのような行数では同様のものを作ることが難しいと思いますが、より短くシンプルで、かつ理解しやすいコードを目指すことの大切さを感じました。
次回は今回作成したPermutationクラスを利用して、Combinationクラスを作ってみましょう。