Upgrade to Pro — share decks privately, control downloads, hide ads and more …

САКОД – 2 курс весна 2021 – 5.3 занятие

САКОД – 2 курс весна 2021 – 5.3 занятие

ТиМПИ

March 23, 2021
Tweet

More Decks by ТиМПИ

Other Decks in Programming

Transcript

  1. Остовное дерево Остовное дерево — ациклический связный подграф данного связного

    неориентированного графа, в который входят все его вершины. 2/15
  2. Свойства остовных деревьев • Любое остовное дерево в графе с

    n вершинами содержит n-1 ребер • Число остовных деревьев в полном графе на n вершинах равно nn-2 (по формуле Кэли) • Число остовных деревьев в полном двудольном графе Km,n равно mn-1⋅nm-1 • В общем случае, число остовных деревьев в произвольном графе может быть вычислено при помощи так называемой матричная теорема о деревьях (теорема Кирхгофа) 3/15
  3. DFS-дерево и BFS-дерево Остовное дерево может быть построено алгоритмом поиска

    в глубину или поиском в ширину. Задание: построить остовное дерево из полносвязного графа с шестью вершинами алгоритмом поиска в ширину/глубину. 4/15
  4. Минимальное остовное дерево Минимальное остовное дерево (в связанном взвешенном неориентированном

    графе) — это остовное дерево графа, имеющее минимальную возможную сумму весов входящих в него рёбер 5/15
  5. Алгоритмы получения Минимального остовного дерева • Алгоритм Прима • Алгоритм

    Кру(а)скала • Алгоритм Борувки • Алгоритм обратного удаления 6/15
  6. Алгоритм Краскала 1. Отсортировать все ребра по возрастанию весе. 2.

    Взять ребро с наименьшим весом и добавьте его в остовное дерево. Если добавление ребра создало цикл, то отклоните это ребро. 3. Пока все вершины не добавлены, выполнить шаг 2. Сложность алгоритма: O(M⋅logN+N2) 7/15
  7. Алгоритм Прима 1. Выбрать любую вершину. 2. Найти минимальное ребро

    из последней вершины, добавить новую вершину в остов. 3. Пока все вершины не найдены, выполнить шаг 2. Сложность: O(M⋅logN)— случай разреженных графов O(N2)— случай плотных графов 10/15
  8. Остовные деревья ориентированных графов • Алгоритм двух китайцев • Алгоритм

    Камерини для MBSA* • Алгоритм Габова и Тарьяна для MBSA* *MBSA — минимально критичное стягивающее ориентированное дерево 13/15
  9. Алгоритм двух китайцев 1. Берем вершину, для которой ещё не

    нашли ответ. Если такой нет, то мы нашли ответ. 2. Выполняем для неё операцию вычитания веса минимального ребра и переходим в её «родителя» по ребру с нулевым весом, повторяем для новой рассматриваемой вершины, пока не произойдет один из двух вариантов: 2.1. Мы пришли в вершину достижимую из корня, следовательно наша изначальная вершина стала достижимой из корня по нулевым ребрам. 2.2. Мы пришли в уже посещенную на данной итерации вершину, следовательно нашли цикл из нулевых ребер. Его необходимо неявно сжать с помощью системы непересекающихся множеств и продолжить идти вверх по нулевым ребрам. Сложность: O(N+Mlog2(N)) 14/15