Статья Автор: Деникина Н.В., Деникин А.В.

Алгоритм Дейкстры с использованием модуля heapq

Реализация алгоритма Дейкстры для поиска кратчайшего пути в графе с использованием кучи с приоритетом (модуль heapq в Python)


Пояснение

  1. Граф представлен в виде словаря, где ключи — это вершины, а значения — словари соседей с весами рёбер.

    • Например, 'A': {'B': 1, 'C': 4} означает, что из вершины A есть ребро в B с весом 1 и в C с весом 4.

  2. Куча с приоритетом (priority_queue) используется для хранения вершин и их текущих расстояний. Вершина с наименьшим расстоянием извлекается первой.

  3. Алгоритм:

    • Инициализируем расстояния до всех вершин как бесконечность (float('infinity')), кроме стартовой вершины (её расстояние равно 0).

    • Добавляем стартовую вершину в кучу.

    • Пока куча не пуста:

      • Извлекаем вершину с минимальным расстоянием.

      • Обновляем расстояния до её соседей, если найден более короткий путь.

      • Добавляем обновлённые расстояния в кучу.

  4. Результат:

    • Возвращается словарь distances, где для каждой вершины указано кратчайшее расстояние от стартовой вершины.

 

Сложность

  • Временная сложность: O((V + E) * log V), где V — количество вершин, E — количество рёбер.

  • Пространственная сложность: O(V) для хранения расстояний и O(V) для кучи.


Эта реализация эффективна для разреженных графов (где количество рёбер значительно меньше, чем V²).

Пропустить Навигационные Ссылки.
Чтобы оставить комментарий нужна авторизация
Печать