Для установки нажмите кнопочку Установить расширение. И это всё.

Исходный код расширения WIKI 2 регулярно проверяется специалистами Mozilla Foundation, Google и Apple. Вы также можете это сделать в любой момент.

4,5
Келли Слэйтон
Мои поздравления с отличным проектом... что за великолепная идея!
Александр Григорьевский
Я использую WIKI 2 каждый день
и почти забыл как выглядит оригинальная Википедия.
Статистика
На русском, статей
Улучшено за 24 ч.
Добавлено за 24 ч.
Альтернативы
Недавние
Show all languages
Что мы делаем. Каждая страница проходит через несколько сотен совершенствующих техник. Совершенно та же Википедия. Только лучше.
.
Лео
Ньютон
Яркие
Мягкие

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

Из Википедии — свободной энциклопедии

Основанный на поиске путей алгоритм нахождения компонент сильной связности ориентированного графа — это алгоритм, использующий поиск в глубину в комбинации с двумя стеками, один хранит вершины текущей компоненты, а второй хранит текущий путь[1]. Версии этого алгоритма предложили Пёрдом[2], Манро[3], Дейкстра[4], Чериян, Мелхорн[5] и Габов[6]. Из них версия Дейкстры была первой, работающей за линейное время[7]

Описание

Алгоритм осуществляет поиск в глубину на данном графе G, поддерживая два стека, S и P (вдобавок к нормальному стеку вызовов для рекурсивных функций). Стек S содержит все вершины, которые ещё не назначены компоненте сильной связности в порядке, в котором поиск в глубину достигает вершины. Стек P содержит вершины, для которых ещё не определено, какой компоненте связности вершина принадлежит. Алгоритм также использует счётчик C достигнутых вершин, который используется для вычисления предпорядка вершин.

Когда поиск в глубину достигает вершину v, алгоритм осуществляет следующие шаги:

  1. Номер предпорядка вершины v устанавливается в C, а затем C увеличивается.
  2. Вершина v помещается в S и в P.
  3. Для каждой дуги из v в соседнюю вершину w:
    • Если номер предпорядка вершины w ещё не назначен, рекурсивно просматриваем w;
    • В противном случае, если вершина w ещё не назначена компоненте сильной связности:
      • Последовательно выталкиваем вершины из P, пока элемент на вершине стека P не будет иметь номер предпорядка, меньший либо равный номера предпорядка вершины w.
  4. Если вершина v находится на вершине стека P:
    • Выталкиваем вершины из S, пока не будет вытолкнута вершина v, и назначаем вытолкнутые вершины новой компоненте.
    • Выталкиваем v из P.

Алгоритм состоит из цикла по вершинам графа, вызывая рекурсивный поиск на каждой вершине, которой не назначен номер предпорядка.

Связанные алгоритмы

Подобно описанному алгоритму, алгоритм Тарьяна поиска компонент сильной связности также использует поиск в глубину вместе со стеком для хранения вершин, которые ещё не назначены какой-либо компоненте сильной связности, и алгоритм переносит эти вершины в новую компоненту, когда алгоритм кончает расширять последнюю вершину компоненты. Однако вместо стека P алгоритм Тарьяна использует индексированный вершинами массив чисел предпорядка, назначенных в порядке посещения вершин при поиске в глубину. Массив предпорядков используется для отслеживания, когда следует образовать новую компоненту.

Примечания

Литература

  • Cheriyan J., Mehlhorn K. Algorithms for dense graphs and networks on the random access computer // Algorithmica. — 1996. — Т. 15. — С. 521–549. — doi:10.1007/BF01940880.
  • Edsger Dijkstra. Ch. 25 // A Discipline of Programming. — NJ: Prentice Hall, 1976.
    • Э. Дейкстра. Дисциплина программирования. — «Мир», 1978. — (Математическое обеспечение ЭВМ).
  • Harold N. Gabow. Path-based depth-first search for strong and biconnected components // Information Processing Letters. — 2000. — Т. 74, вып. 3-4. — С. 107–114. — doi:10.1016/S0020-0190(00)00051-X.
  • Ian Munro. Efficient determination of the transitive closure of a directed graph // Information Processing Letters. — 1971. — Т. 1. — С. 56–58. — doi:10.1016/0020-0190(71)90006-8.
  • Purdom P., Jr. A transitive closure algorithm // BIT. — 1970. — Т. 10. — С. 76–94. — doi:10.1007/bf01940892.
  • Sedgewick R. 19.8 Strong Components in Digraphs // Algorithms in Java, Part 5 – Graph Algorithms. — 3rd. — Cambridge MA: Addison-Wesley, 2004. — С. 205–216.
Эта страница в последний раз была отредактирована 28 мая 2022 в 17:27.
Как только страница обновилась в Википедии она обновляется в Вики 2.
Обычно почти сразу, изредка в течении часа.
Основа этой страницы находится в Википедии. Текст доступен по лицензии CC BY-SA 3.0 Unported License. Нетекстовые медиаданные доступны под собственными лицензиями. Wikipedia® — зарегистрированный товарный знак организации Wikimedia Foundation, Inc. WIKI 2 является независимой компанией и не аффилирована с Фондом Викимедиа (Wikimedia Foundation).