Quantcast
Channel: математика —Блог Хеллера
Viewing all articles
Browse latest Browse all 35

Сочетания, разбиения, включения-исключения

$
0
0

Давно ничего не писал, но вот выкладываю сразу аж три параграфа одним скопом. Тут материал довольно прикладной, но одновременно с тем его редко рассматривают на инженерных специальностях, поэтому, думаю, нематематикам будет интересно. Как всегда призываю читать pdf и помогать на Гитхабе.

В pdf-ке так же появился параграф про формализм, но довольно сырой, был ещё немного переработан параграф про интуицию относительно теорий. Всё это пока довольно сыро, я делал это довольно в авральном режиме для того, чтобы курс на Hexlet был более полноценен, так что праки в той части, думаю, ещё будут. Пока же просто уже затрахался править главу логики, вероятно, в дальнейшем к ней ещё вернусь, но только когда закончу третью главу (это, по идее, уже скоро: осталось порядка пяти параграфов).

Сочетания

«k-cочетание» — это просто другое название для термина «k-элементное подмножество», которое по историческим причинам (хотя многие считают, что так удобнее) принято в комбинаторике. Нас будет интересовать количество k-сочетаний взятых из множества [n].

Определение. Биномиальным коэффициентом n \choose k называется число сочетаний из [n] по k.

Вместо обозначения {n \choose k} в российской и французской литературе исторически чаще используется обозначение C^k_n, однако оно кажется мне менее удобным в случаях если вместо величин n и k используются какие-то длинные выражения. По этой причине мы будем придерживаться общемирового обозначения.

Значения {n \choose 1} = n и {n \choose n} = 1 очевидны. Так же удобно полагать, что {n \choose 0} =1 (пустое множество всего одно, соответственно есть лишь один способ его выбрать).

Упражнение. На листочке в клетку начерчен прямоугольник со сторонами m и n. Мы двигаемся из левого нижнего угла прямоугольника в правый верхний, сдвигаясь за шаг либо на одну клетку вверх, либо на одну клетку вправо. Сколько всего существует таких путей? Сведите задачу к вычислению количества сочетаний, как их считать я расскажу ниже.

Упражнение. Будем считать, что в условиях прошлой задачи m=n. Сколько существует путей из левого нижнего угла в правый верхний таких, что они не пересекают диагонали квадрата? (Подсказка: возьмите путь, пересекающий диагональ, и отразите его начало до пересечения относительно этой диагонали).

Теорема. \sum_{k=0}^n{n \choose k} = 2^n

Доказательство. В левой части этого выражения строит общее количество всех подмножеств множества [n]. В правой части на самом деле написано то же самое: 2^n есть мощность булеана, как вы видели в § 3.1.
\square

Теорема. {n \choose k} = {n \choose n-k}

Доказательство. Выбрать k элементнов из множества [n] это всё равно что выбрать n-k элементов, которые мы оставим в множестве.
\square

Теорема. {n \choose k} = {n-1 \choose k-1} + {n - 1 \choose k}

Доказательство. Рассмотрим все k-сочетания из множества [n]. Сам элемент n может либо принадлежать выбранному подмножеству, либо не принадлежать. В первом случае количество сочетаний будет равно n-1\choose k, во втором случае, поскольку один элемент сочетания уже фиксирован, это будет величина n-1\choose k - 1.
\square

Последняя теорема, как и в случае чисел Стирлинга, позволяет вычислять биномиальные коэффициенты. Однако, для сочетаний мы можем записать и явную формулу.

Определение. k-размещением мы назовём некоторый упорядоченный набор, состоящий из некоторых k элементов множества [n]. Количество размещений из n по k будем обозначать как n^{\lfloor k\rfloor}.

Теорема. n^{\lfloor k \rfloor} = \frac{n!}{(n-k)!}

Доказательство. Доказательство практически дублирует доказательство для количества перестановок. На первую позицию мы можем поставить один из n элементов. На вторую позицию один из оставшихся n-1 элементов. На третью —один из n-2 элементов. Однако в отличии от перестановок, теперь нам надо разместить лишь k элементов, а не все n, поэтому мы этот процесс оборвём на k-том шаге. В итоге получаем выражение
n^{\lfloor k \rfloor} = n (n-1)  (n-2) \ldots (n-k+1)
Если это выражение умножить и разделить на  (n-k)! , получим утверждение теоремы.
\square

Само обозначение n^{\lfloor k \rfloor} на самом деле почти всегда используется просто для обозначения произведения k подряд убывающих чисел. Эту величину часто называют убывающим факториалом. В полной аналогии вводится и возрастающий факториал:
n^{\lceil k \rceil} = n(n+1)(n+2)\ldots(n+k-1)

Упражнение. Покажите, что n^{\lfloor k \rfloor} = (n-k+1)^{\lceil k \rceil}

Теорема. {n \choose k} = \frac{n!}{k!(n-k)!}

Доказательство. k-расстановку мы можем получить, вначале выбрав k-элементное подмножество [n], а затем упорядочив его. Всего существует n\choose k способов выбрать такое подмножество. Способов упорядочить выбранное —  k! . Таким образом получаем соотношение
n^{\lfloor k \rfloor} = k!{n\choose k}
Поделив обе части на k! и подставив выражение для n^{\lfloor k \rfloor}, получаем утверждение теоремы.
\square

Упражнение. Теоремы 3.22 и 3.23 можно доказать, пользуясь явным представлением биномиального коэффициента, полученным в 3.25. Сделайте это.

Упражнение. Чему равно \sum_{k=m}^n k^{\lfloor m\rfloor} {n\choose k}

Упражнение. Докажите, что {n\choose m}{n-m\choose k} = {n\choose k}{n-k\choose m}

Упражнение. Докажите, что {n\choose k-1}{n\choose k+1} \le {n\choose k}{n\choose k}

Теорема. (x+y)^n = \sum_{k=0}^n {n \choose k} x^{n-k} y^k

Доказательство. Давайте вначале для наглядности распишем степень подробно:
(x+y)(x+y)\ldots(x+y)
Раскроем все скобки (если пока не понятно как, то потренируйтесь на каких-то частных случаях типа n=3). Раскрытие скобок можно интерпретировать так, что из каждой скобки мы выбираем либо x, либо y. Все слагаемые в полученной сумме будут иметь вид x^iy^j, i+j=n с каким-то коэффициентом, появляющимся за счёт того, что некоторые слагаемые вида x^iy^j появляются несколько раз.

Слагаемое x^n появится лишь один раз в случае, если из всех скобок мы выберем x. Слагаемое x^{n-1}y появляется, если мы выбираем x из всех скобок, кроме одной. Эту одну скобку, из которой мы выбираем y, мы можем выбрать одним из n способов. По аналогии x^{n-2}y^2 появится n\choose 2 раз, поскольку мы выбираем уже две скобки, из которых мы возьмём y. Продолжая по аналогии приходим к утверждению теоремы.
\square

Упражнение. Приведённую теорему можно доказать по индукции. Будет полезным проделать это самостоятельно.

Приведённая теорема даёт нам ещё один способ подсчитать количество подмножеств множества [n]:

\sum_{k=0}^n {n \choose k} = \sum_{k=0}^n {n \choose k}1^{n-k}1^k = (1+1)^n = 2^n

Упражнение. Докажите равенство
3^n = \sum_{k=0}^{n} 2^k {n \choose k}

Последняя задача в свете теоремы 3.26 решается элементарно, однако я замечу, что такие задачи часто даются на олимпиадах для тех школьников, которые ещё по возрасту не могут знать таких теорем. Предполагается, что школьники могут доказать утверждение по индукции (и некоторые действительно могут). Это одна из причин по которой автор ненавидит олимпиадные задачки и «задачки на логику», которые часто дают на собеседованиях — большинство таких задач изначально появляются как тривиальные следствия каких-то более общих результатов, а потом уже задним числом оказывается, что задачу в общем-то можно было бы решить и пользуясь лишь школьной математикой. Однако если сравнивать пользу от решения такой задачи по индукции с пользой от изучения общей теоремы, то последнее явно выигрывает, хотя и не помогает на собеседованиях и олимпиадах.

Сочетания часто используются так же вот в каком ключе. Предположим, мама нам сказала: «Пойди в магазин и купи n каких-нибудь пирожков». Мы приходим в магазин, а там продаётся k наименований пирожков. Сколько всего способов у нас есть удовлетворить мамин запрос? Задача в такой постановке приводит нас к понятию сочетаний с повторениями, поскольку искомые наборы могут содержать повторяющиеся элементы.

Для решения задачи предположим, что пирожки разного вида мы разложили по разным пакетам (я видел, что в ларьках у метро именно так часто и делают). Схематически мы будем разделять пакеты вертикальной чертой |, а пирожки (или, более общо, элементы множества), кружочками \circ. Для примера давайте считать, что у нас всего имеется k=5 видов пирожков, а купили мы n=6 пирожков, причем из них было два пирожка первого вида, три третьего и один четвертого. Остальных пирожков мы не покупали. На схеме это будет выглядеть как
|\circ||\circ\circ\circ|\circ||
Теперь мы можем догадаться, как подсчитать общее количество различных сочетаний с повторениями: достаточно просто подсчитать общее количество возможных схем такого вида. В схеме, приведенной выше, если отбросить крайние чёрточки |, получится n+k-1 различных позиций, на которых могут стоять чёрточки либо кружки. Причём мы точно знаем, что кружков всего будет n штук, а чёрточек k-1. Чтобы получить какую-то конкретную схему, нам надо выбрать n позиций под кружки, а остальные позиции мы занимаем чёрточками. Итого для количества сочетаний с повторениями мы имеем выражение
{n+k-1 \choose n} = {n+k-1\choose k - 1}

Упражнение. Докажите, что существует 2^{n-1} способов представить число n в виде суммы ненулевых слагаемых. Задача довольно сложная, поэтому дам некоторые наводки. Вначале следует разобрать случай, когда имеется ровно k слагаемых. Подход здесь может быть аналогичным задаче с булочками выше, но надо учитывать то, что чтобы слагаемые были ненулевыми, мы не можем поставить подряд две черты, не поставив между ними кружок. Способов сделать это n-1\choose k -1 (докажите!). Отсюда уже довольно легко выводится и результат первоначальной задачи.

Упражнение. Сколько можно получить различных слов путём перестановки букв в слове «математика»?

Разбиения множеств

Определение. Число разбиений множества [n] на множества мощностей k_1, k_2, \ldots k_m называется мультиномиальным коэффициентом и обозначается как
n \choose k_1; k_2;\ldots; k_m

В этом определении, очевидно, k_1\ldots+ k_m = n.

Теорема. {n \choose k_1; k_2;\ldots; k_m} = \frac{n!}{k_1!k_2!\ldots k_m!}

Доказательство. Выберём вначале k_1 элемент, споcобов сделать это n\choose k_1. Из оставшихся элементов теперь выберём во второе множество k_2 элементов, способов сделать это n-k_1\choose k_2. Продолжая рассуждать таким же образом, получаем
\begin{align*}
{n \choose k_1; k_2;\ldots; k_m} & = {n\choose k_1}{n-k_1\choose k_2}{n-k_1-k_2\choose k_3}\ldots{n-k_1-\ldots k_{m-1}\choose k_m} \\
&= \frac{n!}{k_1!(n-k_1)!}\cdot\frac{(n-k_1)!}{k_2!(n-k_1-k_2)!}\cdot\frac{(n-k_1-k_2)!}{k_3!(n-k_1-k_2-k_3)!}\cdot\ldots\\
&=\frac{n!}{k_1!k_2!\ldots k_m!}
\end{align*}
\square

Теорема. (x_1+x_2\ldots x_m)^n = \sum_{k_1+\ldots + k_m = n}{n\choose k_1;k_2;\ldots;k_m}x_1^{k_1}x_2^{k_2}\ldots x_m^{k_m}
Здесь суммирование ведётся по всем возможным наборам чисел \{k_i\}, дающим в сумме n.

Доказательство. Аналогично доказательству теоремы 3.26. Проведите его самостоятельно.
\square

Упражнение. Покажите, что теорема 3.26 является частным случаем для теоремы 3.29.

Упражнение. Покажите, что в теореме 3.29 будет ровно n + k - 1 \choose n слагаемых.

Определение. Числами Стирлинга второго рода \genfrac{\{}{\}}{0pt}{}{n}{k} называется количество способов разбить множество [n] на k подмножеств.

Упражнение. Выразите \genfrac{\{}{\}}{0pt}{}{n}{k} через мультиномиальные коэффициенты.

Определение. Числами Белла B(n) называется количество способов разбить множество [n] на подмножества.

Теорема. B(n) = \sum_{k=1}^n\genfrac{\{}{\}}{0pt}{}{n}{k}

Доказательство. Очевидно.
\square

Упражнение. Докажите, что \genfrac{\{}{\}}{0pt}{}{n}{2} = 2^{n-1} - 1.

Значения \genfrac{\{}{\}}{0pt}{}{n}{1} = \genfrac{\{}{\}}{0pt}{}{n}{n} = 1 настолько очевидны, что даже не заслуживают отдельного упражнения. Остальные значения, как и в случае чисел Стирлинга первого рода и количества сочетаний, могут быть вичислены рекурсивно.

Теорема. \genfrac{\{}{\}}{0pt}{}{n}{k} = \genfrac{\{}{\}}{0pt}{}{n-1}{k-1} + k\genfrac{\{}{\}}{0pt}{}{n-1}{k}

Доказательство. Рассмотрим элемент n множества [n]. При разбиении [n] на подмножества n может войти в отдельное подмножество мощности 1, либо же войти в состав более крупного подмножества. В первом случае количество таких разбиений будет \genfrac{\{}{\}}{0pt}{}{n-1}{k-1} — количество разбиений без учёта элемента n. Во втором случае мы опять же строим разбиение множества [n-1], но уже на k подмножеств. Нам остаётся лишь выбрать в какое из этих k пожмножеств добавить элемент n. Получаем k\genfrac{\{}{\}}{0pt}{}{n-1}{k}.
\square

Числа Белла так же допускают рекурсивное определние, хотя и не особо удобное.

Теорема. B(n+1) = \sum_{k=0}^n{n \choose k} B(k)

Доказательство. Пусть элемент n+1 при некотором разбиении множества [n+1] попал в множество размера k. Есть n\choose k - 1 способов выбрать это множество, оставшиеся элементы можно разбить на подмножества B(n+1-k) способами. Поскольку k может быть произвольным от 1 до n+1, получаем
\begin{align*}
B(n+1) & = \sum_{k=1}^{n+1}{n\choose k-1}B(n+1-k)\\
& = \sum_{k=1}^{n+1}{n\choose n-k+1}B(n-k+1) \\
& = \sum_{k=0}^{n}{n\choose k}B(k)
\end{align*}
\square

Чтобы эта формула работала, нужно положить B(0) = 1 (чтобы увидеть это, примените 3.32 к значению B(1)), что соответствует интуиции: существует лишь одно разбиение пустого множества на подмножества, которое само является пустым множеством.

Упражнение. Докажите, что для n>2 выполняется оценка
n! < \genfrac{\{}{\}}{0pt}{}{2n}{n} < (2n)!
Вероятно вначале будет целесообразно, пользуясь 3.31, доказать, что B(n) < n! при n>3.

Включения-исключения

Вот задачка, которая как-то попалась мне в младшем возрасте на олимпиаде по математике, а затем многократно попадалась в разных книжках с занимательными примерами по математике.

Есть класс, в котором известно, что все ученики ходят в какие-то секции. Известно, что 12 учеников ходят на плавание (и, возможно на что-то ещё), 13 на карате, 12 на шахматы, 6 одновременно на плавание и на карате, 6 на карате и шахматы, 2 на шахматы и плавание и 2 ходят во все три секции. Сколько всего учится детей в классе?

Мы не будем решать эту задачу, а сразу перейдём к общему случаю. Пусть у нас есть семейство множеств \{A_i\}, нам известны мощности каждого из них, а так же мощности любых их пересечений. Необходимо найти мощность объединения этих множеств.

Напомню, что в § 3.1 мы ввели понятие характеристической функции \chi_A(x). Эта функция принимает значение 0, если x\not\in A и 1, если x\in A. Нам потребуются дополнительные факты о ней:

Теорема.

  1. Пусть A\subset U, тогда |A| = \sum_{x\in U} \chi_A(x)
  2. \item \chi_{A^C}(x) = 1 - \chi_A(x)
  3. \item \chi_{A\cap B}(x) = \chi_A(x)\chi_B(x)

Доказательство. В качестве упражнения.
\square

Теорема. \left|\bigcup_{i=1}^n A_i \right|= \sum_{i=1}^n|A_i| - \sum_{i<j}|A_i\cap A_j| + \sum_{i<j<k}|A_i\cap A_j\cap A_k| -\ldots
Здесь суммирование справа ведётся по всем таким наборам (i, j) таким, что i<j, затем по наборам (i,j,k), таким что i<j<k и так далее.

Доказательство. Утверждение на самом деле следует непосредственно из теоремы 3.32. В выкладках ниже я не указываю пределы суммирования, т.к. они и так очевидны:
\begin{align*}
\chi_{\cup A_i}(x) &= \chi_{(\cup A_i)^{CC}}(x) \\
&= 1 - \chi_{(\cup A_i)^C}(x) \\
&= 1 - \chi_{\cap A_i^C}(x) \\
&= 1 - \prod \chi_{\cap A_i^C}(x) \\
&= 1 - \prod (1 - \chi_{A_i}(x)) \\
&= \sum_{i=1}^n\chi_{A_i}(x) - \sum_{i &= \sum_{i=1}^n\chi_{A_i}(x) - \sum_{i \end{align*}
В предпоследней строке мы просто раскрыли скобки. Применяя к полученному пункт 1 теоремы 3.32, получаем утверждение теоремы.
\square

Теорема легко выводится, но пока, вероятно, не очень понятна по смыслу. Давайте посмотрим на случаи нескольких множеств. Пусть нам надо подсчитать |A\cup B|. Мы могли бы просто сложить их мощности |A| + |B|, однако в этом случае получится, что часть A\cap B будет учтена в этом выражении дважды — один раз от |A| и один раз от |B|, значит из полученного нам надо вычесть |A\cap B|, в результате чего получаем

\begin{equation}\label{nii:1}
|A\cup B| = |A| + |B| - |A\cap B|
\end{equation}

Можно было бы увидеть это и по-другому. Множества X = A\backslash B, Y = A\cap B и Z = B\backslash A непересекаются, причём A = X\cup Y, B = Y\cup Z, A\cup B = X\cup Y \cup Z. Т.к. X, Y и Z непересекаются, мы можем записать
|A\cup B| = |X\cup Y\cup Z| = |X| + |Y| + |Z|
Но поскольку |A| = |X| + |Y|, |B| = |Y| + |Z| и |A\cap B| = |Y|, мы опять получаем \eqref{nii:1}.

Перейдём к случаю трёх множеств. Опять же простая сумма |A|+|B|+|C| будет дважды учитывать попарные пересечения множеств и трижды — тройное пересечение A\cap B\cap C. Чтобы исправить ситуацию, нам надо вычесть все попарные пересечения, однако этого тоже недостаточно — вычтя три попарных пересечения мы в том числе три раза вычтем тройное пересечение, а это значит, что оно теперь остаётся вообще неучтено. Его надо прибавить. Получаем

|A\cup B \cup C| = |A| + |B| + |C| - |A\cap B| - |A\cap C| - |B\cap C| + |A\cap B \cap C|

Собственно утверждение теоремы 3.33 можно было бы получить и по индукции, рассуждая таким образом, однако такой путь явно сложнее.

Для пересечения множеств можно получить результат, аналогичный 3.33.

Теорема. Пусть A_i \subset U, тогда
\left|\bigcap_{i=1}^nA_i\right| = |U| - \sum_{i=1}^n|A_i^C| + \sum_{i<j}|A_i^C\cap A_j^C| - \ldots

Доказательство. Утверждение следует непосредственно из тождества
|\cap A_i| = |(\cap A_i)^{CC}| = |U| - |\cup A_i^C|
Применяя теперь теорему 3.33 получаем желаемый результат.
\square

Помимо простых задачек для школьников, конечно же, это всё имеет применения и к чистой математике. Давайте приведём примеры.

Определение. Функцией Эйлера \phi(n) называется количество чисел, меньших n и взаимопростых с ним (исключая ноль, включая единицу).

Теорема. Пусть n=\prod_{i=1}^m p_i^{\alpha_i} — разложение n на простые множители. Тогда
\phi(n) = n - \sum_{i=1}^m\frac{n}{p_i} + \sum_{i<j}\frac{n}{p_ip_j} - \sum_{i<j<k}\frac{n}{p_ip_jp_k} + \ldots

Доказательство. Будем рассматривать в качестве универсума (то есть множества, относительно которого мы берём дополнения) множество чисел от 1 до n-1. Определим B_i как множество чисел, делящихся на p_i и меньших n. Его дополнение B_i^C — это в точности числа, меньшие n, которые не делятся на p_i. Соответственно числа, взаимопростые с n — это пересечение \cap B_i^C, то есть это все числа, которые не делятся ни на один из делителей числа n. Заметим, что |B_i| = \frac{n}{p_i}. Так же в силу того, что все \{p_i\} взаимопросты, |B_i\cap B_j| = \frac{n}{p_ip_j} (в это пересечение попадают только числа, кратные p_ip_j). Аналогичные утверждения можно получить для любых пересечений множеств \{B_i\}. Отсюда сразу же по теореме 3.34 вытекает требуемое утверждение.
\square

Упражнение. Беспорядком называется такая перестановка, которая не оставляет на месте ни один элемент множества, то есть такая, что \rho(x)\not=x. Сколько беспорядков возможно задать на множестве [n]?

Теорема. Существует в точности
k^n - {k \choose 1}(k-1)^n + {k\choose 2}(k-2)^n -\ldots
сюръекций вида [n]\to[k] (напомню, что это функции f такие, что для каждого y\in[k] существует x такой что f(x) = y).

Доказательство. Пусть множество B_i — это множество таких отображений f:[n]\to[k], что прообраз элемента i не пуст (то есть существует такое x, что f(x) = i). Множество сюръекций — это в точности множество \cap B_i. Чтобы применить теорему 3.34 нам необходимо найти мощность всех возможных пересечений множеств семейства \{B_i^C\}. Однако, это легко: если I\subset [n], то
\left|\bigcap_{i\in I} B_i^C\right| = (k-|I|)^n
поскольку это в точности множество отображений [n]\to([k]\backslash I). Причём это выражение зависит только от количества множеств в пересечении |I|, а не от самих множеств, которые пересекаются. Отсюда получаем, что для каждого m = |I| мы будем иметь k\choose m слагаемых (k-m)^n.
\square

Упражнение. Предположим, что компьютер запрограммирован выполнить n_i задач типа i, всего есть m типов задач. Компьютер выполняет задачи последовательно, но ему надо так распланировать свою работу, чтобы все задачи одного вида не выполнялись подряд, он обязательно должен задачи чредовать (то есть он не может выполнить подряд n_i задач типа i). Сколько всего способов существует для компьютера распланировать свою работу?


Viewing all articles
Browse latest Browse all 35

Trending Articles