5.4. Алгоритм нахождения компонент связности в графе

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

Ключевые вопросы параграфа

  • Что именно называют компонентой связности в неориентированном графе?
  • Как применить DFS и BFS, чтобы выделить все компоненты?
  • Зачем обход нужно запускать от каждой непосещённой вершины?

Применение алгоритмов поиска в глубину и ширину

Алгоритмы поиска в глубину и ширину находят широкое применение и могут использоваться в других алгоритмах. Рассмотрим один из таких алгоритмов для поиска компонент связности в графе. Под компонентой связности в графе понимают множество вершин графа достижимых попарно и рёбра их связывающие. Для поиска компонент связности необходимо из каждой не посещённой вершины запускать алгоритм обхода, накапливая результаты каждого в отдельный контейнер. Пример ниже поможет понять алгоритм.

algorithms

Асимптотическая сложность нахождения компонент связности в графе — O(V+E), где V — число вершин, а E — число рёбер и дуг.

Упражнение

Попробуйте реализовать данный алгоритм.

Что дальше

Теперь вы умеете находить компоненты связности в графе и применять для этого DFS или BFS. Вы поняли, почему одного обхода недостаточно и как обойти весь граф по частям.

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

А пока вы не ушли дальше — закрепите материал на практике:

  • Отметьте, что урок прочитан, при помощи кнопки ниже.
  • Пройдите мини-квиз, чтобы проверить, насколько хорошо вы усвоили тему.
  • Перейдите к задачам этого параграфа и потренируйтесь.
  • Перед этим — загляните в короткий гайд о том, как работает система проверки.

Хотите обсудить, задать вопрос или не понимаете, почему код не работает? Мы всё предусмотрели — вступайте в сообщество Хендбука! Там студенты помогают друг другу разобраться.

Ключевые выводы параграфа

  • Компоненты связности — это группы вершин неориентированного графа, внутри которых существует путь между любыми двумя вершинами.
  • Чтобы найти все компоненты, используют обход графа: в глубину (Depth-First Search, DFS) или в ширину (Breadth-First Search, BFS), начиная каждый раз с новой не посещённой вершины.
  • Важно правильно отмечать посещённые вершины и учитывать номер компоненты, к которой они принадлежат.
  • Выделение компонент связности помогает понять структуру графа и служит основой для последующего анализа и алгоритмов кластеризации.
Чтобы добавить в заметки выделенный текст, нажмите Ctrl + E
Предыдущий параграф5.3. Обходы графа
Следующий параграф5.5. Задача поиска кратчайшего пути в графе