Алгоритмы и структуры данных

Graph Traversal

Обходы графа: семейство

актуальноТекущий рабочий стандарт

Направления: Основы · Алгоритмы и структуры данных

Зонтичная тема: что общего у обоих обходов, как увидеть в задаче, где он не назван, и по каким двум вопросам выбирается обход. Сами обходы разобраны отдельно.

Ключевые тезисы

  • Оба обхода линейны по числу вершин и рёбер: O(V + E), и отличаются одной строкой — откуда берётся следующая вершина.
  • Половина «графовых» задач приходит без слова «»: лабиринт, зависимости, превращения строк, состояния игры.
  • Составное состояние — это вершина целиком: неполный ключ посещённых даёт не медленный, а неверный ответ.

Какую задачу решает

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

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

Внутри темы

2 приёма разобраны на отдельных страницах — по одной и той же схеме. Эта страница про то, что у них общее и как выбрать нужный.

Подробный разбор

3 подтемы — объяснения, формулы, примеры и интерактивные графики.

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

В ширинуВ глубину
Откуда берём следующую вершинуиз (FIFO)из стека или (LIFO)
Порядок обходапо слоям от стартавглубь одной ветки до упора
по числу рёберданет
Память — целый слой — глубина обхода
Что даёт даромрасстояния в шагахвремена входа и выхода, порядок завершения
На практике

Оба обхода требуют множества посещённых — не для скорости, а для завершимости: без него цикл в означает бесконечную работу.

Большая часть задач на обходы выглядит как задачи про карты, лабиринты, зависимости и превращения. Алгоритм в них не меняется; меняется только ответ на два вопроса: что считать вершиной и что — ребром.

ФормулировкаВершинаРебро
Лабиринт, острова, заливка цветомклетка сеткипереход к соседней проходимой клетке
«За сколько ходов из A получить B»состояние (строка, число, позиция)разрешённое преобразование
Зависимости задач или пакетовзадача«должна идти раньше»
Друзья, подписки, транзакцииучастниксвязь между участниками
Игра с фиксированными ходамипозиция на доскеход
На практике

Если состояние составное — позиция плюс собранные ключи, номер шага, остаток топлива, — то вершиной является весь кортеж, и в множество посещённых кладётся тоже он целиком. Пропущенная часть состояния здесь даёт не медленный, а неверный ответ.

  1. Нужен кратчайший путь по числу шагов? Да — обход в ширину. Стоимость переходов разная — кратчайшие пути с Дейкстрой.
  2. Нужно обойти всё: связность, циклы, порядок, все варианты? Обход в глубину.
  3. Граф огромный, а цель одна и известна? Двунаправленный или A* с эвристикой.
  4. Граф — дерево? Любой обход; множество посещённых не нужно, достаточно не возвращаться в родителя.
На практике

Частая ошибка выбора — взять там, где нужен : он найдёт какой-то путь, и на большинстве тестов тот даже окажется коротким.

Чем заменяют

Видеолекции

Записи университетских курсов, где эта тема звучит. Тайм-кодов у них нет, поэтому открываются они с начала.

Связанные темы

Алгоритмы на графах

Breadth-First Search85%

Поиск в ширину · Алгоритмы и структуры данных

Обход слоями: сначала всё, до чего один шаг, потом — два. Первое посещение вершины оказывается кратчайшим путём, если все переходы равноценны.

Depth-First Search85%

Поиск в глубину · Алгоритмы и структуры данных

Идти вглубь до упора и возвращаться. Порядок завершения вершин даёт топологическую сортировку, три цвета — обнаружение циклов, откат состояния — перебор с возвратом.

Shortest Paths85%

Кратчайшие пути · Алгоритмы и структуры данных

Дейкстра для неотрицательных весов, Беллман — Форд для отрицательных, A* — когда есть оценка расстояния до цели.

Graph Basics85%

Основы графов · Графы и сети

Вершины, рёбра, веса и направления. Матрица смежности и список рёбер — два способа хранить одно и то же.

Centrality85%

Центральности · Графы и сети

Меры важности вершины: по числу связей, по посредничеству, по близости и по влиянию соседей.

PageRank85%

PageRank · Графы и сети

Стационарное распределение случайного блуждания по графу с телепортацией. Классический алгоритм ранжирования, который до сих пор используется как признак.

Кому эта тема нужна

Спрашивают на собеседовании: 2ГИСГеопоиск и навигация.

Следующий шагДальше по связи: Breadth-First SearchОбход слоями: сначала всё, до чего один шаг, потом — два. Первое посещение вершины оказывается кратчайшим путём, если все переходы равноценны.Перейти →

Глава «Алгоритмы и структуры данных» последний раз правилась . Нашли ошибку — напишите.