- ベストアンサー
組合せの総数がわかりません.
例えばa,b,c,dの四つの組み合わせ方を挙げます. 組み合わせるものを同じ数字であらわすとしまして, 1123は,a,bを組み合わせてbとcは別々という意味です.ただし,2213も3321も3312も1123と同じ組合せになります. つまり総列挙すると 1123(ab,c,d) 1213(ac,b,d) 1231(ad,c,b) 2113(a,bc,d) 2131(a,bd,c) 2311(a,b,cd) 1122(ab,cd) 1212(ac,bd) 1221(ad,bc) 1112(abc,d) 1121(abd,c) 1211(acd,b) 2111(a,bcd) 1111(abcd) 1234(a,b,c,d) の15通りになるかと思います. 今,4つのアルファベットの組合せでしたが, これをnとすると,組合せの総数はどのようになりますでしょうか? 定式化不可能なのでしょうか?不可能ならこの組合せ総数が指数関数的に増大することを示せればよいのですが.
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
#3です。あまりに乱雑なので手直ししてみました。 ちなみに#3のミスがありました… 1,5,5,5,10,5,5,5,1,0,5,5,5,10,10,10,10,17ではなく 1,5,5,5,10,5,5,5,10,5,5,5,10,10,10,10,17です… 他にも修正すべき所がありそうですが… #3は読ま無くて構いません。#4を読んでください。 なるべく解り易くまとめたのが#4ですので、 #3→#4と読んで戸惑う事はないかと思います… では、#4 N=1の時 A の1通り N=2の時 AB A B の2通り N=3の時 ABC AB C AC B BC A A B C の5通り N=4の時 質問にある15通り 以下延々と続くわけですが… NからN+1を考えてみましょう N=1→2 BはN=1の時の組み合わせそれぞれに対して ・いずれかに混ざる ・単独となる の2通りが考えられるのだから… A→Aに付くor単独の2通り 合計2通り→N=2の時の組み合わせは2通り N=2→3 CはN=2の時の組み合わせそれぞれに対して ・いずれかに混ざる ・単独となる の2通りが考えられるのだから… AB→ABに付くor単独の2通り A B→Aに付くor Bに付くor単独の3通り 合計5通り→N=3の時の組み合わせは5通り これを簡単な式にするために組み合わせの図にある『固まりの数』について着目します。 ※質問にある1213等の最も大きい数と考えて下さい。 N=1の時Aのみ…つまりL=1 N=2の時ABとAとBでL=3 N=3の時ABCとABとCとACとBとBCとAとAとBとCでL=10 となります。 Nの時の組み合わせの数がM通り、固まりの数Lが解っていればN+1の時の組み合わせは ・いずれかに混ざる事により新規組み合わせが合成される→L通り ・単独となる→M通り と言う事がいえますね。 つまり『N+1の時の組み合わせは、Nの時のMとLの合計』と言う事になります。 ではLを求める事が出来れば良いと言う事になりますが これは『組み合わせパターンがいくつになるのか』を考えるとLを求められます。 ABC等くっついた固まりを○で表すと ○→○ or ○○ ○○→○○ or ○○○ ・いずれかに混ざる→組み合わせ一つに対しての固まりは吸収されるので変わらない ・単独となる→組み合わせ一つに対しての固まりは一つ増える また、 ・いずれかに混ざる→組み合わせはそのパターンの固まりの数 ・単独となる→組み合わせは1通り つまり、Nに対してN+1になる時に新たに加わるものをoで表すと ○→◎ or ○o ○○→◎○ or ○◎ or ○○o ○○○→◎○○ or ○◎○ or ○○◎ or ○○○o ○○○○→◎○○○ or ○◎○○ or ○○◎○ or ○○○◎ or ○○○○o … という感じになるんです(これでイメージ沸きますかね…) つまり、固まりは 1→3 2→7 3→13 4→21 … と言う感じで増えます。 ここで、組み合わせに対する固まりの数の増え方を表してみます。 N=1→2 1→3 N=2の時の固まりの合計は3 N=2→3 1→3 2→7 N=3の時の固まりの合計は3+7=10 N=3→4 1→3 2→7 2→7 2→7 3→13 N=4の時の固まりの合計は3+7+7+7+13=37 となります。 固まりの数が増えるメカニズムを一般式にしてみましょう ------------------------------------------------------------------------- ・いずれかに混ざる→組み合わせ一つに対しての固まりは吸収されるので変わらない ・単独となる→組み合わせ一つに対しての固まりは一つ増える また、 ・いずれかに混ざる→組み合わせはそのパターンの固まりの数 ・単独となる→組み合わせは1通り つまり、Nに対してN+1になる時に新たに加わるものをoで表すと ○→◎ or ○o ○○→◎○ or ○◎ or ○○o ○○○→◎○○ or ○◎○ or ○○◎ or ○○○o ○○○○→◎○○○ or ○◎○○ or ○○◎○ or ○○○◎ or ○○○○o ------------------------------------------------------------------------- これの考え方を使います。 Nに対してN+1になった時… ・いずれかに混ざる→『組み合わせ1つに対して、固まりは吸収されるので変わらない』×『固まりの数ぶん増える』 ・単独となる→『組み合わせの固まりの数に対しての固まりが1つ増える』 これらの和が『固まりの数』となりますから [固まりの数]×[固まりの数]+[固まりの数]+1 まとめると [Nが1増えた時の固まりの数]=[固まりの数]([固まりの数]+1)+1 となります。 1→3 2→7 3→13 4→21 X→Y…Y=X(X+1)+1となるわけですね。 では『固まりの数』に着目したら組み合わせのパターンはいくつになるのか?を考えます。 N=1 1 N=2 1 2 N=3 1 2 2 2 3 ここで言えるのはNの時、全てが1つの固まりとなる1が1つあり、全てがバラバラとなるNが1つあるのは確実ですよね? その間には 1<x<Nとなるxとなる組み合わせが存在しているのも確かでしょう。 この事からN=4を考えると N=4 1 2 | | 2 3 | | 3 4 となるはずですね。(質問を見ればそうなるのは明白なんですが…) というわけでN=4の時の2の場合と3の場合はそれぞれ何パターンあるかを考えてみます。 固まりが2となるものの組み合わせは 1と3に分かれた場合 2と2に分かれた場合 ですね 1と3に分かれた場合は4C1で4通り 2と2に分かれた場合は4C2…ですが逆を含んでいるので2で割って3通り 固まりが3となるものの組み合わせは 1と1と2に分かれた場合のみです 2に何が来るかが解ればいいのですから4C2の6通り N=4 1:1通り 2:(4+3)通り 3:(6)通り 4:1通り 合計:1+7+6+1=15通りでよさそうです。 これをN=3を踏まえて求めるとどうなるかを表します。 N=3は以下の5通りですね 1:ABC 2:AB C 2:AC B 2:BC A 3:A B C 固まりは1+2+2+2+3の10です。 5+10の15通りがN=4の時の答えです。 引き続きN=5を考えてみましょうか… 1 2 | | 2 3 | | 3 4 | | 4 5 固まりが2 41 32 固まりが3 311 221 固まりが4 2111 それぞれの組み合わせは… となる所ですが、上の内容から、4の時の組み合わせの固まりの数を求めれば良いのですから N=4の時固まりは… 1:1通り 2:(4+3)通り 3:(6)通り 4:1通り ですから 固まり1が1つ→1×1=1 固まり2が7つ→2×7=14 固まり3が6つ→3×6=18 固まり4が1つ→4×1=4 1+14+18+4=37と言う事になります。 N=5の時の組み合わせの数は [N=4の時の組み合わせ数]+[N=4の時の固まりの数]=15+37で52パターンとなります。 N=6の時はと言うと N=5の時の固まりを考えれば良いわけで、N=4の時の固まりからN=5の固まりを推測します。 ------------------------------------------------------------------------ ○→◎ or ○o ○○→◎○ or ○◎ or ○○o ○○○→◎○○ or ○◎○ or ○○◎ or ○○○o ○○○○→◎○○○ or ○◎○○ or ○○◎○ or ○○○◎ or ○○○○o ------------------------------------------------------------------------ これを使うわけですね。 N=4→5 固まり1が1つ→固まり1が1つ+固まり2が1つ…これらが1つできる 固まり2が7つ→固まり2が2つ+固まり3が1つ…これらが7つできる 固まり3が6つ→固まり3が3つ+固まり4が1つ…これらが6つできる 固まり4が1つ→固まり4が4つ+固まり5が1つ…これらが1つできる それぞれをまとめて 固まり1が1 固まり2が1×1+2×7=15 固まり3が1×7+3×6=25 固まり4が1×6+4×1=10 固まり5が1 5の時の固まりの合計は1×1+15×2+25×3+10×4+1×5=151 つまり52+151=203通りがN=6の時の答えとなります。 Y=X(X+1)+1を使って固まりの計算をすると以下の通り {1(1+1)+1}×1+{2(2+1)+1}×7+{3(3+1)+1}×6+{4(4+1)+1}×1 =3×1+7×7+13×6+21×1=151 52+151=203通りとなるわけです。 多分これで合っているとは思いますが…どうなんですかね?今の私の頭ではこれ以上簡単には出来ませんでした。 固まりの数Lがもう少し簡単に求められるならばスッキリするんですけどね…
その他の回答 (5)
- jmh
- ベストアンサー率23% (71/304)
そんなときは、google とかで、 "1,2,5,15,52" math などと検索してみるとよいと思います。
- 参考URL:
- http://www.google.co.jp/
お礼
ありました。 Bellという数学者の考え方とこの問題は同値みたいでした。 Googleでこんな検索も出来るんですね!!ちょっとほんとにびっくりしました。
- kony0
- ベストアンサー率36% (175/474)
きわめて実験的推測ですが・・・ #4さんの考え方に基づいてn個の場合の組み合わせの総数I(n)を導出したところ、 I(n+1)/I(n)がどうやら単調増加するようです。 ということは、指数関数よりも発散の仕方が強いと言えるのではないでしょうか? 誰か算式で解明してくれないかなぁ・・・(苦笑)
お礼
漸化式であらわすと a(i)=Σ(i-1)C(k-1)*a(i-k-1) となるみたいです。 1,2,5,15,52,203,877,4140,21147,115975,678570,4213597,27644437,190899322,1382958545,10480142147,82864869804,682076806159,5832742205057,51724158235372,474869816156751, 4506715738447323 ベルというひとの考え方とこの問題は同値ですね。 みなさん本当にありがとうございました。
補足
n=30とn=50の組合せ総数っていくつぐらいですかね? 最低でもこの2つが分かればとりあえず今のところは定式化や算式を明確に表現しなくてもいいのですが。。。
○ひとまずローカルルール アルファベッドN個の時M通りと解っているものとする。 また、1つの組み合わせをパターンと呼び パターンの中で質問の表記法で言う最大値をそのパターンのブロック数とでも呼ぶ そして、ブロック数の合計をLで示すものとする。 ※補足、Lとは質問で言う数字の最大値→1213ならば3、1111ならば1、1234ならば4…の合計値 N=2の時 AB/A B N・M・L=2・2・3 N=3の時 ABC/AB C/AC B/BC A/A B C N・M・L=3・5・10 N=4の時 ABCD/ABC D/ABD C/ACD B/BCD A/AB CD/AC BD/AD BC/AB C D/AC B D/AD B C/BC A D/BD A C/CD A B/A B C D N・M・L=4・15・37 ○証明ではなく理論武装してみましょうか… n+1の時を考える 新たに追加されたアルファベッドは各ブロックのいずれかにくっ付くか単独と言う形となる ※1213ならば、1か2か3に加わるか4となるかである。と言う事。 つまり、組み合わせのリストではなくブロックで表すと… N=2→3の時 1ブロック→2通り発生 2ブロック→3通り発生 発生した合計5がN+1つまり3つの時の組み合わせ N=3→4の時 1ブロック→2通り発生 2ブロック→3通り発生 2ブロック→3通り発生 2ブロック→3通り発生 3ブロック→4通り発生 発生した合計15がN+1つまり4つの時の組み合わせ ちなみに N=1の時は Aのみなので… N=1→2の時 1ブロック→2通り発生 と言う事でN=1からこれが使えそうですね。 次にN、M、Lを用いてN+1の時を求めるように考えましょうか。 新たな1つはどうなる? ・出来合いのブロックに付属する...(1) ・単独として存在する...(2) の2パターンですね。 (1)はNの時のLの数と解っているし、(2)はMとなる。 つまりNが1増えるとMは一つ上のMとLの合計になるわけです。 N・M・L 1・1・1 2・2・3(1+1=2) 3・5・10(2+3=5) 4・15・37(5+10=15) つまり、この後のABCDEの5つの時は52通りとなるわけですね ではLはどうやって求まるのかを考えれば良いわけです。 ブロック数はいくつ? (1)で増えたものは前回のブロックと同じである (2)で増えたものは前回のブロック+1である 各々いくつ増えるのか? (1)は増える前のブロックと同じ数ぶん増える(ブロックが3ならブロック3が3つできるわけですね) (2)は1つだけ(これは1通りしかありません) N=2→3の時 1ブロック→2通り発生→組み合わせのブロックは1と2 2ブロック→3通り発生→組み合わせのブロックは2と2と3 1+2+2+2+3=10 N=3→4の時 1ブロック→2通り発生→それぞれのブロックは1と2 2ブロック→3通り発生→それぞれのブロックは2と2と3 2ブロック→3通り発生→それぞれのブロックは2と2と3 2ブロック→3通り発生→それぞれのブロックは2と2と3 3ブロック→4通り発生→それぞれのブロックは3と3と3と4 1+2+2+2+3+2+2+3+2+2+3+3+3+3+4=37 これの一般式を作れば終わり...となるんですが、難しいですよね? とりあえず『○と○と△』を『○と○と○と1』というように分けます 『□ブロック→□+1通り発生→それぞれのブロックの和は□×(□+1)+1です。』 前回との差と考えると、前回の□を引くので『□×□+1増える』と言えそうです。 この点について簡略化すると N=2→3の時 1と2→(1×1+1)+(2×2+1)→2+5で7増える(3→10の説明) N=3→4の時 1と2と2と2と3→(1×1+1)+(2×2+1)+(2×2+1)+(2×2+1)+(3×3+1)→2+5+5+5+10で27増える(10→37の説明) アルゴリズム的にはNの時の解を出すプログラムを作れますが 一般的な数式となるとものすごい事になりそうですね… N=4→5の時 N=3→4の時の『それぞれのブロックは』の数値のみを並べれば 1,2,2,2,3,2,2,2,3,2,2,2,3,3,3,3,4です 1~4はそれぞれ(1×1+1)(2×2+1)(3×3+1)(4×4+1)になるはずなので 1,5,5,5,10,5,5,5,1,0,5,5,5,10,10,10,10,17 この合計がN=5の時のLでしょう… これを元にN=6の時のMは解りますよね? 始めは面白そうだったのですが、とりあえずここまでで許してください… もう少し簡単かつ理論的に考え直してみます…
- hinebot
- ベストアンサー率37% (1123/2963)
とりあえず4つで考えると ・すべてバラバラ(1234)が1通り。 ・要素2つの組合せがあるもの 2つ組合せる組合せ方が 4C2 = 6通り それぞれの組合せ方に対し、残り2つの要素を組合せる場合と組合せない場合があるので(例えば、(ab,c,d)と(ab,cd)のこと) 4C2+4C2 = 12通り (敢えて足し算表記します) といいたいけど、残り2つの要素を組合せたものは 例えば(ab,c,d)からできるものと(a,b,cd)からできるものが(ab,cd)で重複するので半分になる よって、最終的には4C2+(4C2)/2 = 9通り ・要素3つの組合せがあるもの 4C3 = 4C1 = 4通り ・要素4つ全て組合せたもの 1通り 合計 1+9+4+1 = 15通り となる。 一般にnに拡張した場合も同様に考えれば、定式化できそうですが、かなりややこしそうですね。 数字の方も、ちょっと法則を見つけるのに骨折れそう。 役に立ってないですね。済みません。(^^;
補足
まさしくその通りです.私もそこまでたどり着いたのですが,n=5,6でとたんに重複するものが増えて,どのようなnに関する式または値で割ればいいのか分からなくて困っています...
- kenyamanasi
- ベストアンサー率23% (134/560)
4×3×2×1=24ではないですか? 1111、1112、1113、1114、 1122、1123、1124 1222、1223、1224、 1233、1234、 2222、2223、2224、 2233、2234、 2333、2334、2344、 3333、3334、3344、3444,、4444
補足
1111と2222と3333と4444は同じです.(abcd) また1112と1113と1114も同じです.(abc,d) また,文字が連続しなければならない制約はありません.つまり,1213というようにaとcを組み合わせてbとdは組み合わせないという(ac,b,d)もOKということです.
お礼
ううん・・・ どうしてもアルゴリズムが確立できません。。。 多分しっかり理解できてないんですね。。。 しっかりよく考えてプログラミングがんばってみます。。。
補足
非常に分かりやすい回答本当にありがとうございます!!!! 最初、私は Σ(i=1~nまで){nCi×Σ{(j=1~n-jまで)n-jCj}} と定式化していましてかなりのダブルブッキングに気がつきませんでしたが、いざ総列挙し始めるとダメなことに気がつきました。 このように漸化式のようになるのですね。。。 急いでCでプログラミングしてみたいと思います。 本当にありがとうございます。