友人から相談されました。
- - - - - - - - - - - - - - - - - - - - - - -
12人のメンバーを、3人グループで4つのグループに分けたいです。
1か月ごとにメンバーチェンジをして、全員と同じグループを経験できるようにしたいです。
- - - - - - - - - - - - - - - - - - - - - - -
※いろんな人と交流したいということですので、
自分以外の11人と一度は同じグループになるようにしたい、
それが最小何回でできるだろうか、ということです。

考えてみたのですが人数が多くてよくわからなかったので、
ためしに6人で2人ずつ3グループの場合で考えてみました。
[AB][CD][EF]
[AC][BE][DF]
[AD][BF][CE]
[AE][BD][CF]
[AF][BC][DE]
の、5通りで全員と同じグループになれます。(もし違いましたら、教えてください。)
これを数学的に計算するにはどうしたらいいでしょうか?
6C2×4C2÷3! と考えてみたのですが、
=15になり、数が合わない・・・ということは、式が違うのですよね。
6C2 ・・・6人の中から2人を選ぶ
4C2 ・・・残り4人の中から2人を選ぶ
÷3! ・・・3つのグループは区別しない
と、考えてみたのですが・・・どのように考えたらいいのか、教えてください。

また、できたら上記の12人の場合もご教授ください。

どうぞよろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

6人を3つに分ける場合は5回であってると思います。


12人を4つにわける場合を考えてみると、ある人Aが全員と対面するには、ABC ADE AFG AHI AJK ALBのように、最低6回必要です。ABが1回ダブっていますが、これは避けられません。そこで、6回で全員が対面できるかどうかが問題になります。7回やれば、
ABC DEF GHI JKL
ADG BEJ CHL FKI
AHJ DIL BFG CEK
AEI BDH CFJ GKL
AFL BIK CDG EHL
AHK BEL CFI DGJ
ADK BEG CFH DIJ
で、全員が対面できます。全員が対面する組み合わせは全部で12*11/2=66通りあり、一回のグループわけで3*4=12通り対面するのですが、同一の人との対面を極力減らしたとしても、6回で終わるかどうか。。。?
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

Aさんだけで考えるのでしたら、書いて頂いた通りだと思います。

>同一の人との対面を極力減らしたとしても、6回で終わるかどうか。。。?
そこを、どのように極力減らせるのか、わからないでいます。

12人分まわるように書いて考えるのは難しくって・・・
計算方法がないものでしょうか。

お礼日時:2009/05/14 23:45

その計算だと、6人で2人ずつ3グループに分けるときの、すべての場合の数を求めることになりますね。



[AB][CD][EF]
[AB][CE][DF]
[AB][CF][DE]


[AF][BC][DE]
[AF][BD][CE]
[AF][BE][CD]

「最小何回」というのを考慮していない数字です。

[AB][CD][EF]
[AC][BE][DF]
[AD][BF][CE]
[AE][BD][CF]
[AF][BC][DE]

これより、最小の回数が5回であることは、間違いないと思います。

この場合、DとEを交換しても、DとFを交換しても、最小の回数になりますよね。

その3パターンで、さらに15を割ると、欲しい値の5が求められます。

では、12人で3人ずつ4グループに分ける場合はどうすれば良いか。
・・・解りません(笑)

予想としては、
[ABC]のときの他のグループ分けは1種類。
[AKL]のときも他のグループ分けは1種類。
と考えて、
[ABC][ABD][ABE]・・・[AKJ][AKL]の11×10=110通りのような気もするし、
[ABC][ACD][ADE][AEF]・・・[AKL][ALB]の11通りのような気もするし・・・

・・・だんだん面倒になってきたので、これで失礼します。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

>この場合、DとEを交換しても、DとFを交換しても、最小の回数になりますよね。

その通りです。
具体的に表して頂いた通り、書いてみてそこはわかったのですが・・・
数学的に、「最小何回か」というところを求めるには
どのように考えたらいいんだろう、と悩んでいます。

数が増えた場合も同様の計算方法があれば!と思い、
このあと9人グループの場合等で検討してみたのですが
今一つわからないでいます。

ご面倒をおかけしました。
ありがとうございました。

お礼日時:2009/05/14 23:41

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q50人を数回、グループ分けする方法について。

グループ分けの方法について質問させて頂きます。

50人を7つのグループに分ける方法についてです。
人数は、7人グループ6つ、8人グループ一つです。

このグループ分けを5回行いますが、毎回、それぞれが
出来る限り同じグループになったことのない人とあたるように分けたいのですが・・・

何かうまい方法はないでしょうか。
よろしくお願い致します。

Aベストアンサー

   1,2,3,4,5,6,7、
   1,2,3,4,5,6,7、
   1,2,3,4,5,6,7、
   1,2,3,4,5,6,7、
   1,2,3,4,5,6,7、
   1,2,3,4,5,6,7、
   1,2,3,4,5,6,7、

   1,2,3,4,5,6,7、
   7、1,2,3,4,5,6、
   6,7、1,2,3,4,5,
   5,6,7、1,2,3,4,


49人でやってるけど

縦に7人でやる  横に1つづらして 縦に7人

横に7人  縦にずらして  横に7人

これで4回分

Q順列組合せについて

12名で年6回ゴルフコンペを行っております。
4名1組で計3組でラウンドしておりますが
この6回の内に他の11名すべての人と
なるべく重複しないように組を組むには
どういった組み合わせ方をすれば
良いでしょうか?
宜しくお願い致します。

Aベストアンサー

 「みんなに一度は当たる」というだけの条件だったら、高々5回のラウンドでできちゃうんです。

 まず、条件を追加して、手作業で扱える程度の問題に帰着してしまいます。どんな条件かと言うと:
 12人のメンバーを1さんから12さん、と呼ぶことにします。(いや、●chとは関係ないです。)
で、二人ずつペアになって貰います。
ペア1は1さんと7さん、ペア2は2さんと8さん、ペアnはnさんとn+6さん(n=1~6)
こうして決めたペアはいつも一緒の組になる。これが追加した条件です。
 そうすると、
ラウンド1ではペア1~6はそれぞれA組,A組,B組,B組,C組,C組
ラウンド2ではペア1~6はそれぞれA組,B組,A組,C組,B組,C組
ラウンド3ではペア1~6はそれぞれA組,B組,C組,A組,C組,B組
ラウンド4ではペア1~6はそれぞれA組,B組,C組,B組,A組,C組
ラウンド5ではペア1~6はそれぞれA組,B組,B組,C組,C組,A組
という解がすぐ見つかりました。
 どのペアも他の5つのペアと一度は一緒にラウンドしてます。ですから、どの人も他の人全員と一度はラウンドしたことになる。だからこれで、「みんなに一度は当たる」という条件を満たしています。

 ただ、この組み合わせ方では、どの人もペアを組んだ相手とはいつも一緒である。これをもっと散らして平準化したいですね。

 そこで1~6さんは上記の組み合わせに従って戴くとして、7~12さんには以下のように組を代わって貰います。
ラウンド2と3ではA組と言われたらB組へ、B組と言われたらC組へ、C組と言われたらA組へ行く。
ラウンド4と5ではA組と言われたらC組へ、B組と言われたらA組へ、C組と言われたらB組へ行く。
 こうしますと、5回のラウンドのうちで、どの人も他の全員と当たり、しかも高々3回しか同じ人と当たりません。
 3回当たるのは
(1,8),(2,7),(3,10),(4,9),(5,12),(6,11)
 2回当たるのは
(1,9),(1,10),(2,9),(2,10),
(3,11),(3,12),(4,11),(4,12),
(5,7),(5,8),(6,7),(6,8)
で、他の「二人の組み合わせ」は1回ずつ当たります。

 ところで、6回のラウンドを有効に使えばもっと平準化できる(同じ人と1回しか当たらないということを減らすとともに、同じ人に3回当たるという組み合わせを少なくできる)に違いなく、コンピュータで力任せに探索すればナントカなるはず。そのうちやってみるかも知れません。

 「みんなに一度は当たる」というだけの条件だったら、高々5回のラウンドでできちゃうんです。

 まず、条件を追加して、手作業で扱える程度の問題に帰着してしまいます。どんな条件かと言うと:
 12人のメンバーを1さんから12さん、と呼ぶことにします。(いや、●chとは関係ないです。)
で、二人ずつペアになって貰います。
ペア1は1さんと7さん、ペア2は2さんと8さん、ペアnはnさんとn+6さん(n=1~6)
こうして決めたペアはいつも一緒の組になる。これが追加した条件です。
 そうすると、
ラウンド...続きを読む

Q重複しないグループ分けについて

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

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

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

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

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

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

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

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

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

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

前回回答していただいたVBAのプログラムを編集して
1~12までを3ずつ4グループになるべく重複をしないで
複数回、分けるにはどうしたらいい...続きを読む

Aベストアンサー

【つづき】

上記で出来上がった表を元に、組合せパターン数の表を作成するもの
#7後半にもありましたが、その表の右側に 1_2_3 の様な表示を追加しています。
#7後半のものでも構いません。

Public Sub CheckPtn()
  Dim dicPtn As Object
  Dim vA As Variant, vB As Variant, v As Variant
  Dim i As Long, j As Long, k1 As Long, k2 As Long
  Dim iGrp As Long
  Dim vS As Variant, sS As String

  Set dicPtn = CreateObject("Scripting.Dictionary")
  With Range("B2")
    vA = .CurrentRegion.Value
    iGrp = .Cells(1).MergeArea.Count
    ReDim vB(1 To UBound(vA, 2) + 1, 1 To UBound(vA, 2) + 1)
    vB(1, 1) = "組"
    For i = 2 To UBound(vB)
      vB(1, i) = i - 1
      vB(i, 1) = i - 1
      vB(i, i) = "A"
    Next
    For i = 2 To UBound(vA)
      If (Val(vA(i, 1)) > 0) Then
        For j = 1 To UBound(vA, 2) Step iGrp
          sS = ""
          For k1 = 0 To iGrp - 2
            sS = sS & "_" & vA(i, j + k1)
            For k2 = k1 + 1 To iGrp - 1
              vB(vA(i, j + k1) + 1, vA(i, j + k2) + 1) = _
                vB(vA(i, j + k1) + 1, vA(i, j + k2) + 1) + 1
              vB(vA(i, j + k2) + 1, vA(i, j + k1) + 1) = _
                vB(vA(i, j + k2) + 1, vA(i, j + k1) + 1) + 1
            Next
          Next
          sS = sS & "_" & vA(i, j + k1)
          sS = Mid(sS, 2)
          dicPtn(sS) = dicPtn(sS) + 1
        Next
      End If
    Next
    With .Offset(UBound(vA) + 2)
      .CurrentRegion.Clear
      With .Resize(UBound(vB), UBound(vB))
        .Value = vB
        On Error Resume Next
        .Cells.SpecialCells(xlCellTypeBlanks) _
          .Interior.ColorIndex = 38
        .Offset(1, 1).Resize(.Rows.Count - 1, .Columns.Count - 1) _
          .SpecialCells(xlCellTypeConstants _
                  , xlTextValues).ClearContents
        .Columns(1).Interior.ColorIndex = 36
        .Rows(1).Interior.ColorIndex = 36
        .Borders.LineStyle = xlContinuous
        .HorizontalAlignment = xlCenter
        .EntireColumn.AutoFit
      End With
      
      ReDim vS(1 To dicPtn.Count, 1 To 2)
      i = 1
      For Each v In mySort2(dicPtn.Keys)
        vS(i, 1) = Join(v(1), "_")
        vS(i, 2) = dicPtn(v(0))
        i = i + 1
      Next
      With .Offset(, UBound(vB) + 1)
        .CurrentRegion.Clear
        With .Resize(dicPtn.Count, 2)
          .Value = vS
          .Borders.LineStyle = xlContinuous
        End With
      End With
    End With
  End With
  Set dicPtn = Nothing
End Sub

Private Function mySort2(ByVal vA As Variant) As Variant
  Dim vR As Variant, vS As Variant, v As Variant
  Dim i As Variant, j As Variant, k As Long, n As Long

  ReDim vR(LBound(vA) To UBound(vA))
  For i = LBound(vA) To UBound(vA)
    vS = Split(vA(i), "_")
    For j = 0 To UBound(vS) - 1
      For k = j + 1 To UBound(vS)
        If (Int(vS(j)) > Int(vS(k))) Then
          v = vS(j)
          vS(j) = vS(k)
          vS(k) = v
        End If
      Next
    Next
    vR(i) = Array(vA(i), vS)
  Next
  For i = LBound(vR) To UBound(vR) - 1
    For j = i + 1 To UBound(vR)
      For k = 0 To UBound(vS)
        If (Int(vR(i)(1)(k)) < Int(vR(j)(1)(k))) Then
          n = 0
          Exit For
        ElseIf (Int(vR(i)(1)(k)) > Int(vR(j)(1)(k))) Then
          n = 1
          Exit For
        End If
      Next
      If (n > 0) Then
        v = vR(i)
        vR(i) = vR(j)
        vR(j) = v
      End If
    Next
  Next
  mySort2 = vR
End Function

※ mySort2 は、文字列で与えられたものを1度バラして・・・ってやってます
(元々数値の表側を見ればもっと少ない記述になりますが)

【つづき】

上記で出来上がった表を元に、組合せパターン数の表を作成するもの
#7後半にもありましたが、その表の右側に 1_2_3 の様な表示を追加しています。
#7後半のものでも構いません。

Public Sub CheckPtn()
  Dim dicPtn As Object
  Dim vA As Variant, vB As Variant, v As Variant
  Dim i As Long, j As Long, k1 As Long, k2 As Long
  Dim iGrp As Long
  Dim vS As Variant, sS As String

  Set dicPtn = CreateObject("Scripting.Dictionary")
  With Range("B...続きを読む


人気Q&Aランキング

おすすめ情報