Чи використовуються колись зрізані дерева на практиці для обчислення максимального потоку чи інших застосувань?


20

Багато алгоритмів максимуму потоку, які я зазвичай бачу реалізованими, алгоритм Дініка, натискання реле та інші, можуть покращити свою асимптотичну вартість часу завдяки використанню динамічних дерев (також відомих як дерева-зрізані посилання).

  • Реле натискання працює в або O ( V 3 ) або O ( V 2 О(V2Е)О(V3)нормально, але з динамічними деревамиO(VElog(V2/E))O(V2E)O(VElog(V2/E))
  • Алгоритм Дініка працює в , але з динамічними деревами O ( V E log ( V ) )O(V2E)O(VElog(V))

Однак практична реалізація алгоритмів максимального потоку в більшості бібліотек, схоже, не використовує цю структуру даних. Чи динамічні дерева коли-небудь використовуються на практиці для обчислення максимального потоку? Або вони несуть занадто багато накладних витрат, щоб бути корисними для реальної величини проблем?

Чи є інші проблемні домени, де використовуються зрізані дерева зрізаних?

Це питання пов'язане з запитанням, яке я задав на cstory: Чи практичні будь-які найсучасніші алгоритми максимального потоку?


огляд / опис посилань на зрізані дерева, але лише штати "корисний для таких програм, як Network Flow"
vzn

з огляду опису tarjan, цитованого reza, в основному лінійні алгоритми часу працюють дуже добре / найкраще для помірної кількості вершин / ребер, а потім є порог більших вершин / ребер, де логарифмічні алгоритми перевершують лінійний алгоритм. тому логарифмічний fns доступний і може бути значно кращим для дуже великих графіків.
vzn

Відповіді:


7

Існує документ під назвою " Динамічні дерева в практиці ", в якому розглядається практичне втілення.

Інші категорії, за допомогою яких дерево дерев Link-Cut може ефективно використовуватись, - це в Індексації баз даних . Ви можете знайти це в книзі " Методики індексів баз даних ".


думаю, це потребує певної деталізації. дерева звичайно корисні для індексів, звичайно, але за яких умов дерево буде модифіковане?
vzn

@vzn: B +-дерево, R-дерево, H-Tree та X-Tree - деякі приклади.
Реза

Звичайно, але підозрюваний, можливо, ніхто до цього часу не намагався використовувати зрізані посилання дерева в індексах БД. це правдоподібно додаток, але не здається зрозумілим, що вони оптимізовані для тих же операцій, що і в індексах БД.
vzn

5

ця стаття в кінці виявляє, що дерево зрізаних (LC) дерев перевершує дерева граблі-стискання (RC) для алгоритму максимального потоку Sleator / Tarjan, використовуючи стандартний генератор випадкових графів Dimacs.

стаття зосереджується на поширенні змін як на одному застосуванні динамічних дерев. наприклад, розповсюдження змін подібне до того, що комірки таблиць таблиць Excel повинні бути перераховані за змін у деяких клітинках на основі залежності клітин / формули. автори випустили свій код у вигляді відкритої бібліотеки.

Експериментальний аналіз поширення змін у динамічних деревах Acar, Blelloch, Vittes

Поширення змін - це техніка автоматичного налаштування виводу алгоритму на зміни вхідних даних. Ідея розповсюдження змін полягає в тому, щоб відстежувати залежності між викликами даних і функцій, щоб при зміні вводу функції, які впливають на цю зміну, можна було повторно виконувати для оновлення обчислень та результатів. Поширення змін дозволяє компілятору динамізувати статичні алгоритми.


Дякую. Приємно бачити деякі орієнтири алгоритмів, що включають динамічні дерева.
Роб Лаклан
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.