@t_j_

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

【アルゴ式数学】場合の数、重複組み合わせ

アルゴ式の「N個の整数(1)」という問題が解けず、順に解説を見ていっているが、理解がおいつきません。
解答の最後に

これは グループ分け (3) の設定の $N,M$ を入れ替えたものなので

とあるので、「グループ分け(3)」という問題から記載していきます。


グループ分け(3)

問題文

カメのアルルの手元には $N$ 個のボールと $M$ 個の箱があります。 各ボールは区別ができませんが、各箱には $0$ ~ $M−1$ までの数字が書かれており区別できます。

全てのボールを箱に入れるとき、入れ方が全部で何パターン考えられるか計算するプログラムを作成してください。 ただし、どの箱にも $1$ 個以上のボールを入れる必要があるものとします。

これはまだ分かります。
前提として、箱よりボールの数が少ない場合、どう頑張ってもボールが入らない箱が生まれます。

以下、そうでない場合を考えます。
$N = 5, M = 4$ とすると、箱$4$個、ボール$5$個。

箱:□、ボール:⚪︎で表現するとします。
一旦全ての箱にボールを一つ入れると、ボールが1つ余ります。

[!NOTE]
□□□□
↑ ↑ ↑ ↑
⚪︎⚪︎⚪︎⚪︎  ⚪︎<余りです

あとは4つの箱のうち好きなものを選べばいいので、${}_4 C_1$ でよいです。
一般化して$N, M$を用いて表せば、下記の通りとなります。

Qiita_draft_20250528_02.png

コードでは下記の通り。

import math
def combinations(n, r):
"""nCrを計算する関数"""
return math.factorial(n) // (math.factorial(r) * math.factorial(n - r))

N, M = map(int, input().split())
ans = combinations(N-1, N-M) if N >= M else 0
print(ans)

N個の整数(1)

問題文

次の条件を満たす $N$ 個の自然数の組 $(A_{0}​,A_{1}​,…,A_{N−1}​)$ の個数を求めるプログラムを作成してください。
$$\displaystyle\sum_{i=0}^{N−1}​A_i​=M$$

本題です。
とっかかりから分からなかったため、私は大人しく解説を読みました。
解説はこの通り語っていました。

以下解説を引用します。私のリアクションと共にどうぞ。

一見すると手がかりのない問題に見えますが、条件をわかりやすいものに言い換えてみましょう。

私:せやな、頼むわ。

$N$ 個の整数を箱に例え、割り当てられる数の総和 $M$ をボールの個数に例えると、与えられた条件は次のように言い換えられます。

  • $N$ 個の箱にはそれぞれ 1 つ以上のボールが入る。
  • $N$ 個の箱に入っているボールの総和は $M$ 個である。

私:う、うん?

これは グループ分け (3) の設定の $N,M$ を入れ替えたものなので

私:そんなわけなくない?

というわけで、この問題は例えたあたりからついていけなくなった形です。どういうこっちゃ…。
回答としては文字通り、 グループ分け (3) の設定の $N,M$ を入れ替え ればいいので、下記の計算式を表現すれば良いとのことでした。

Qiita_draft_20250528_02.png

なんなら式変形もわからんねぇ。

以上、私の突っかかりについて、どなたか解説いただいてもよろしいでしょうか。
ついでにLaTeXでCombinationの式の書き方も教えてくださると幸いです。
{}{M-1} C{N-1} じゃダメなんですかね。

0 likes

3Answer

言い換えた内容から逆に辿って元の問題文に戻れるか考えるといいのでは。

  • $N$ 個の箱にはそれぞれ 1 つ以上のボールが入る。

$N$ 個の箱に0から $N-1$ まで番号を振り、 $i$ 番の箱に入っているボールの個数を $A_i$ とします。箱にボールをグループ分けするパターンを、 $A_i$ を順に並べた $N$ 個の自然数の組で表してみます。

↓箱0番のボールの個数 A_0 = 3

○  ○
○○…○
□□…□←箱N-1番
↑箱0番

↑のパターンは $(A_0, A_1, ..., A_{N-1}) = (3, 1, ..., 2)$

1つのパターンに自然数の組1つが対応するので、グループ分けのパターン数=自然数の組の数です。

  • $N$ 個の箱に入っているボールの総和は $M$ 個である。

これは $ \sum\limits_{i=0}^{N-1} A_i = M $ と言い換えられます。

よって、上記のグループ分けのパターン数を求めることは $ \sum\limits_{i=0}^{N-1} A_i = M $ を満たす $N$ 個の自然数の組の数を求めることと一致します。


Combination を普通に書くとアンダースコアが先に Markdown 記法として解釈されてしまうので、 \ でエスケープします。 $ \_{M}C\_{N} $ → $ _{M}C_{N} $

0Like

Comments

  1. @t_j_

    Questioner

    ご丁寧な返信ありがとうございます。

    なるほど、逆に辿っていくと綺麗に理解できますね。
    丁寧に記載いただき、非常にスッキリできました。

    Combinationの記法についてもありがとうございます、助かりました!

解こうとしている問題、「N個の整数」(整数とありますが問題を読むと自然数(大きな違い!)) の考えかたが、ボールの問題と同じである理由ですね。

まず、ボールの問題を忘れて解いてみます。

N個の自然数列の総和がMになるわけですが、自然数なので全て1以上です。
MがNより1大きい場合を考えます。Nこ全てを1とすると、総和がMより1小さくなりますので、この場合はNこのうちどれか1つを2にしたものが答えの数列になります。この場合の場合の数は、Nこのうち1つを選ぶ場合の数になります。
MがNより2大きい場合はどうでしょうか。同様に考えると、「どれか1つが3になる」か、「いずれか2つが2になる」の2つのパターンになります。場合の数は、Nこのうち1つを選ぶ場合の数とNこのうち2つを選ぶ場合の数の和になります。

ここまで書けばおわかりでしょうか。 この手順はボールの問題の解きかたと同じです。

0Like

Comments

  1. @t_j_

    Questioner

    丁寧なご返信ありがとうございます。

    おっしゃる通り、タイトルは「整数」ですが問題文は自然数ですね。危ない危ない…。

    なるほど、できるだけ小さくしてから考える形ですね。
    確かにボールの問題の解き方のM,Nを入れ替えたものと同じになりました。

    お恥ずかしながら、最近数学の勉強を再開したものでして、この基本的な考え方を失念していました。
    基本に立ち返って再度臨みます、改めてありがとうございました。

ボールの問題と同じように考えてみましょう。

\displaystyle \sum_{ i = 0 }^{ N - 1 } A_i = M

この式で$A_i$は自然数(1以上の整数)なので左辺の合計値の最小値は、$A_i$が全て$1$の場合で$N$になります。
$M$がこれより小さい場合はそもそも考えられないので、$N \leq M$は自明です。

では$N=4$,$M=5$で考えてみましょう。
日本語で表現すると「4つの自然数を足し合わせた結果が5になる組み合わせの数を答えろ」という問題ですね。
左辺をΣのままにしているとイメージが湧かないと思いますので、下記のように書き換えます。

A_0 + A_1 + A_2 + A_3 = 5 \quad (A_i \geq 1)

この組み合わせは、下記の4通りになります。

(A_0, A_1, A_2, A_3) = (1, 1, 1, 2) or (1, 1, 2, 1) or (1, 2, 1, 1) or (2, 1, 1, 1)

これを組み合わせの数で表すと、$_4C_1$ になりますね。
そう。ボールのときと$N$と$M$が入れ替わっただけです。
「$N$個ある$A_i$(箱)全部に$1$以上の数(箱に入れるボールの数)を入れて、合計で$M$(ボールの総数)にしろ」って問題なんですよ。


一般化について分かりやすくするために、$N=3$,$M=5$でもやってみましょう。

A_0+A_1+A_2=5  \quad (A_i \geq 1)

だとすると下記のようになります。

\begin{align}
(A_0, A_1, A_2) = & (1,1,3) or (1,3,1) or (3,1,1) \\
& or (1,2,2) or (2,1,2) or (2,2,1)
\end{align}

これは重複組合せの問題になります。
「$A_0$,$A_1$,$A_2$の3個のうち、ボールを入れる箱を重複を許して2個選ぶ」ということです。
例えば $(1,1,3)$ の組合せは、$A_2$を2回選んでいるわけです。
$(2,2,1)$なら$A_0$と$A_1$を1回ずつ選んでいることになりますね。
この組合せの数は$ _nH_r $を使って表現すれば、$ _3H_2 $です。
$ _nH_r = _{n+r-1}C_r $ですので、$ _nC_r $に直すと下記のようになります。

_3H_2 = _{3+2-1}C_2 = _4C_2 = \frac{4 \times 3}{2} = 6

一般化するとこの重複組合せで表現することになります。
一般化したこの問題は、「$N$個の箱から、重複を許して余ったボールの個数分($M-N$個)選ぶ」ということです。
重複組合せの式で表現すると $ _{N}H_{M-N} $ となります。
これを$ _nC_r $に直すと

_{N}H_{M-N} = _{N + M - N - 1}C_{M-N} = _{M-1}C_{M-N}

という形で一般化できるわけです。

ちなみに $ _{M-1}C_{M-N} = _{M-1}C_{N-1} $ の変形は、「4個中1個選ぶのと4個中3個選ぶのは一緒だ」ってだけです。
$ (M-1) - (M-N) = (N-1) $ですからね。

0Like

Your answer might help someone💌