МатВектор

Command Palette

Search for a command to run...

🔀 Дискретка

Дерево (граф)

англ. Tree

Связный граф без циклов: между любыми двумя вершинами ровно один путь, а у дерева с n вершинами ровно n−1 ребро.

Дерево — граф предельной экономности: связный и без циклов. Следствия немедленные: между любыми двумя вершинами идёт ровно один путь; уберите любое ребро — граф распадётся на две части; добавьте любое — появится ровно один цикл. Дерево балансирует на грани связности, не тратя ни одного лишнего ребра.

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

минимум рёбер, при котором граф остаётся связным

Главная практическая задача — остовное дерево: выбрать из большого графа подмножество рёбер, чтобы связать все вершины с минимальной суммой весов. Так проектируют кабельные сети, трубопроводы, дороги между городами; так же работает кластеризация данных. Алгоритмы Прима и Краскала решают задачу жадно и без перебора вариантов — основы графов, на которых они строятся, лежат в уроке про основы графов.

Считать на деревьях удобно: обход не застревает в циклах, рекурсивные алгоритмы пишутся в несколько строк, поиск кратчайшего пути между двумя вершинами — это просто «единственный путь». Полный набор алгоритмов на деревьях (обходы, высота, балансировка) разобран в уроке про деревья и алгоритмы, а поиск кратчайших путей на произвольных графах — в уроке про кратчайшие пути.

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

Мини-задача на счётчик. В графе 8 вершин и 7 рёбер, и он связный — сколько в нём циклов? Ни одного: это дерево. А если рёбер восемь? Ровно один независимый цикл: каждое ребро сверх приносит свой цикл. Такая арифметика часто экономит рисование графа целиком — счёт рёбер и проверка связности отвечают раньше картинки.

Частые вопросы

Что такое лес?

Граф без циклов вообще, без требования связности. Каждая компонента леса — дерево. Лес из одного дерева — просто дерево; лес без рёбер — граф из изолированных вершин.

Что такое корень и листья?

В корневом дереве выделена вершина-начало, от которой отсчитывают глубину; листья — вершины степени 1 (кроме случая, когда корень сам одинок). Одно и то же дерево можно укоренять по-разному — структура связей не меняется, меняется точка зрения.