Многие алгоритмы максимального потока, которые я обычно вижу реализованными, алгоритм Dinic, push relbel и другие, могут улучшить свои асимптотические временные затраты за счет использования динамических деревьев (также известных как деревья среза ссылок).
- Push-релабель запускается в или или нормально, но с динамическими деревьямиO ( V 3 ) O ( V 2 √O(VElog(V2/E))
- Алгоритм Диника работает в , но с динамическими деревьямиO ( V E log ( V ) )
Однако практические реализации алгоритмов максимального потока в большинстве библиотек, похоже, не используют эту структуру данных. Используются ли когда-либо динамические деревья на практике для вычисления максимального потока? Или они несут слишком много накладных расходов, чтобы быть полезными для реальных проблемных размеров?
Есть ли другие проблемные домены, в которых используются деревья ссылок?
Этот вопрос связан с вопросом, который я задал в рамках теории: практичен ли какой-либо из современных алгоритмов максимального потока?
источник
Ответы:
Существует статья под названием « Динамические деревья на практике », в которой рассматривается практическая реализация.
Другие категории, которые дерево Link-Cut могло бы эффективно использовать, находятся в индексировании базы данных . Вы можете найти это в книге « Методы индексирования базы данных ».
источник
В конце этой статьи выясняется, что дерево среза ссылок (LC) превосходит деревья с граблями (RC) для алгоритма максимального потока Sleator / Tarjan, используя стандартный генератор случайных графов Dimacs.
В статье рассматривается распространение изменений как одно из приложений динамических деревьев. например, распространение изменений аналогично тому, как нужно пересчитывать ячейки электронной таблицы Excel на основе изменений в некоторых ячейках на основе зависимостей ячейки / формулы. авторы выпустили свой код в виде открытой библиотеки.
Экспериментальный анализ распространения изменений в динамических деревьях Acar, Blelloch, Vittes
источник