[ About | Licence | Contacts ]
Written by Oleksandr Gavenko (AKA gavenkoa), compiled on 2023-03-19 from rev c18d218b854e.

Combinatoric

Permutation

perm(n) = n!

Number of selecting m position from n places

It like a number of binary numbers length n with m ones.

So by definition:

choose(n, 0) = 1choose(n, n) = 1
choose(n,  < 0) = 0choose(n,  > n) = 0
choose(n, m) = choose(n − 1, m − 1) + choose(n − 1, m)

From this properties by induction:

choose(n, m) = n! ⁄ (n − m)! ⁄ m!

Proof:

choose(1, m) = 1 = 1! ⁄ (1 − m)! ⁄ m!, form ∈ 0, 1

Assume that we prove for n − 1, so:

choose(n, m) = choose(n − 1, m − 1) + choose(n − 1, m)
 = (n − 1)! ⁄ (n − m)! ⁄ (m − 1)! + (n − 1)! ⁄ (n − 1 − m)! ⁄ m!
 = (n − 1)! ⁄ (n − 1 − m)! ⁄ (m − 1)!·(1 ⁄ (n − m) + 1 ⁄ m)
 = (n − 1)! ⁄ (n − 1 − m)! ⁄ (m − 1)!·(m + (n − m)) ⁄ (n − m) ⁄ m = n! ⁄ (n − m)! ⁄ m!

Partitions

It like a number of numbers in n-base with 0 in m_1 positions, 1 in m_2 positions, ..., (n-1) in m_n positions.

part(m1, ..., mn) = (i ∈ 1..nmi)! ⁄ i ∈ 1..nmi!

For n = 2 it is a number of combinations:

part(m1, m2) = choose(m1 + m2, m2) = (m1 + m2)! ⁄ (m1m2!)

So:

part(m1, m2) = choose(m1 + m2, m2)
 = choose(m1 + m2 − 1, m2) + choose(m1 + m2 − 1, m2 − 1)
 = part(m1 − 1, m2) + part(m1, m2 − 1)

Generalise thinking:

part(m1, ..., mn) = part(m1 − 1, m2, ..., mn) + part(m1, m2 − 1, m3, ..., mn) + ... + part(m1, ..., mn − 1, mn − 1)

Now we can prove partition formula by induction:

part(m1, ..., mn) = i = 1..npart(..., mi − 1, mi − 1, mi + 1, ...)
 = i = 1..n(mi − 1 + j = 1..n, j ≠ imj)! ⁄ (mi − 1)! ⁄ j = 1..n, j ≠ imj!
 = i = 1..n((j = 1..nmj) − 1)! ⁄ j = 1..n(mj − 1)! ⁄ j = 1..n, j ≠ imj
 = ((j = 1..nmj) − 1)! ⁄ j = 1..n(mj − 1)!·i = 1..n1 ⁄ j = 1..n, j ≠ imj
 = ((j = 1..nmj) − 1)! ⁄ j = 1..n(mj − 1)!·i = 1..nmi ⁄ j = 1..nmj
 = ((j = 1..nmj) − 1)! ⁄ j = 1..n(mj − 1)! ⁄ j = 1..nmj·i = 1..nmi
 = ((j = 1..nmj) − 1)! ⁄ j = 1..nmji = 1..nmi
 = (j = 1..nmj)! ⁄ j = 1..nmj!