"Информатика (базовый уровень)", Гейн А.Г., Гейн А.А.
Каркас связного графа — это дерево, которое включает все вершины исходного графа и соединяет их без циклов. Если рёбра имеют веса, можно сравнить каркасы по сумме весов и выбрать тот, который требует наименьших затрат. Такой каркас называют каркасом минимального веса. Его строят, рассматривая рёбра от лёгких к тяжёлым и пропуская те, которые замкнули бы цикл. Этот подход помогает находить экономичные схемы соединения объектов.
Текст подготовлен нейронной сетью по теме параграфа и не заменяет учебник — важные факты и формулировки сверяйте с ним.
Каркас связного графа — подграф, который содержит все вершины исходного графа и является деревом. Дерево — это связный граф без циклов, то есть замкнутых цепочек рёбер. Каркас показывает, какими рёбрами можно соединить все вершины, не включая избыточные связи. Другое название такого каркаса — остовное дерево.
Вес каркаса — сумма весов всех рёбер, вошедших в него. Если каждому ребру приписана стоимость, длина или иной числовой показатель, его вес учитывают при сложении. Так можно оценить затраты на выбранную систему соединений. Например, для рёбер с весами 2, 4 и 7 вес каркаса равен 2 + 4 + 7 = 13.
Каркас минимального веса — каркас связного взвешенного графа, вес которого меньше или равен весу любого другого его каркаса. Он сохраняет все вершины и связность, но среди возможных вариантов требует наименьшей суммы весов. При равных весах разных наборов рёбер минимум может достигаться несколькими способами. Сравнивают именно суммы, а не отдельные рёбра.
Остовное дерево — другое название каркаса связного графа. Слово «остовное» подчёркивает, что дерево служит основой исходного графа и включает каждую его вершину. Рёбер в нём может быть меньше, чем в исходном графе, поскольку дополнительные связи не обязательны для соединения вершин. Поэтому остовное дерево удобно рассматривать как достаточную основу связной сети.
Каркас должен соединять все вершины, иначе какая-то часть графа останется отрезанной от остальных. При этом он не должен содержать циклов. Если в связном графе есть цикл, можно удалить из него одно ребро: оставшиеся рёбра цикла всё ещё дают путь между концами удалённого ребра. Значит, связность сохранится, а удалённое ребро было лишним для каркаса.
У дерева с n вершинами ровно n−1 ребро. Это можно понять по построению: начинаем с одной вершины, а затем каждое новое ребро присоединяет к уже собранной части одну новую вершину. Чтобы добавить остальные n−1 вершин, нужно ровно n−1 такое присоединение. Если рёбер окажется меньше, хотя бы одна вершина не присоединится; если добавить лишнее между уже соединёнными вершинами, появится цикл.
Для минимального каркаса рёбра рассматривают по возрастанию веса. Сначала берут самое лёгкое ребро, затем проверяют следующее и добавляют его, если оно соединяет разные части построенного графа. Если концы ребра уже соединены выбранными рёбрами, добавление замкнёт цикл, поэтому ребро пропускают. Так среди безопасных вариантов на каждом шаге выбирается ребро с наименьшим весом.
Алгоритм останавливают после выбора n−1 ребра. Все добавленные рёбра не создавали циклов, поэтому выбранный граф остаётся лесом — объединением деревьев. Если исходный граф связен, продолжение рассмотрения рёбер позволяет объединить эти части; когда выбрано n−1 ребро, остаётся одно дерево со всеми вершинами. Если рёбер графа недостаточно, чтобы соединить все вершины, исходный граф не связен и каркаса для него нет.
Проверка результата состоит из нескольких шагов. Сначала убедись, что каждая вершина исходного графа попала в выбранную часть и что между любыми двумя вершинами существует путь. Затем проверь отсутствие циклов и число рёбер: для n вершин оно должно быть n−1. Наконец сложи веса выбранных рёбер и сравни полученную сумму с вариантами, которые могли дать меньший результат; жадный выбор по возрастанию с пропуском циклов обеспечивает минимальность.
| Характеристика | Каркас связного графа | Каркас минимального веса |
|---|---|---|
| Какие вершины содержит | Все вершины исходного графа | Все вершины исходного графа |
| Связность | Связен | Связен |
| Наличие циклов | Циклов нет | Циклов нет |
| Число рёбер при n вершинах | n−1 | n−1 |
| Критерий выбора | Сохранить все вершины и связность без циклов | Получить наименьшую сумму весов среди каркасов |
Таблица помогает отличить обязательные свойства любого каркаса от условия минимальности. Сначала проверь, что выбранный набор рёбер вообще является каркасом: он должен охватывать все вершины, быть связным и не иметь циклов. Затем сравни его вес с весами других каркасов или примени алгоритм выбора рёбер по возрастанию веса.
Задача 1. В связном графе с вершинами A, B, C и D выбраны рёбра AB, BC и CD. Нужно проверить, является ли этот набор каркасом. Весов рёбер нет, поэтому проверяем только свойства дерева. Важно не спутать каркас с любым подграфом: он обязан включать все четыре вершины и соединять их.
Ответ: выбранный набор является каркасом и деревом. Все вершины входят в него, граф связен, а циклов нет. В этом примере число рёбер n−1 подтверждает проверку, но само по себе не заменяет проверку связности.
Задача 2. У графа три вершины A, B, C и рёбра AB веса 1, AC веса 2, BC веса 4. Требуется перебрать каркасы и выбрать каркас минимального веса. Для трёх вершин каркас должен содержать два ребра. Здесь любой выбор двух рёбер соединяет все вершины и не образует цикла.
Ответ: каркас минимального веса состоит из AB и AC, его вес равен 3. Он содержит все три вершины, связен и не имеет циклов. Перебор здесь удобен из-за малого числа рёбер; для больших графов применяют жадный алгоритм.
Задача 3. Дана таблица рёбер: AB — 1, BC — 2, AC — 3, CD — 4, BD — 5. Нужно построить каркас минимального веса жадным способом. В графе четыре вершины, значит, для готового дерева потребуется три ребра. Сначала упорядочим рёбра, а затем будем следить, не соединены ли уже концы очередного ребра выбранным путём.
Ответ: каркас минимального веса включает AB, BC и CD, его вес равен 7. Ребро BD уже не требуется для каркаса, а AC нельзя добавлять, поскольку оно создаёт цикл. Алгоритм остановился, когда все четыре вершины оказались соединены деревом.
Для работы с каркасами нужно знать, что такое граф, вершина, ребро, связность и цикл: без этих понятий нельзя проверить результат. Понятие дерева и способы обхода графа помогают выяснить, соединены ли все вершины и не возник ли цикл. Каркас минимального веса переносит эти идеи на практическую задачу выбора рёбер с наименьшими затратами. Такие модели используют при проектировании сетей связи, дорог и других систем, где требуется соединить объекты.
Чем каркас отличается от исходного графа?
Каркас включает все вершины исходного графа, но обычно содержит только часть его рёбер. Он сохраняет связность и не содержит циклов. Поэтому лишние для соединения рёбра в него не входят.
Почему в каркасе n−1 ребро?
В дереве каждое добавленное ребро присоединяет одну новую вершину к уже построенной части. Чтобы соединить n вершин, достаточно сделать это n−1 раз. Если рёбер меньше, граф не будет связным, а лишнее ребро создаст цикл.
Может ли у графа быть несколько каркасов минимального веса?
Да, если разные наборы рёбер дают одинаковую наименьшую сумму весов. Например, это возможно, когда у нескольких рёбер одинаковые веса. Каждый такой каркас будет минимальным.
Почему нельзя просто выбрать все рёбра с наименьшим весом?
Несколько самых лёгких рёбер могут образовать цикл и оставить часть вершин несоединёнными. Поэтому при выборе нужно проверять не только вес, но и то, не замыкает ли ребро цикл. Подходящее лёгкое ребро добавляют, неподходящее пропускают.
Как понять, что выбранное ребро создаёт цикл?
Проверь, соединены ли уже его концы цепочкой выбранных рёбер. Если да, добавление нового ребра замкнёт эту цепочку в цикл. Такое ребро пропускают.
§ 58. Каркасы минимального веса