• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:乱数と順列と組み合わせ)

乱数と順列と組み合わせ

leaz024の回答

  • leaz024
  • ベストアンサー率75% (398/526)
回答No.3

多重ループにすると、nCrのrの数に応じてループが深くなり、かつ汎用的でないので、普通は再帰かそれと同等の動作をするループにします。 ちょっと作ってみましたが、ぱっと見ても恐らく分からないと思いますんで、いろいろ解析してみて補足してください。 # combi.pl # ---- declare my (@combi, @cnt, $f_loop); my @array = (0, 1, 3, 4, 6, 8, 9); my $r = 5; # ---- main @cnt = (0 .. $r-1); $f_loop = 1; while ($f_loop) {   @combi = @array[@cnt];   # 1つの組み合わせが完成   print "@combi\n";       # 表示   $f_loop = 0;   for (my $i = $r-1; $i >=0; $i--) {     if ($cnt[$i]-$i < @array-$r) {       $cnt[$i]++;       while (++$i < $r) { $cnt[$i] = $cnt[$i-1] + 1; }       $f_loop = 1;       last;     }   } } __END__ ■説明  @array に、n個の値を設定してください。  $r に、選ぶ個数を設定してください。  結果の数が多い場合、    perl combi.pl > result.txt  のように、リダイレクトすればOKです。

mick387
質問者

補足

ありがとうございました。とりあえず、動かすことはできました。これから内容を理解すべく解析してみます。 ところで、前の方のアドバイスにそって自分で強引につくることもできたのですが、(これもまだどこが正しいのかわからないまま動いた) どうしても、結果として出てくる配列の並び方は最初に決めた配列(@array)の並び方に依存していて、「ランダムに」並べることができません。 「n個の中からr個を選んで<ランダムに>並べる」 というのは可能でしょうか? どこかに「配列をランダムに並びかえる」スクリプトを潜り込ませようとしたのですがうまくいきませんでした・・・

関連するQ&A

  • 順列・組合わせの記号(P、Π、C、H)について

    数学の教科書なんかで、 「順列・組合わせ」という章があり、 順列の計算には nPr のようにPが、 重複順列では nΠr のように、Π が、 組合わせでは nCr のようにCが、 重複組合わせでは nHr のようにHが、 それぞれ用いられます。 Pが permutation の頭文字、 Cが combination の頭文字、 というのは分かりました。 Π と、Hは、どこからくるのでしょうか。 どなたかご存知の方、教えてください。 (Π は、permutation の p をギリシャ文字にしただけなのかな?) 英語のスレッドでもよかったのですが、 当方、一応英語が専門のくせに、分からずにいるということで、 数学専門の方にお伺いしたく、 ここに質問させていただきました。

  • 組み合わせと順列 アルゴリズム

    こんにちは 組み合わせと順列についてです。 順序関係のある要素で構成される集合から一定の数をとり、順列を辞書順で生成する方法がわかりません。 うまく説明できないので、例を示します。 たとえば26文字のアルファベットから4文字を選んで辞書順に生成するプログラムはどのようにやればいいのでしょうか? このアルファベットの例だと abcd abce abcf ・・・ abcz abdc abde ・・・ zyxw のようになると思います。 要素と長さが決まっている場合で順列を生成する部分は大丈夫です。(C++ STLのnext_permutationにあたる部分) 一応自分なりに考えたやり方は26進数4桁のように考えて、それを1ずつ増やし、全体で2回以上使われていないかを調べる と思ったんですが、あまりスマートじゃないし要素がとびとびのアルファベットのときなどに応用が利かないと思いました。 指摘していただければ補足しますので、よろしくお願いします。

  • 順列のPについて

    高校の数学教員をやっている者です。順列の授業で、Permutationを出来るだけ教えないで解く方法がありますが、これを使うと、Permutationがいらないのでは、と考えてしまいます。なぜ、Pという記号が高校数学で紹介されるのでしょうか。どなたか教えて下さい。

  • 順列のP

    確立計算で、組み合わせはC(combination)ですが順列のPは何の頭文字なのでしょうか。

  • 同じものを含む順列

    連続する16個の数字から、4つ取り出してその組合せを全て表す処理を作ろうとしています。 まずは意味からと思い、いろいろ検索して調べても、うまく理解できず、最後の手段でここに投稿いたします。 組合せのパターンを割り出すのに、「同じものを含む順列」を使って行うと言われています。 いろいろ調べて混在したものが、意味の違いの点?で、「同じものを含む順列」と「重複順列」とは同じことを表すのでしょうか。 また、「同じものを含む順列」のパターン出力のプログラムを作る必要があり、参考になるサンプルが存在するなら教えていただけないでしょうか。 (順列や組合せは見つかったのですが) 宜しくお願いします。

  • 順列組み合わせ

    A,B,Cの三文字を4桁で並べる場合の順列組み合わせを知りたくここで質問させていただきます。 AAAAから始まりCCCCまで。 文字の重複 AABC(Aが重複) 文字の未使用 AAAB(Cが未使用) もありです。 当方、学生時代は遥か昔なので、数学は完全に忘れております、、、 よろしくお願いいたします。

  • Hってなんだろう!?

    組み合わせ nCr のCはCombination, 並べ方 nPr のPはPermutation, ここまでは教科書に記載されてるのですが、重複順列の nHr のHはなんと言う英語の頭文字でしょうか???

  • 「組合せ」に出てくる文字の読み方について

    nPr の「P」はPermutation nCr の「C」はCombination ここまでは教科書にものっていて知っているのですが… 「異なるn個のものから重複を許してr個とる組合せ」 これはよく問題集などで「nHr」とされています。 この「H」は一体なんと読むのですか? おそらくPやCのように、何かの頭文字であるとは思うのですが…。 ネットでも検索してみたのですが、検索ワードが悪いのか見つかりません。 知っている方がいらっしゃいましたら、ぜひ教えてください。

  • Excelで、数字の組み合わせの合計が一定数になるパターンの抽出

    Excelで、数字の組み合わせの合計が一定数になるパターンの抽出 たとえば、つぎの配列があるとします。 A(5){10,20,30,40,50}要素数が5つ1..5、{}は内容 このなかで二つ以上の組み合わせで和が60になる組み合わせを出したいとします 答えは パタン1:1,2,3  /* 10+20+30 */ パタン2:1,5 /* 10+50 */ パタン3:2,4 /* 20+40 */ 同じような処理をExcelの関数では実現できますでしょうか? また上記のような組み合わせのパタンの総数を求める公式はありますか? 初歩的な高等数学で恐縮です。

  • 順列と組合わせ>高校数学

    いつもお世話になっています。 高校1年生の家庭教師をやっているのですが、正直高校数学は忘れてしまっていて初歩的な問題でも分からないことがあります。 それでお恥ずかしいのですが、順列と組合わせの問題で質問されたのに分からないものがあり、手助けをお願いしたく質問させていただきました。 問題は 赤玉2個、白玉2個、黒玉1個のなかから3つ選んで1列に並べる方法は何通りあるか というものです。 解説はないのですが、答えは学校の先生か友達かが教えてくれたようで、18通りだそうです。 しかし答えが分かっても、解き方がわからないということです。 組み合わせを選ぶのは 5C3 だろうと思ったのですが、そのあと単純に順列をやると、同じ色の玉があるからおかしくなりますよね? ということで、どうやっても18にならないので、解答を教えてください。 よろしくお願いします。