АЛГ-126визуализацияBFS · DFS · Dijkstraревизия 2026-05-08

Лаборатория графов и алгоритмов

Интерактивная визуализация классических алгоритмов на графах: поиск в ширину (BFS), поиск в глубину (DFS), кратчайший путь (Dijkstra). 5 пресетов графа, пошаговое воспроизведение, подсветка обхода.

⏱ ~5 мин · 3 алгоритма · 5 пресетов · по CLRS
Лаборатория · АЛГ-126|SVG-визуализация
calcal.ru / laboratoriya-grafov-i-algoritmov
Загрузка лаборатории…
3
Алгоритма
5
Пресетов графов
O(V+E)
BFS / DFS
0 ₽
Стоимость

Графы и их представления

Граф — это пара (V, E), где V — множество вершин, а E — множество рёбер. В программировании используются два представления: матрица смежности (V × V — память, но O(1) проверка ребра) и список смежности (V + E памяти, O(степени) проверка). Для разреженных графов (E ≪ V²) предпочтителен список — экономнее памяти.

Graph algorithms are among the most important and useful in computer science. Many real-world problems can be modeled as graph problems and solved efficiently using fundamental graph algorithms.Cormen, Leiserson, Rivest, Stein «Introduction to Algorithms» (CLRS)

Поиск в ширину (BFS)

BFS исследует граф «слой за слоем» от стартовой вершины. Использует очередь (FIFO). Гарантирует кратчайший путь по числу рёбер в невзвешенном графе. Сложность O(V + E).

ПСЕВДОКОД BFS
BFS(G, s):
    visited = {s}; queue = [s]
    while queue not empty:
        u = queue.dequeue()
        for v in adj[u]:
            if v not in visited:
                visited.add(v)
                parent[v] = u
                queue.enqueue(v)

Поиск в глубину (DFS)

DFS идёт «вглубь» по одной ветке, возвращается при тупике. Реализуется рекурсивно или через стек. Сложность O(V + E). Применения: топологическая сортировка, поиск компонент сильной связности (алгоритм Тарьяна), обнаружение циклов.

Алгоритм Дейкстры

Dijkstra находит кратчайший путь от стартовой вершины до всех остальных во взвешенном графе с неотрицательными весами. Жадный алгоритм: на каждом шаге выбирается вершина с минимальным расстоянием. Сложность с приоритетной очередью на бинарной куче — O((V + E) log V).

Применения в реальной жизни

  • Яндекс-карты, 2ГИС, Google Maps — Dijkstra/A* для построения маршрутов.
  • Соцсети — BFS для «друзья друзей», графы рекомендаций.
  • Поисковые системы — PageRank на графе ссылок (модификация степенного метода).
  • Маршрутизация в сетях — OSPF (Dijkstra), BGP (анализ путей).
  • Компиляторы — DFS для топосортировки модулей, обнаружения циклов в зависимостях.
  • Биоинформатика — графы белок-белковых взаимодействий.
ИСТОЧНИКИ
  1. Cormen T., Leiserson C., Rivest R., Stein C. «Introduction to Algorithms», 4th ed.. Cormen et al.. MIT Press. 2022.
  2. Алгоритмы на графах — e-maxx.ru. Лаконов Д.Ю.. e-maxx.ru. действ.. ↗ ссылка
  3. A note on two problems in connexion with graphs. Dijkstra E.W.. Numerische Mathematik 1. 1959.
  4. CS50 Lecture 5 — Data Structures (graphs). Malan D.. Harvard / cs50.harvard.edu. 2024.
РАЗДЕЛ 04 · НЮАНСЫ

Что важно знать

Четыре практических наблюдения о применении алгоритмов на графах.

01
BFS vs DFS

BFS даёт кратчайший путь в невзвешенном графе (по числу рёбер). DFS — нет, но удобен для топологической сортировки и поиска компонент связности.

02
Dijkstra и веса

Алгоритм Дейкстры работает только с неотрицательными весами. При наличии отрицательных нужен Bellman-Ford (O(VE)) или Johnson.

03
Сложность

BFS/DFS — O(V + E). Dijkstra с бинарной кучей — O((V + E) log V), с Fibonacci heap — O(V log V + E). Floyd-Warshall — O(V³).

04
Где применяется

BFS — Яндекс-карты (поиск маршрутов), соцсети (рекомендации друзей). DFS — компиляторы (топосортировка). Dijkstra — навигация, маршрутизация в сетях, GPS.

РАЗДЕЛ 05 · ПЛАН ДЕЙСТВИЙ

Как изучать

Три шага: пресет → пошаговое воспроизведение → применение в задачах.

01ИЗУЧЕНИЕ

Старт с пресета

Выберите граф «Решётка» или «Двоичное дерево» для BFS/DFS. Для Dijkstra — «Взвешенный граф» (рёбра с весами).

02АНАЛИЗ

Шаг за шагом

Кнопка «Шаг» — посмотрите порядок обхода. Зелёные узлы — посещённые, оранжевый — текущий, синий — стартовый.

03ПРАКТИКА

Примените

BFS — для подсчёта расстояний, DFS — для проверки связности, Dijkstra — для поиска кратчайших путей в реальных задачах маршрутизации.

ЧАСТЫЕ ВОПРОСЫ

Часто задаваемые вопросы

Граф — это математическая структура, состоящая из вершин (узлов) и рёбер (соединений). Графы делятся на: ориентированные (рёбра имеют направление) и неориентированные; взвешенные (у каждого ребра есть вес — длина, стоимость, время) и невзвешенные; простые (нет петель и кратных рёбер) и мультиграфы. Графы моделируют дороги, социальные сети, компьютерные сети, химические молекулы, иерархии в коде.
BFS (поиск в ширину) — если нужен кратчайший путь в невзвешенном графе или вы ищете «ближайшее» к стартовой вершине. Хорош для шахмат, навигации, рекомендательных систем. DFS (поиск в глубину) — если нужно найти любой путь, проверить связность, выявить циклы, выполнить топологическую сортировку. DFS — стандартный инструмент компиляторов, парсеров. Сложность одинакова: O(V + E).
Дейкстра требует неотрицательных весов рёбер. При наличии отрицательных весов — некорректный результат (алгоритм может «упустить» более короткий путь через узел с большим прямым путём). Альтернативы: Bellman-Ford (работает с отрицательными, обнаруживает отрицательные циклы; O(VE)); Johnson (для разреженных графов с отрицательными весами; O(V² log V + VE)); SPFA (вариант Bellman-Ford с очередью).
Топологическая сортировка — упорядочение вершин ориентированного ациклического графа (DAG) так, чтобы для каждого ребра u → v узел u шёл раньше v. Применяется в: расписании задач (что должно быть сделано до чего); компиляции (порядок сборки модулей); зависимостях npm/pip-пакетов; DAG-движках типа Apache Airflow. Реализуется через DFS (Кана) или DFS с post-order. Сложность O(V + E).
A* — алгоритм поиска пути с эвристикой h(n) — оценкой расстояния от узла до цели. Если h(n) ≤ реального расстояния (допустимая эвристика), A* находит оптимальный путь. Преимущество перед Dijkstra: значительно меньше посещений узлов в больших графах. Применяется в играх (поиск пути для NPC), логистике, GPS-навигации. Если h(n) = 0 — A* вырождается в Dijkstra.
Минимальное остовное дерево (MST) — подмножество рёбер связного взвешенного графа с минимальной суммой весов, соединяющее все вершины без циклов. Имеет ровно V-1 рёбер. Алгоритмы: Краскал (через Union-Find, O(E log E)) и Прим (через приоритетную очередь, O(E log V)). Применения: проектирование сетей электропередач, водоснабжения, телекоммуникаций; кластеризация в машинном обучении.
NP-полные — задачи, для которых не известно полиномиального алгоритма (но решение можно проверить за полиномиальное время). Примеры на графах: коммивояжёр (TSP), гамильтонов цикл, раскраска графа в k цветов, максимальная клика, минимальное вершинное покрытие. Решаются эвристиками (генетические алгоритмы, имитация отжига), приближёнными алгоритмами или для малых N — полным перебором.
Яндекс-карты и Google Maps — Dijkstra/A* для маршрутов. Соцсети (ВК, Одноклассники) — графы дружбы, рекомендации (BFS для «друзья друзей»). Поисковые системы — PageRank на графе ссылок. Компиляторы — DAG зависимостей. Логистика — оптимизация доставки (TSP). Электрические сети — анализ цепей. Биоинформатика — графы белков. Криптография — графы доверия PGP.
Лиана Арифметова
АВТОРverifiedред. calcal.ru

Лиана Арифметова

Создатель и главный редактор

Миссия: демократизировать сложные расчёты. Превратить страх перед числами в ясность и контроль. Девиз: «Любая повторяющаяся задача заслуживает своего калькулятора».

Mathematical Engineering · МФТИ · редактирует каталог с 2012 года

Был ли этот калькулятор полезен?

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ

Инструмент справочный — не заменяет эксперта

Только для информационных целей. Все расчёты, результаты и данные, предоставляемые инструментом, носят исключительно ознакомительный и справочный характер. Они не являются профессиональной консультацией — медицинской, юридической, финансовой, инженерной или иной.

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

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

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

СМЕЖНЫЕ ИНСТРУМЕНТЫ

Похожие калькуляторы

15

Калькулятор сложности алгоритмов

Расчёты сложности: Big O, сортировка, поиск, графы, рекуррентность, практическая оценка

/algorithm-complexity-calculator

Калькулятор технического долга: объём, SQALE, рефакторинг

Комплексный калькулятор технического долга: оценка объёма в часах и рублях, расчёт процентной ставки (стоимость бездействия), матрица приоритизации (impact vs effort), метрики качества кода (цикломатическая сложность, дупликация, покрытие тестами), план рефакторинга по спринтам, SQALE рейтинг A-E.

/technical-debt-calculator

Генератор .gitignore

Создание файла .gitignore для вашего проекта. Выберите язык и фреймворк — получите готовый файл с комментариями.

/generator-gitignore

SQL форматтер (beautifier)

Онлайн форматирование SQL-запросов с подсветкой синтаксиса. Поддержка MySQL, PostgreSQL, MS SQL. Форматирование, минификация и подсветка SQL.

/sql-formatter

Diff-инструмент для сравнения текстов

Сравнение двух текстов с подсветкой различий. Построчный и пословный diff, режимы отображения side-by-side и unified.

/sravnenie-tekstov-diff

Объединить PDF онлайн — без загрузки на сервер

Склейка PDF в браузере через pdf-lib. До 20 файлов, до 50 МБ каждый. Локально, без отправки на сервер (152-ФЗ).

/obyedinit-pdf-onlajn-besplatno

Сжать PDF онлайн — уменьшить размер локально

Сжатие PDF в браузере без потери качества. 3 уровня (object streams, удаление метаданных). До 50 МБ. Через pdf-lib, локально.

/szhat-pdf-onlajn-umenshit-razmer

Разделить PDF на страницы — извлечь нужные онлайн

Разделение PDF на страницы локально: каждая страница отдельным файлом, диапазон или группами. Через pdf-lib, без отправки на сервер.

/razdelit-pdf-na-stranicy-onlajn

JPG в PDF — конвертер с объединением

Конвертация JPG/PNG в PDF в браузере: до 30 картинок в один документ. Форматы A4/A3/Letter или подгонка под изображение.

/jpg-v-pdf-konverter

Повернуть страницы PDF онлайн

Поворот всех или указанных страниц PDF на 90/180/270° за миллисекунды. Lossless. Через pdf-lib, без отправки на сервер.

/povernut-pdf-stranitsy-onlajn

Водяной знак на PDF онлайн (кириллица)

Нанесение текстового знака («КОНФИДЕНЦИАЛЬНО», «ЧЕРНОВИК») на все страницы PDF. Поддержка русского текста через Canvas. 4 положения, регулировка прозрачности.

/dobavit-vodyanoj-znak-na-pdf

Нумерация страниц PDF онлайн

Проставьте номера страниц PDF в браузере: 4 формата, 6 положений, пропуск титульной, кастомный старт. Поддержка кириллицы. Через pdf-lib + Canvas.

/numerovat-stranitsy-pdf-onlajn

PDF в JPG / PNG — конвертер страниц

Рендеринг каждой страницы PDF в картинку через pdfjs-dist (Mozilla). 4 уровня качества: 96 / 150 / 300 DPI и lossless PNG. До 50 МБ.

/pdf-v-jpg-konverter-onlajn

Извлечь текст из PDF онлайн

Извлечение текста из PDF в браузере через pdfjs-dist (Mozilla). Plain text, с разделителями страниц или JSON. Файлы не уходят на сервер.

/extract-text-iz-pdf-onlajn

Сжать JPG до 100 КБ для документов

Сжатие JPG до точного размера в КБ (50, 100, 200, 500, 1000) через бинарный поиск quality. Госуслуги, ЕГЭ, банки. Через browser-image-compression.

/szhat-jpg-onlajn-do-100kb