dポイントプレゼントキャンペーン実施中!

https://oshiete.goo.ne.jp/qa/8843774.html

で質問してプログラムを組んでくれた方がいましたが
応用できない場面が出てきてしまったので再び質問させて
いただきます。

前回の質問ではすべて3グループに分けられるように
していただきましたが、実はグループ数を固定するのではなく
1グループの人数を3人に固定しなければならなかったのです。

前回回答していただいたVBAのプログラムを編集して
1~12までを3ずつ4グループになるべく重複をしないで
複数回、分けるにはどうしたらいいでしょうか?
できれば複数回分けたところで全部の数が最低1回は同じ
グループに入るようにできると助かります。

今回も1-2-12と1-2-11は重複と考えます。

まったく重複なしで行うのは不可能だということは
わかりますが、できるだけ少ない重複で複数回(今回は最低6回)のグループ分け
を行いたいと思います。

前回のプログラムに説明も付け加えていただきましたが
よく理解できずに今日まできてしまいました。
大変申し訳ありませんがどうかご教授お願いします。

A 回答 (12件中11~12件)

こんにちは。



まだ、こちらは諦めていませんから、締めないでくださいね。
最終的な結果が、どのようになるのか、私自身も分からない状態です。
いずれにしろ、結果はまたお知らせします。
最後に書いた後の1週間で、締められてしまうというので、事実上、1週間の猶予しかありません。

なお、前回の方の、画像だけをみましたが、特に、それぞれが、平均的な数になっているわけではなさそうでした。もちろん、最後の数行は、手動で直していただく方法もあるのではないかと思いました。今は、その部分に手をつけてしまいましたので、後戻りは利きません。例えば、1~8までの数字があれば、組合せで作るのは、8~9というこうになるはずです。それより少なければ、個々の数値のバランスは崩れます。

前の方とは、まったく違う考え方です。総当り性の方法だと思いますが、こちらは、比較的知られているアルゴリズムを用意しました。(ただし、アルゴリズムは得てして速度が遅いです)

しかし、後から気づいたことで、

>1-2-12と1-2-11は重複

とすると、12個から3つを選び出す条件として、上記を重複とすれば、55個しかありませんね。

また、当然、
 1 - 2 - 12
 1 - 3 - 12
これも重複扱いになるわけです。

その内、12組を選び出すわけですが、もうひとつは、個々の数値を平均に抽出するとなると、本当に、できるのかなって、正直思いました。最後は、やはり平均のバランスが崩れていくような気がします。今は、想像だけですけれどね。

ギブアップの時にも、必ずレスは付けます。もう少しお待ちください。
    • good
    • 0
この回答へのお礼

できるだけ重複しないでということなので1回か2回の重複はやむをえないとして考えていただいたほうが考えやすいのではないかと思います。

一生懸命考えていただいて本当にありがとうございます。

お礼日時:2015/03/25 15:28

こんにちは。



前の人の作ったものを一切考慮せずに、前の質問から考え始めました。
これは、VBA/VBの「順列・組合せ」の練習問題にあるから、久々に考えようと思いました。

だから、最初からの話になってしまうのは、ご容赦ください。

全数[12]から、[3]つを選ぶとしたら、220組になりますね。

前回の
(1) .1~12を4つずつ3グループに重複しないで・・・  495 組
(2). 1~15を5つずつ3グループに重複しないで・・・ 3,003 組
(3). 1~18を6つずつ3グループに重複しないで・・・ 18,564 組
(右側は、組み合わせ計算)
= COMBIN(総数,抜き取り数)

>まったく重複なしで行うのは不可能だということはわかりますが、
私が作っているものは重複自体はありません。

しかし、Excelの乱数ジェネレータには、欠陥(100万回で重複が出る)があります。だから、今のところ、重複には出会っていませんが、可能性はないとは言えません。しかし、それを補填する方法はありますが、一般的な問題では出ないはずです。

しかし、2つの点で、問題があることに気が付きました。

その一つは、例えば、(1)では、495組の組み合わせができます。それを「1パレット」と呼ぶことにします。その「1パレット」を使い切るまでは、重複は存在しませんが、その組み合わせを使いきらずに再び、パレットを作ってしまった時には、理論的に、重複に巡りあう可能性が出てきます。

もう一つは、
>1~12までを3ずつ4グループになるべく重複をしないで
>複数回、分けるにはどうしたらいいでしょうか?

これは可能ですが、しかし、

>できれば複数回分けたところで全部の数が最低1回は同じ
>グループに入るようにできると助かります。

たぶん、今、私のプログラムで作った乱数の並び意味がなくなりますし、ご要求には満足させていないことに気が付きました。

20回目までの統計(下が出現回数)
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12
---------------------------------------------------
2, 3, 6, 5, 9, 7, 3, 6, 6, 4, 6, 3
(見にくい場合は、Excelに貼り付けて、「区切り位置」でセルに入れてください。)

この出現回数のそれぞれをを、平均化させるわけでしょうけれど、12組とか、比較的少ない量で、それを、乱数で並び替えられた所から抜き出す作業が必要だすれば、そんな簡単なことではなさそうです。たぶん、数独のようなものだと思いますが、数独のアルゴリズムを研究してみないと分からないです。

添付画像の「パレット」(作られたものは「組み合わせの乱数リスト」)
「重複しないグループ分けについて」の回答画像1
    • good
    • 0
この回答へのお礼

お忙しい中考えていただいてありがとうございました。

かなり難しいことを要求していたということがわかりました。

急ぎの依頼だったので、各1回の重複が起こる中で
なんとか7回ですべての数が同じグループに入るという
組み合わせを半分、自力で作りました。

しかし、今後「15を3つずつ5個のグループを複数回作り最低1回はどの数も同一グループに入る組み合わせを作る」ことや「18を3つずつ・・・」「21を3つずつ・・・」などの場面が出てきそうなので、そうなるとお手上げです^^;

もし、時間があればまた知恵を貸してください。
よろしくお願いします。

お礼日時:2015/03/21 23:49

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています