2012-02-02 22 views
-2

与えられたセットのn個のk個の組み合わせを生成するPerlルーチンを書く必要があります。私はそこにセットがいくつあるのかを数える必要はありません、私はそれらを印刷することができなければなりません。私はかなり困惑している。Perlを使って組み合わせを生成する

アドバイスありがとうございます。

よろしくお願いいたします。

答えて

-2

あなたが繰り返しのない組み合わせをしたい場合は、長さKにすべてのバイナリ番号を生成することができ、一定の順序でnは 1のセットに適用を有するものを選択する:0は、選択した1つの手段を選ばないことを意味。バイナリ番号を取得するには、sprintf '%05b'を使用します。 1をカウントするにはtr/1//を使用します。

+0

これはお勧めです! 'sprintf '%05b''と' tr/1 // 'の使い方の例を教えてください。彼らはどちらも私には新しいものです。 – Schemer

+0

@Schemer:['sprintf'](http://perldoc.perl.org/functions/sprintf.html)と[引用と引用符のような演算子]のドキュメントを参照してください(http://perldoc.perl.org/ perlop.html#見積りと見積もりの​​ような演算子)。 'sprintf'は文字列をフォーマットし、'%05b'は先行ゼロを持つ5桁の2進数です。 'tr'は文字を置き換え、置換または削除された文字の数を返します。したがって、' tr/1 // 'はすべての' 1'文字を削除し、それらの数を返します。 –

+0

さて、私はグーグルでsprintfを見つけました。しかし、私は 'tr/1 //'を参照するものは何も見つかりませんでした。 – Schemer

5

Math::Combinatoricsというモジュールがあります。これは、組み合わせ(nCr)、置換(nPr)、およびユーザーが提供する一連のものの不具合を生成します。

+0

申し訳ありませんが、私が作業しているマシンにこのモジュールがインストールされておらず、自分でインストールすることはできません。 – Schemer

+0

@Schemer =>そのモジュールはXSを使用せず、コアに依存しない依存関係がないため、確実に使用できます。方法についてはhttp://stackoverflow.com/a/755179/189416をご覧ください。 –

+1

インストールできない場合でも、ソースを見ることができます。 –

関連する問題