A
B
C
D
.
.
.
Z
の中から任意の個数を選んで組み合わせをつくります。
AとBとDとZ
とか
AとBとDとXとYとZ
とか
1個も数に含めます。
ただし、AとBは同時に使えませんといったような制約があります。
■ABCDEFGH
A_○○○×○○○
B○_○○○×○○
C○○_○○○○○
D○○○_×○×○
E×○○×_○○○
F○×○○○_○○
G○○○×○○_○
H○○○○○○○_
※×は組み合わせ不可能
※1から5個まで選べる
※順は組み合わせに含まない ABCとCBAは一緒。
例えばこういった場合には
どういった数式で答えを出せば良いのでしょうか?
ズバリの方には200pt~差し上げます。
出来れば数が増えた場合への応用の仕方、選ぶ数が増えた場合の応用の仕方、
便利な計算ソフト等々も教えてもらえると幸いです。
よろしくお願い致します。
同じ文字が2度出てくるようなのはどうするですか?
例えばAとAAは、別として考えるのですか?
表では_となっていますが・・・
AとAは組み合わせできませんので
_としてます。
8個の数から5個選ぶと8!/5!3!=56通り。(A)
その内、組み合わせAEを含む組み合わせは6!/3!3!=20通り。同様にBF,DE,DGを含む組み合わせも20通り。(B)
また、(B)の中でAEとBFを同時に含むものは4通り。同様にAEとDG、BFとDE,BFとDGを含むものも4通り。(C1)
更に、AEとDEを同時に含むものは5!/2!3!=10通り。同様にDEとDGを含むものも10通り。(C2)
また、(C1)(C2)の中で、AEとDEとBFを含むものは1通り。同様にDEとDGとBFを含むものも1通り。(D1)
更にAEとDEとDGを含むものは4通り。(D2)AEとBFとDGは含み得ない。
また、AEとBFとDEとDGは含み得ない。
以上より56(A)-4*20(B)+(4*4+10*2)(C)-(1*2+4)(D)=6
答えは6通りです。
と、書いたものの大分冗長な解き方ですね…。数が大きくなると手では解け無そうです。これは求めていた答えにはならないっぽいですね。一応この軸でプログラムを組めば対応出来るのでは、と言い訳^^;。
実際は30以上の中から行いますので、
数式が欲しいですね。
含み得ない組み合わせも多数となりますので。
私が解く場合もjmplさんと同じ方法ですね。
まず、すべての組み合わせを数えてそれから駄目な組み合わせを抜く。
ただ、問題なのが、駄目な組み合わせがたくさんあり、それをひとつずつ抜くのに適当な方法がなく、人海戦術で抜くしかなさそうな点です。
数式ですが次のようになります。
x個のアルファベットからy個を順不同で取り出す組み合わせの数をコンビネーションといい、
xCyであらわします。この場合yは1~5で、xは8なので、
8C5+8C4+8C3+8C2+8C1が、駄目な組み合わせを含んだすべての組み合わせ数になります。
xCyは x!/(y-x)!y!で計算できます。!は階乗です。従って、
8!/5!3!+8!/4!4!+8!/3!5!+8!/2!6!+8!/1!7!
=56+70+56+28+8
=218
ここから駄目な場合をひくのですが、問題はすべての場合を丹念に広い、重複を避けなければならない点ですね。
だめな組み合わせはAE,BF,DE,DG
AEを含む組み合わせは、AEを除く残り6個のなかから3個、2個、1個、0個を選ぶ組み合わせですので、それぞれ6C3,6C2,6C1,6C0に成ります。これは6!/3!3!+6!/2!4!+6!/1!4!+6!/0!/6!=20+15+6+1=42通り
BFを含む組み合わせは、同じく42通りですが、
このうちAEを含む組み合わせはすでにカウントしてますので引かなければなりません。
AEBFを含む組み合わせは、AEBFを除く残り4個の中から1個、0個組み合わせですので、それぞれ4C1,4C0に成ります。これは4!/1!3!+4!/0!4!=4+1=5通り
DEを含む組み合わせは、同じく42通りですが、
このうちAEおよびBFを含む組み合わせはすでにカウントしてますので引かなければなりません。
ADEを含む組み合わせは、ADEを除く残り5個の中から2個、1個、0個選ぶ組み合わせですので、それぞれ5C2,5C1,5C0に成ります。これは5!/2!3!+5!/1!4!+5!/0!5!=10+5+1=16通り
BFDEを含む組み合わせは、BFDEを除く残り4個の中から1個、0個組み合わせですので、それぞれ4C1,4C0に成ります。これは4!/1!3!+4!/0!4!=4+1=5通り
さらに問題は、この抜く数を数える過程で、ADEBFを2回カウントしているので、これを元に戻さないといけないので+1
DGを含む組み合わせは、同じく42通りですが、
このうちAE,BFおよびDEを含む組み合わせはすでにカウントしてますので引かなければなりません。
DEGを含む組み合わせは、DEGを除く残り5個の中から2個、1個、0個選ぶ組み合わせですので、それぞれ5C2,5C1,5C0に成ります。これは5!/2!3!+5!/1!4!+5!/0!5!=10+5+1=16通り
AEDGを含む組み合わせは、DEGを含む組み合わせにすべて入ってますから、数えてはいけません。
BFDGを含む組み合わせは、BFDGを除く残り4個の中から1個、0個選ぶ組み合わせですので、それぞれ4C1,4C0に成ります。これは4!/1!3!+4!/0!4!=4+1=5通り
ここで、BFDEGを2回カウントしているので、これを元に戻さないといけないので+1
結局、駄目な組み合わせは、
42+42-5+42-16-5+1+42-5-16+1=123
結局最終的にとりえる組み合わせは218-123=95通りです。
だめな組み合わせをどう取り除くかが、プログラムをくむ最大の鍵になりそうです。
あと、xCyの計算ですが、エクセルを使う場合だと、COMBIN(x,y)で計算できます。
なるほど、勢い組み合わせのエクセルをアップしてお願いした方が良いかもですね。
再質問の際にはよろしくお願い致します。
すみません。回答にはなってないのですが。
ちょっと考えてみましたが、これは解析的に解く(数式を求める)のは面倒ですね。D, E が重複してるのが厄介です。
n=3(ABCとかDTFとかEHCとか)の時は
・全ての組合せ = 2600
・AE, BF, DE, DG のうち少なくとも1つを含む = 96 - 2 = 94
で、
2600 - 94 = 2506 だと思います。
同様に n=4 の時は 14950 - 1055 = 13895 だと思います。
検算に使えるかもしれません……。
なるほど。
実は理科大の友人にも同じような事をいわれてて
結構難儀してます。
改めて質問すると思うのでよろしくお願い致します。
理解が違っていたら申し訳ないので確認したいのですが
仮に全体のデータ数3(ABC)で2個アイテムを選んだときの組み合わせ
AB
AC
BC
計3個
全体のデータ数4(ABCD)で3個アイテムを選んだときの組み合わせ
ABC
ABD
ACD
BCD
計4個
ルール
○重複するアルファベットは使用不可
○順番が入れ替わってるだけのものは不可
○データはA~Z(26個)、アイテムは任意に1から5個
という感じですよね。
「例題の表の"_"は分かるのですが"×"のルールが理解できませんでしたm(_ _)m」
スマートではないですがエクセルマクロで作ってみました。
セルB1に任意に選ぶアイテム数
セルB2に元のデータ数1~26(アルファベットでA~Z)
セルB3に組み合わせ数が出力
ちなみにA~Z(26個)で任意に5個選んだ場合の種類総数は
65780となりました。
選ぶアイテムの個数を増やすのはこのやり方だとループする階層を
増やしていかなければならないので可能ではありますが大変です。
マクロ↓
Option Explicit
Dim I, J, K, L, Y
Dim Item1, Data1, Ans1
'
Sub Macro1() 'Item n個の計算
Item1 = Cells(1, 2) 'セルB1
Data1 = Cells(2, 2) 'セルB2
Ans1 = 0
Y = 0
'データ総数よりアイテムが上回ったら終了
If Data1 < Item1 Or Item1 > 5 Then
Cells(5, 10) = Ans1
Exit Sub
End If
Select Case Item1 'アイテムの個数によって振り分け
Case 1 'アイテム1個
Ans1 = Data1
Case 2 'アイテム2個
For I = 1 To Data1 - Item1 + 1
Y = Y + 1
Ans1 = Ans1 + Y
Next
Case 3 'アイテム3個
For J = 0 To Data1 - Item1
For I = 0 To Data1 - Item1 - J
Y = Y + 1
Ans1 = Ans1 + Y
Next I
Y = 0
Next
Case 4 'アイテム4個
For L = 0 To Data1 - Item1
For K = 0 To Data1 - Item1 - L
For J = 0 To Data1 - Item1 - K
For I = 0 To Data1 - Item1 - (J + K + L)
Y = Y + 1
Ans1 = Ans1 + Y
Next I
Y = 0
Next J
Next K
Next L
Case 5 'アイテム5個
For L = 0 To Data1 - Item1
For K = 0 To Data1 - Item1 - L
For J = 0 To Data1 - Item1 - K
For I = 0 To Data1 - Item1 - (J + K + L)
Y = Y + 1
Ans1 = Ans1 + Y
Next I
Y = 0
Next J
Next K
Next L
End Select
Cells(3, 2) = Ans1 'セルB3
End Sub
なぜか回答できない状態でした、、、
投稿ありがとうございます。
×の部分は特にルールは無く
AとCが×なら
C行のAも×
ってくらいです。
一般化はかなり難しい(というか、できないのではと思います)ので、私なら総当たりでやります。
今時のパソコンなら30とか40くらいの中から選ぶ程度ならすぐにできますし、メモリの消費もしれています。何より確実です。
解法を考える時間も考慮すればそれが一番早いと思います。
http://d.hatena.ne.jp/i_kumagoro/20060508
にC言語ですがコードを置いていますのでご覧下さい。
おお、ありがとうございます。
早速試してみます。
あ、すいません。
組み合わせの総数です。
何通りの組み合わせが作り出せるかです。