Підрахунок позначених графів
Позначені графи
Нехай кількість вершин у графі дорівнює . Нам потрібно обчислити кількість позначених графів з вершинами (позначений означає, що вершини пронумеровані числами від до ). Ребра графів вважаються неорієнтованими, а петлі та кратні ребра заборонені.
Розглянемо множину всіх можливих ребер графа. Для кожного ребра ми можемо вважати, що (бо граф неорієнтований і немає петель). Тому множина всіх ребер має потужність , тобто .
Оскільки будь-який позначений граф однозначно визначається своїми ребрами, кількість позначених графів з вершинами дорівнює:
Зв'язні позначені графи
Тут ми додатково накладаємо обмеження, що граф має бути зв'язним.
Позначимо шукану кількість зв'язних графів з вершинами як .
Спочатку обговоримо, скільки існує незв'язних графів. Тоді кількість зв'язних графів дорівнюватиме мінус кількість незв'язних графів. Більше того, ми порахуємо кількість незв'язних графів із коренем. Граф із коренем — це граф, у якому ми виділяємо одну вершину, позначаючи її як корінь. Очевидно, що у нас є можливостей обрати корінь графа з позначеними вершинами, тому наприкінці нам потрібно буде поділити кількість незв'язних графів із коренем на , щоб отримати кількість незв'язних графів.
Коренева вершина опиниться в компоненті зв'язності розміру . Існує графів таких, що коренева вершина перебуває в компоненті зв'язності з вершинами (є способів обрати вершин для компоненти, вони з'єднані одним із способів, кореневою вершиною може бути будь-яка з вершин, а решту вершин можна з'єднати/роз'єднати будь-яким чином, що дає множник ). Тому кількість незв'язних графів з вершинами дорівнює:
І нарешті, кількість зв'язних графів дорівнює:
Позначені графи з компонентами зв'язності
Спираючись на формулу з попереднього розділу, ми навчимося рахувати кількість позначених графів з вершинами та компонентами зв'язності.
Це число можна обчислити за допомогою динамічного програмування. Ми обчислимо — кількість позначених графів з вершинами та компонентами — для кожних та .
Обговоримо, як обчислити наступний елемент , якщо ми вже знаємо попередні значення. Скористаємося поширеним підходом — візьмемо останню вершину (індекс ). Ця вершина належить деякій компоненті. Якщо розмір цієї компоненти дорівнює , то є способів обрати такий набір вершин і способів їх з'єднати. Після вилучення цієї компоненти з графа у нас залишається вершин із компонентами зв'язності. Тому ми отримуємо таке рекурентне співвідношення: