Текущий алгортим

  • Первая фаза​​

Если изменение ребра меняет расстояние до вершинки, то мы в порядке дейкстры сканируем задетые вершинки, обновляя до них расстояние (читать эти вершинки нельзя, пока их не подтвердит вторая фаза)

  • Вторая фаза

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

Дедлок

Можно ли вторую фазу делать быстрее?

Можно ли вторую фазу делать быстрее?

Координатор (граф зависимостей)

Операции:

  • добавление серой вершинки
  • добавление ребра
  • покраска вершинки в зелёную

Инварианты:

  • граф ацикличен
  • зелёные истоки удаляются

Координатор (граф зависимостей)

  • Можно за любую асимптотику, так как граф на порядки меньше исходного
  • Lock-free
  • Добавления рёбер в разные деревья не должны влиять на друг друга

Координатор (граф зависимостей)

  1. Ленивый пересчет
    • добавление любого ребра делает все вершинки этого дерева неактуальными
  2. Фазовый алгоритм
    1. добавление рёбер
    2.  всё остальное
  3. Сканирующий алгоритм
    • перед операцией сканируем задетые вершинки
    • если какому-то потоку мешам, то он должен нам помочь
  4. Euler tour trees

deck

By Dmitry Naumov

deck

  • 136