Наиболее известный транзитивный алгоритм закрытия для графа

В терминах времени выполнения, какой наиболее известный транзитивный алгоритм закрытия для ориентированных графов?

В настоящее время я использую алгоритм Варшалла, но его O (n ^ 3). Хотя из-за графического представления моя реализация немного улучшилась (вместо проверки всех ребер он проверяет все исходящие ребра). Существует ли какой-либо транзитивный алгоритм закрытия, который лучше этого? В частности, есть ли что-то конкретное для многопоточных архитектур разделяемой памяти?

Спасибо заранее.

Raghava.

Ответ 1

В этой статье обсуждаются характеристики различных транзитивных алгоритмов замыкания:

http://www.vldb.org/conf/1988/P382.PDF

Одна интересная идея из статьи состоит в том, чтобы избежать перекомпоновки всего закрытия при изменении графика.

Существует также эта страница Esko Nuutila, в которой перечислены несколько новых алгоритмов:

http://www.cs.hut.fi/~enu/tc.html

Его кандидатская диссертация, указанная на этой странице, может быть лучшим местом для начала:

http://www.cs.hut.fi/~enu/thesis.html

С этой страницы:

Эксперименты также показывают, что с интервальным представлением и новые алгоритмы, транзитивное замыкание может быть вычислено обычно во времени, линейном до размера входного графика.

Ответ 2

Руководство по разработке алгоритмов содержит некоторую полезную информацию. Ключевые моменты:

  • Переходное замыкание столь же сложно, как и матричное умножение; поэтому наиболее известной оценкой является алгоритм Coppersmith-Winograd, который работает в O (n ^ 2.376), но на практике, вероятно, не стоит использовать матрицу алгоритмы умножения.
  • Для эвристического ускорения сначала вычислите сильно связанные компоненты.