- •Отношение эквивалентности. Алгоритм построения классов эквивалентности. Алгоритм построения компонент связности графа. Сравнение алгоритмов.
- •Алгоритм построения наибольшего паросочетания в двудольных графах и теорема о связи максимального паросочетания с минимальным вершинным покрытием.
- •Нахождение кратчайших длин путей в графе. Алгоритм Дейкстры. Сформулировать алгоритм, инвариант цикла, доказать корректность алгоритма. Алгоритм Дейкстры с построением дерева кратчайших путей.
- •Нахождение кратчайших длин путей в графе. Алгоритм Флойда. Сформулировать алгоритм, инвариант цикла, доказать корректность алгоритма. Нахождение кратчайших путей с помощью алгоритма Флойда.
- •Поток на графе. Дивергенция потока. Теорема Остроградского-Гаусса в применении к графам.
Программа экзамена КиТГ-2025
Отношение эквивалентности. Алгоритм построения классов эквивалентности. Алгоритм построения компонент связности графа. Сравнение алгоритмов.
Пример отношения эквивалентности: сравнимость по модулю.
a ≡ b mod m
1.a ≡a mod m
2.a ≡b, то b ≡a(mod m)
3.a ≡b и b ≡c, то a ≡c (mod m)
Алгоритм
построения классов эквивалентности.
И
значально
каждый элемент считается своим собственным
классом. Когда в ходе цикла сообщается,
что два элемента эквивалентны, мы
объединяем их классы так: находим
«представителя» (корень) каждого из
двух элементов, а затем делаем корень
одного ребёнком корня другого,
стараясь прикреплять дерево меньшей
«высоты» к дереву большей «высоты»,
чтобы итоговые деревья оставались
«плоскими». При многократном объединении
один и тот же представитель быстро
находится благодаря тому, что при каждом
запросе «найти корень» мы не только
поднимаемся по ссылкам вверх, но и
перенаправляем все промежуточные узлы
сразу к корню.
Алгоритм построения компонент связности графа. Поиск компонент связности основан на том, что любые две вершины в одной компоненте соединены цепочкой рёбер. Мы последовательно проходим по списку всех вершин, и для каждой ещё не встретившейся вершины «растем» из неё, посещая всех её соседей, затем соседей соседей и так далее, отмечая каждую достигнутую вершину как принадлежащую к текущей компоненте. Тот же процесс можно описать как «заливка»: когда заливка останавливается, мы завершаем одну компоненту и начинаем следующую из оставшихся непомеченных вершин.
Определение отношений частичного и линейного порядка. Топологическая сортировка.
Примеры: Частичный порядок - a R b a ⋮ b (a, b принадлежат N)
Линейный порядок - a R b a ≤ b (a, b принадлежат Z)
Свойство транзитивности. Транзитивное замыкание. Сложность алгоритма построения транзитивного замыкания. Построение транзитивного замыкания умножением матриц. Алгоритм Уоршелла.
Сильная связность. Структура компонент сильной связности. Алгоритм построения компонент сильной связности по определению. Алгоритм Косарайу. Сравнение сложности алгоритмов.
Алгоритм Косарайю: 1) Пронумеровать вершины графа в процессе обхода в глубину так, чтобы номер корня любого поддерева был больше номеров его вершин (увеличивать счетчик номера при выходе из очередного уровня рекурсии).
2)
Инвертируем граф и, начиная с больших
номеров вершин, сделаем поиск в глубину.
В полученном лесе каждое дерево (его
вершины) – компонента сильной связности.
Деревья. Необходимое и достаточное условие для графа быть деревом. Теорема Кэли. Код Прюфера.
Связный граф без циклов называется деревом. Условие: Граф является деревом тогда и только тогда, когда он связный и выполняется: |E| = |V| - 1, где |E| - число ребер, |V| - число вершин.
Задание графа матрицей инциденций. Матрица Кирхгофа. Доказательство формулы I*IT=D-A. Подсчет числа остовных деревьев графа.
Матрица киргофа:
Алгоритм построения эйлерова пути в графе. Сложность алгоритма. Рекурсивный и нерекурсивный алгоритмы.
Эйлеровым графом называется граф, у которого есть простой цикл через все ребра графа (то есть проходящий по каждому ребру только один раз, причем начинаясь и заканчиваясь в одной вершине).
Эйлеров цикл существует ⇔ все вершины имеют чётную степень.
Эйлеров путь существует ⇔ ровно две вершины имеют нечётную степень (начало и конец пути), остальные — чётные.
Линейные пространства циклов и коциклов (разрезов) графа. Алгоритм Каргера.
Разобъем вершины графа на два непересекающихся множества, тогда множество ребер, соединяющих эти вершины, называется разрезом графа.
Алгоритм Каргера:
ЦИКЛ-ПОКА |V| > 2
ВЫБРАТЬ ЛЮБОЕ РЕБРО (u, v)
СТЯНУТЬ РЕБРО ЧТОБЫ u ~ v
ВЫБРОСИТЬ ПЕТЛИ
КЦ
ПОСЧИТАТЬ ЧИСЛО РЕБЕР В МУЛЬТИГРАФЕ С 2 ВЕРШИНАМИ
Линейные пространства циклов и коциклов (разрезов) графа. Алгоритмы построения базиса циклов графа: через решение системы уравнений и через построение остовных деревьев. Сравнение алгоритмов по трудоемкости.
Планарные графы. Критерии планарности графа. Доказательство непланарности K5 и K3,3. Гамма-алгоритм плоской укладки планарного графа.
Планарный граф — граф, который можно изобразить на плоскости без пересечений ребер. Пример: K5 и K3, 3.
Формула: В+Г=Р+2 и 3Г≤2Р, а для двудольного графа еще 4Г≤2Р (в двудольном нет циклов нечетной длины)
Критерий планарности: Граф является планарным тогда и только тогда, когда он не приводится к K5 и K3, 3 путем удаления или стягивания ребер.
Гамма-алгоритм:
Хроматический многочлен. Рекуррентные формулы для построения хроматических многочленов. Хроматическое число графа. Теорема Зыкова. Хроматический многочлен цикла.
Количество способов правильной x-раскраски графа G называется хроматическим многочленом. Обозначение: P(G,x).
Рекуррентные формулы:
Покрытия (вершинное и реберное) и независимые множества (вершинное и реберное). Теорема о связи чисел покрытия и чисел независимости.
Ребро и вершина покрывают друг друга, если они инцидентны. Множество вершин S называется вершинным покрытием графа, если любое его ребро инцидентно вершине из S. 0(G) – количество вершин в минимальном вершинном покрытии
Множество ребер T называется реберным покрытием графа, если любая его вершина инцидентна ребру из T. 1(G) – количество ребер в минимальном реберном покрытии
Множество вершин S’ называется независимым, если никакие две вершины из S’ не соединены ребром. 0(G) – количество вершин в наибольшем независимом множестве
Множество ребер T’ называется независимым, если никакие два ребра из T’ не имеют общей вершины. 1(G) - количество ребер в наибольшем независимом множестве
Теорема 1: 0(G) + 0(G) = n для любого графа
Теорема 2: 1(G) + 1(G) = n
