combinatoric.rst
author Oleksandr Gavenko <gavenkoa@gmail.com>
Wed, 09 Mar 2016 21:23:23 +0200
changeset 0 328995b5b8fd
permissions -rw-r--r--
init stat project
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
     1
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
     2
==============
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
     3
 Combinatoric
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
     4
==============
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
     5
.. contents::
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
     6
   :local:
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
     7
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
     8
Permutation
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
     9
===========
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    10
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    11
.. math:: perm(n) = n!
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    12
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    13
Number of selecting m position from n places
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    14
============================================
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    15
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    16
It like a number of binary numbers length :math:`n` with :math:`m` ones.
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    17
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    18
So by definition:
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    19
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    20
.. math::
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    21
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    22
  choose(n, 0) = 1
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    23
  choose(n, n) = 1
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    24
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    25
  choose(n, <0) = 0
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    26
  choose(n, >n) = 0
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    27
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    28
  choose(n, m) = choose(n-1, m-1) + choose(n-1, m)
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    29
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    30
From this properties by induction:
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    31
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    32
.. math:: choose(n, m) = n! / (n-m)! / m!
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    33
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    34
Proof:
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    35
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    36
.. math:: choose(1, m) = 1 = 1!/(1-m)!/m!, for m∈{0,1}
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    37
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    38
Assume that we prove for :math:`n-1`, so:
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    39
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    40
.. math::
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    41
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    42
   choose(n, m) = choose(n-1, m-1) + choose(n-1, m)
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    43
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    44
   = (n-1)!/(n-m)!/(m-1)! + (n-1)!/(n-1-m)!/m!
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    45
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    46
   = (n-1)!/(n-1-m)!/(m-1)!·(1/(n-m) + 1/m)
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    47
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    48
   = (n-1)!/(n-1-m)!/(m-1)!·(m+(n-m))/(n-m)/m = n!/(n-m)!/m!
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    49
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    50
Partitions
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    51
==========
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    52
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    53
It like a number of numbers in n-base with 0 in m_1 positions, 1 in m_2
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    54
positions, ..., (n-1) in m_n positions.
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    55
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    56
.. math:: part(m_1, ..., m_n) = (∑_{i∈1..n} m_i)! / ∏_{i∈1..n} m_i!
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    57
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    58
For :math:`n=2` it is a number of combinations:
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    59
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    60
.. math:: part(m_1, m_2) = choose(m_1+m_2, m_2) = (m_1+m_2)! / (m_1!·m_2!)
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    61
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    62
So:
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    63
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    64
.. math::
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    65
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    66
   part(m_1, m_2) = choose(m_1+m_2, m_2)
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    67
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    68
   = choose(m_1+m_2 - 1, m_2) + choose(m_1+m_2 - 1, m_2 - 1)
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    69
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    70
   = part(m_1 - 1, m_2) + part(m_1, m_2 - 1)
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    71
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    72
Generalise thinking:
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    73
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    74
.. math::
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    75
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    76
   part(m_1, ..., m_n) = part(m_1 - 1, m_2, ..., m_n) + part(m_1, m_2 - 1, m_3, ..., m_n) + ... + part(m_1, ..., m_{n-1}, m_n - 1)
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    77
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    78
Now we can prove partition formula by induction:
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    79
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    80
.. math::
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    81
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    82
   part(m_1, ..., m_n) = ∑_{i=1..n} part(..., m_{i-1}, m_i - 1, m_{i+1}, ...)
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    83
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    84
   = ∑_{i=1..n} (m_i - 1 + ∑_{j=1..n, j≠i} m_j)! / (m_i - 1)! / ∏_{j=1..n, j≠i} m_j!
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    85
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    86
   = ∑_{i=1..n} ((∑_{j=1..n} m_j) - 1)! / ∏_{j=1..n} (m_j - 1)! / ∏_{j=1..n,j≠i} m_j
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    87
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    88
   = ((∑_{j=1..n} m_j) - 1)! / ∏_{j=1..n} (m_j - 1)! · ∑_{i=1..n} 1 / ∏_{j=1..n,j≠i} m_j
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    89
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    90
   = ((∑_{j=1..n} m_j) - 1)! / ∏_{j=1..n} (m_j - 1)! · ∑_{i=1..n} m_i / ∏_{j=1..n} m_j
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    91
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    92
   = ((∑_{j=1..n} m_j) - 1)! / ∏_{j=1..n} (m_j - 1)! / ∏_{j=1..n} m_j · ∑_{i=1..n} m_i
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    93
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    94
   = ((∑_{j=1..n} m_j) - 1)! / ∏_{j=1..n} m_j! · ∑_{i=1..n} m_i
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    95
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    96
   = (∑_{j=1..n} m_j)! / ∏_{j=1..n} m_j!
328995b5b8fd init stat project
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    97