• 締切済み

組み合わせ(nCkに関して)

nCkをプログラムで求めるのに、 n-1Ck-1 + n-1Ck (0<k<nの時) で求めることができるらしいのですが、 この性質がいまいち、良く分からないんです。 どうか、少し詳しく教えてください。 私は大学生なのでそれくらいのレベルでお願いします。

みんなの回答

  • guiter
  • ベストアンサー率51% (86/168)
回答No.6

言葉の説明だと、No3 の yacob さんのようになると思います。 いきなり  nCk = n-1Ck-1 + n-1Ck と書くよりも  nCk = (n-1Ck-1)*(1C1) + (n-1Ck)*(1C0) と書いたほうが意味をつかみやすいかもしれませんね。

  • aton
  • ベストアンサー率47% (160/334)
回答No.5

 なぜ nCk = n-1Ck-1 + n-1Ck となるかについては他の方が書かれているので,私はプログラムについて書きます。  以下,C-likeな擬似プログラムで記述します。 long combination(int n, int k) という関数を考えます。実際の処理はこんなふうに記述されます。(適当に書いてるのであんまりきれいなコードではありません。悪しからず) int combination(int n, int k) {  if (n < k) {   /// エラー   return -1;  } else if (n == k) {   return 1;  } else {   if (k = 1) {    return n;   } else { /// 1 < k < n    /// ここで nCk = n-1Ck-1 + n-1Ck を利用    return (combination(n-1, k-1) + combination(n-1, k));   }  } }  このように,一つの combination(n,k) を,combination(n-1, k-1) + combination(n-1, k) のように,より引数の小さい2つのcombination関数の結果の和として表すことで,プログラムがコンパクトかつわかりやすくなります。  なお,たしか nCk = nCn-k だったはずなので,これを利用してやればcombination関数の処理はより高速になるはずです。

ma-kunn
質問者

お礼

ご返答ありがとうです。 わざわざプログラムまで書いてもらって、、 それで、この内容をみると、どんどん枝状に 別れていって、最終的に"1"を足しているようですが 何故このようになるのでしょうか? どなたか教えてもらえませんか?

  • pei-pei
  • ベストアンサー率23% (20/86)
回答No.4

こういうことでしょうか? 仮にn=8,k=5としてみます。 8個の個体をa,b,c,d,e,f,g,hとして、8C5を考えてみます。 aを選ぶ場合と、選ばない場合に分けて考えてみると、 まずaを選ぶ場合は、残りのb~hから4個を選ぶことになるので、7C4です。 aを選ばない場合は、残りのb~hから5個を選ぶので、7C5です。 従って、8C5=7C4+7C5 となります。 はたして、答になっているでしょうか?

  • yacob
  • ベストアンサー率40% (25/62)
回答No.3

No.2で数式による説明がすでになされていますが、言葉で説明すると次のようになります。 n個の中の特定の1個を含むk個の組み合わせは、特定の1個を除いたn-1個からk-1個を選ぶ組み合わせになりますから、その数は、n-1Ck-1 となります。 次に、先に選んだ特定の1個を含まない組み合わせは、n-1個の中からk個を選ぶことになりますから、その数は、n-1Ck となります。 この2つの場合が、n個のうちからk個を選んだ組み合わせのすべてですから、この2つを足したものが、nCk となります。 つまり nCk=n-1Ck-1+n-1Ck となります。 以上がご質問の趣旨に合っているかどうか、わかりませんが、もし違っていたら、お許しください。

ma-kunn
質問者

お礼

ありがとう御座います。 私が聞きたかった意味がまさにこれです。 あとは、プログラムの内容を理解するだけです。 感謝してます。

  • rei00
  • ベストアンサー率50% (1133/2260)
回答No.2

  > この性質がいまいち、良く分からないんです。 > どうか、少し詳しく教えてください。  性質とおっしゃるのが何を指しているかが判らないので,的外れな回答かも知れませんが,nCk = n-1Ck-1 + n-1Ck は簡単に証明できます。  nCk = n!/k!(n-k)! はご存知ですよね。この関係を使えば,  n-1Ck-1 + n-1Ck = (n-1)!/(k-1)!(n-k)! + (n-1)!/k!(n-k-1)!  ここで通分するために,第1項の分母分子に k を,第2項の分母分子に (n-k) をそれぞれ掛けると,  n-1Ck-1 + n-1Ck = (n-1)!/(k-1)!(n-k)! + (n-1)!/k!(n-k-1)!          = (n-1)!k/k!(n-k)! + (n-1)!(n-k)/k!(n-k)!          = (n-1)!(k+n-k)/k!(n-k)!          = n!/k!(n-k)!          = nCk  いかがでしょうか。ご質問の意図が,何故この式が出てくるのかにある様でしたら,専門家にお任せします。  

ma-kunn
質問者

補足

スイマセンm(_ _)m 説明不足で、、 つまりですね、どうしていきなり nCk = n-1Ck-1 + n-1Ck の形がでてくるというか、、どうだからこの形になっているというか 上手く伝えられなくて、くやしいんですが、、、

  • zerosix
  • ベストアンサー率31% (47/149)
回答No.1

>この性質がいまいち、良く分からないんです。 プログラムについててではないということですよね? 大学生ということで、馬鹿にするなと言われるかもしれませんが、 私はイメージがつかない場合、具体的な数を入れて考えます。 n=8,k=5としてみて、具体的に考えてみてはどうでしょう? 他にも具体的な数を代入してみると、意味が分かるのではないですか? ちょっと昔のことなので、計算していませんが、 nCk=n-1Ck-1 + n-1Ck (0<k<nの時) を証明することって、右辺をがりがり計算すればできませんかね? 某大学の数学科卒なので、経験者とさせていただきます。

関連するQ&A

  • 組み合わせの公式

    k ・nCk = n ・n-1Ck-1 という公式が何故こうなるのかわかりません。日本語でわかりやすく説明していただけないでしょうか。よろしくお願いします。

  • 高校数学の数列の和の計算 4-7再質問

    高校数学の数列の和の計算 4-7 次の和を計算せよ (1)Σ[k=1→n]k・nCk (2)Σ[k=1→n]k^2・nCk 解説は(1)はK・nCk=n・n-1Ck-1となっていてこの式の意味が 左辺の意味ですがn人からk人を選んでそのk人から一人のリーダーを選ぶ場合の数で右辺はリーダーを一人決めて、残りのn-1人からk-1人を選ぶという事ですか?良く分かりません (2)は(1)のK・nCk=n・n-1Ck-1を使って Σ[k=1→n]k^2・nCk=nΣ[k=1→n]k・n-1Ck-1(1)                                                =nΣ[k=1→n]{(k-1)・n-1Ck-1}+n-1Ck-1}(2)                      =n[Σ[k=2→n]{(k-1)・n-1Ck-1}+Σ[k=1→n]n-1Ck-1](3)                      =n[(n-1)Σ[k=2→n]{(n-2)・n-1Ck-2}+Σ[k=1→n]n-1Ck-1](4)                      =n(n-1)・2^(n-2)+n・2^(n-1)(5)                      =n(n+1)・2^(n-2)(6) とあるのですが(3)から(4)の変形をどうやったのか分かりません

  • 高校数学の数列の和の計算 4-7

    次の和を計算せよ (1)Σ[k=1→n]k・nCk (2)Σ[k=1→n]k^2・nCk 解説はK・nCk=n・n-1Ck-1となっていてこの式の意味が左辺がn人からk人を選び、そのk人から1人のリーダーを選ぶという場合の数で右辺はn人から1人のリーダーを選んでからk人の組をつくるという場合の数で一致するとあるのですが、左辺は分かりますが右辺の意味ですが1人のリーダを選んだ後n-1任からk組作るのだったらn・n-1Ckじゃないんですか? (2)は(1)のK・nCk=n・n-1Ck-1を使って Σ[k=1→n]k^2・nCk=nΣ[k=1→n]k・n-1Ck-1(1)                                                =nΣ[k=1→n]{(k-1)・n-1Ck-1}+n-1Ck-1}(2) =n[Σ[k=2→n]{(k-1)・n-1Ck-1}+Σ[k=1→n]n-1Ck-1](3) =n[(n-1)Σ[k=2→n]{(n-2)・n-1Ck-2}+Σ[k=1→n]n-1Ck-1](4) =n(n-1)・2^(n-2)+n・2^(n-1)(5) =n(n+1)・2^(n-2)(6)とあるのですが(1)から(2)、(2)から(3)、(3)から(4)の変形をどうやったのか分かりません

  • C言語での組み合わせの問題について

    (環境はmacで, gcc 4.0.1を用いています) #include <stdio.h> main(void) { int n, k, nck; printf("n = "); scanf("%d", &n); printf(" k nCk\n"); k = 0; nck = 1; printf("%12d%12d\n", k, nck); for(k=1; k <= n; k++) { nck = nck * (n-k+1)/k; printf("%12d%12d\n", k, nck); } } とした場合, 入力した値n=29までは正しい答えが得られるのですが n=30以降では途中から答えが狂い始めます. この現象はなぜ起こるのでしょうか?

  • 組み合わせの計算

    Σ[k=1,n-1]nCk=(2^(n)-2)となるのはなぜでしょうか?? なぜ2^nがでてくるのでしょうか?? 教えてください。

  • Σの中の組み合わせ

    Σがk=1からnまでのとき Σ(nCk)*2^(k-1)=(3^n-1)/2となることの説明をお願いします。

  • 二項定理の証明問題

    この問題でどうしてこの式で証明が成り立つのか分かりません。 解説を宜しくお願いします。 KnCk=Nn-1Ck-1(K=1,2,・・・・・・・・,N)が成り立つことを証明せよ。 ※nCk と n-1Ck-1 は組合せです。 ・は掛け算です。 問題のK・n!/K!(n-k)!=n・(n-1)!/(k-1)!{(n-1)-(k-1)}!=Nn-1Ck-1 とても見にくい文章で申し訳ありません;;

  • nCk=(n-1)C(k-1)+(n-1)Ck証明

    nCk=(n-1)C(k-1)+(n-1)Ck の証明問題なのですが、やり方が全くわかりません。 nCk (n-1)C(k-1) (n-1)Ck を全部書きだして、通分して足しても何もなりませんでした…… すいませんが、ご存じの方がいらっしゃいましたらご教授ください。 よろしくお願いします。

  • 組み合わせの問題です

    組み合わせの問題です。正の整数nと整数K(0≦k≦n)に対してnCkは正の整数である事実を使って良い。 pを2以上の素数とする。このとき、任意の正の整数nに対し、(n+1)^p‐n^p ‐1はpで割り切れることを示せ です。 わからないのでどなかた教えてください。よろしくお願いします。

  • 再帰・組み合わせ

    新しく再帰という概念を習い始めたのですが、組み合わせを求めるやり方がわかりません 組み合わせの公式通り(nCk → n!/k!(n-k)!)、例えば4C2なら答えは6通りになるのはわかるのですが、 public static int combinations(int n, int k){ if(k==n){ return 1; }else if(k=1){ return n; }else if(0<k && k<n){ combinations(n-1, k-1) + combinations(n-1, k) ←これで出来るらしいのです } } combinations(n-1, k-1)は意味がわかるのですが、combinations(n-1, k)これが組み合わせの公式にどうあてはまっているのかがわからず、 そして何故足してるのかがよくわかりません。どなたかお解かりになればお願いします

    • ベストアンサー
    • Java