Перейти до основного вмісту

Підрахунок позначених графів

Позначені графи​

Нехай кількість вершин у графі дорівнює nn. Нам потрібно обчислити кількість GnG_n позначених графів з nn вершинами (позначений означає, що вершини пронумеровані числами від 11 до nn). Ребра графів вважаються неорієнтованими, а петлі та кратні ребра заборонені.

Розглянемо множину всіх можливих ребер графа. Для кожного ребра (i,j)(i, j) ми можемо вважати, що i<ji < j (бо граф неорієнтований і немає петель). Тому множина всіх ребер має потужність (n2)\binom{n}{2}, тобто n(n−1)2\frac{n(n-1)}{2}.

Оскільки будь-який позначений граф однозначно визначається своїми ребрами, кількість позначених графів з nn вершинами дорівнює:

Gn=2n(n−1)2G_n = 2^{\frac{n(n-1)}{2}}

Зв'язні позначені графи​

Тут ми додатково накладаємо обмеження, що граф має бути зв'язним.

Позначимо шукану кількість зв'язних графів з nn вершинами як CnC_n.

Спочатку обговоримо, скільки існує незв'язних графів. Тоді кількість зв'язних графів дорівнюватиме GnG_n мінус кількість незв'язних графів. Більше того, ми порахуємо кількість незв'язних графів із коренем. Граф із коренем — це граф, у якому ми виділяємо одну вершину, позначаючи її як корінь. Очевидно, що у нас є nn можливостей обрати корінь графа з nn позначеними вершинами, тому наприкінці нам потрібно буде поділити кількість незв'язних графів із коренем на nn, щоб отримати кількість незв'язних графів.

Коренева вершина опиниться в компоненті зв'язності розміру 1,…n−11, \dots n-1. Існує k(nk)CkGn−kk \binom{n}{k} C_k G_{n-k} графів таких, що коренева вершина перебуває в компоненті зв'язності з kk вершинами (є (nk)\binom{n}{k} способів обрати kk вершин для компоненти, вони з'єднані одним із CkC_k способів, кореневою вершиною може бути будь-яка з kk вершин, а решту n−kn-k вершин можна з'єднати/роз'єднати будь-яким чином, що дає множник Gn−kG_{n-k}). Тому кількість незв'язних графів з nn вершинами дорівнює:

1n∑k=1n−1k(nk)CkGn−k\frac{1}{n} \sum_{k=1}^{n-1} k \binom{n}{k} C_k G_{n-k}

І нарешті, кількість зв'язних графів дорівнює:

Cn=Gn−1n∑k=1n−1k(nk)CkGn−kC_n = G_n - \frac{1}{n} \sum_{k=1}^{n-1} k \binom{n}{k} C_k G_{n-k}

Позначені графи з kk компонентами зв'язності​

Спираючись на формулу з попереднього розділу, ми навчимося рахувати кількість позначених графів з nn вершинами та kk компонентами зв'язності.

Це число можна обчислити за допомогою динамічного програмування. Ми обчислимо D[i][j]D[i][j] — кількість позначених графів з ii вершинами та jj компонентами — для кожних i≤ni \le n та j≤kj \le k.

Обговоримо, як обчислити наступний елемент D[n][k]D[n][k], якщо ми вже знаємо попередні значення. Скористаємося поширеним підходом — візьмемо останню вершину (індекс nn). Ця вершина належить деякій компоненті. Якщо розмір цієї компоненти дорівнює ss, то є (n−1s−1)\binom{n-1}{s-1} способів обрати такий набір вершин і CsC_s способів їх з'єднати. Після вилучення цієї компоненти з графа у нас залишається n−sn-s вершин із k−1k-1 компонентами зв'язності. Тому ми отримуємо таке рекурентне співвідношення:

D[n][k]=∑s=1n(n−1s−1)CsD[n−s][k−1]D[n][k] = \sum_{s=1}^{n} \binom{n-1}{s-1} C_s D[n-s][k-1]

Відеоматеріали​