Перейти к основному контенту
Tech Path Finder
КурсыИнтервьюКод-ревьюБлог
Tech Path Finder

Персонализированный путеводитель в IT. Квизы, мок-интервью, код ревью и аналитика прогресса.

@potapov_me

Платформа

  • Курсы
  • Прогресс
  • Мок-интервью
  • Код ревью
  • Живое ревью с ИИ
  • Тренажёр переговоров
  • Закладки

Контент

  • Блог
  • Главная
  • Обратная связь

Компания

  • О проекте
  • Тарифы
  • Условия использования
  • Конфиденциальность
  • Согласие на обработку данных
  • Cookie
  • Реквизиты

Аккаунт

  • Войти
  • Зарегистрироваться
  • Профиль

© 2026 Tech Path Finder. Все права защищены.

·ИП Потапов К.С.·Политика конфиденциальности·
Сделано с ❤️ в России
  1. Графы
graphs

Графы

BFS, DFS, топологическая сортировка, нахождение кратчайших путей

Графы

#Обход графов

#BFS (Обход в ширину)

BFS (Breadth-First Search) — алгоритм обхода графа, который посещает все узлы текущего уровня перед переходом к следующему.

  • Сложность: O(V + E), где V — количество вершин, E — количество рёбер
  • Использует очередь для хранения узлов
  • Находит кратчайший путь в невзвешенном графе
  • Применения:
    • Поиск кратчайшего пути
    • Level-order обход дерева
    • Connected Components
    • Проверка двудольности (Bipartite check)

#DFS (Обход в глубину)

DFS (Depth-First Search) — алгоритм обхода графа, который идет вглубь до конца пути перед возвратом.

  • Сложность: O(V + E)
  • Использует стек или рекурсию
  • Память: O(h), где h — глубина (высота) графа
  • Применения:
    • Топологическая сортировка
    • Обнаружение циклов
    • Strongly Connected Components (Tarjan/Kosaraju)
    • Backtracking (решение задач типа "путь в лабиринте")

#Сравнение BFS и DFS

ХарактеристикаBFSDFS
Структура данныхОчередьСтек/Рекурсия
ПамятьO(w), где w — ширина графаO(h), где h — глубина графа
Кратчайший путьДа (в невзвешенном графе)Нет
Топологическая сортировкаНетДа
Обнаружение цикловДаДа

#Практические рекомендации

  1. Выбор алгоритма

    • Нужен кратчайший путь: BFS
    • Нужна топологическая сортировка или обнаружение циклов: DFS
    • Ограниченная память: DFS (если глубина меньше ширины)
    • Неограниченная память: BFS (для поиска кратчайшего пути)
  2. Оптимизации

    • Используйте visited set для предотвращения повторного посещения узлов
    • Для больших графов рассмотрите итеративную реализацию DFS вместо рекурсивной
    • Для взвешенных графов используйте Dijkstra или A* вместо BFS
  3. Реализация в Python

    • BFS: collections.deque для очереди
    • DFS: рекурсия или явный стек с list
    • Для графов используйте adjacency list или matrix в зависимости от плотности графа

Далее: Динамическое программирование