学校でのクラス内のグループ分けの方法に悩んでいます。

n人のクラスでm回の授業をします。毎回l組みのグループに分けますが、なるべく同じ人と同じグループにならないようにしたい。
この組み分けを、Excelもしくはvbaで自動生成したいと思っています。良い知恵があればお教えください。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2011/08/22 22:13:08
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:Hyperion64 No.1

回答回数791ベストアンサー獲得回数84

ポイント100pt

確かに難しい問題なので、どなたも回答されてないようなので、やや不完全ですが道筋(アルゴリズム)を説明します。

はじめに、n=6でl=3のケースで説明します。

1)6の分割数のケースをだします(p(6)=11通りあります)

6,5+1,4+2,4+1+1,3+3,3+2+1,3+1+1+1,2+2+2,2+2+1+1,2+1+1+1+1,

1+1+1+1+1+1

2)上記ケースでl=3組に分かれたケースを選別します

  4+1+1,3+2+1,3+1+1+1,2+2+2

3)すべての要素が[6/3]=2以上からなるケースを選別します。

[]はガウス記号です。これは「なるべく同じ人数」を満たす条件です。

  2+2+2

4)6人を2,2,2に分ける組み合わせを計算します

   6C4*4C2*2C2=6!/(4!2!)×4!/(2!2!)×2!/(2!0!)=30

 m回が30以下であれば、毎回異なるペアを作れます。具体的なメンバーの対は集合演算すれば生成できるでしょう。また、mが30より大であるとメンバが同じグループが出来てしまうのは不可避です。



 これをより一般的に表現すると

1)nの分割をリストアップする(自然数の分割に従う)

2)l個に組み分けされた分割ケースを抽出します(l個の要素の分割を選ぶ)

3)上記分割で[n/l]以上の要素からなるケースを選別します。仮に(a,b,c,d...)とします

4)n人を(a,b,c,d...)に分ける組み合わせ数を出します(組み合わせ数を計算する必要は必ずしも無いですが、m回以上かどうかのチェックにはなります)

5)組み合わせを作成します

Excel実装は該当する関数がないので苦しいです。とくに自然数の分割パターンは自分でVBAプログラムする必要があります。下記サイトの問題93が参考になるでしょう。

http://www.geocities.jp/m_hiroi/func/yasp06.html

その他参考

自然数の分割

  • id:taknt
    >なるべく同じ人と同じグループにならないようにしたい。

    ということは 最初にグループAとグループBに それぞれ2人を 割り当てればいいだけですね。

    あとは テキトーに割り当てれば いいだけです。
  • id:Lhankor_Mhy
    ↑そんな単純じゃないでしょ。
    これ難しいよ。
  • id:yagian
    いや、結構、難しいですよ。これ。
  • id:Lhankor_Mhy
    これ例えば、40人5組とかだと、「同じ人と同じグループに」必ずなってしまうわけですが、「なるべく」とはその人数を最小にする、という意味でいいんですよね。
     
    難しいなあ。
  • id:yagian
    そうなんです。完全に重複をなくすことができない場合には、その人数を最小にしたいということです。

この質問への反応(ブックマークコメント)

トラックバック

  • 回答ランキングトップの酷すぎる実態 http://q.hatena.ne.jp/1313890103#a1095788 >あと LANのハブを使うとかいうのもあります。 初心者にこの回答はひどすぎます。 http://q.hatena.ne.jp/1313881177#c212679 無
「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません