Скачать презентацию Алгоритмы на графах Основные понятия теории графов Скачать презентацию Алгоритмы на графах Основные понятия теории графов

Алгоритмы на графах.ppt

  • Количество слайдов: 14

Алгоритмы на графах • Основные понятия теории графов. Терминология • Структуры данных для представления Алгоритмы на графах • Основные понятия теории графов. Терминология • Структуры данных для представления графов (матрица примыканий и пр. ) • Алгоритмы обхода в глубину и в ширину (по уровням) и их анализ

Алгоритмы на графах • Алгоритм поиска минимального остовного дерева: Ø Алгоритм Дейкстры-Прима Ø Алгоритм Алгоритмы на графах • Алгоритм поиска минимального остовного дерева: Ø Алгоритм Дейкстры-Прима Ø Алгоритм Крускала • Алгоритм поиска кратчайшего пути: Ø Алгоритм Дейкстры

Связный граф • Связный граф — граф, содержащий ровно одну компоненту связности. Это означает, Связный граф • Связный граф — граф, содержащий ровно одну компоненту связности. Это означает, что между любой парой вершин этого графа существует как минимум один путь. Связность для ориентированных графов • В ориентированных графах различают несколько понятий связности. • Ориентированный граф называется сильно-связным, если в нём существует (ориентированный) путь из любой вершины в любую другую, или, что эквивалентно, граф содержит ровно одну сильно связную компоненту. • Ориентированный граф называется слабо-связным, если является связным неориентированный граф, полученный из него заменой ориентированных рёбер неориентированными.

Односвязный граф • Граф называется односвязным (связным), если: • У него одна компонента связности Односвязный граф • Граф называется односвязным (связным), если: • У него одна компонента связности • Существует путь из любой вершины в любую другую вершину • Существует путь из заданной вершины в любую другую вершину • Содержит связный подграф, включающий все вершины исходного графа • Содержит в качестве подграфа дерево, включающее все вершины исходного графа (такое дерево называется остовным) • При произвольном делении его вершин на 2 группы всегда существует хотя бы 1 ребро, соединяющее пару вершин из разных групп

Остовное дерево — ациклический связный подграф данного связного неориентированного графа, в который входят все Остовное дерево — ациклический связный подграф данного связного неориентированного графа, в который входят все его вершины. Остовное дерево состоит из некоторого подмножества рёбер графа, таких, что из любой вершины графа можно попасть в любую другую вершину, двигаясь по этим рёбрам, и в нём нет циклов, то есть из любой вершины нельзя попасть в саму себя, не пройдя какое-то ребро дважды. Понятие остовный лес неоднозначно, под ним могут понимать один из следующих подграфов: • любой ациклический подграф, в который входят все вершины графа, но не обязательно связный; • в несвязном графе — подграф, состоящий из объединения остовных деревьев для каждой его компоненты связности. Остовное дерево также иногда называют покрывающим деревом, остовом или скелетом графа.

Свойства остовных деревьев Алгоритмы нахождения остовных деревьев Остовное дерево может быть построено практически любым Свойства остовных деревьев Алгоритмы нахождения остовных деревьев Остовное дерево может быть построено практически любым алгоритмом обхода графа, например поиском в глубину или поиском в ширину. Оно состоит из всех пар рёбер , таких, что алгоритм, просматривая вершину обнаруживает в её списке смежности новую, не обнаруженную ранее вершину.

Алгоритмы нахождения остовных деревьев Остовные деревья, построенные при обходе графа алгоритмом Дейкстры, начиная из Алгоритмы нахождения остовных деревьев Остовные деревья, построенные при обходе графа алгоритмом Дейкстры, начиная из вершины , обладают тем свойством, что кратчайший путь в графе из до любой другой вершины — это (единственный) путь из до этой вершины в построенном остовном дереве. Существует также несколько параллельных и распределённых алгоритмов нахождения остовного дерева. Как практический пример распределённого алгоритма можно привести протокол STP. Если каждому ребру графа присвоен вес (длина, стоимость и т. п. ), то нахождением оптимального остовного дерева, которое минимизирует сумму весов входящих в него рёбер, занимаются многочисленные алгоритмы нахождения минимального остовного дерева.

Минимальное остовное дерево (или минимальное покрывающее дерево) в связанном, взвешенном, неориентированном графе — это Минимальное остовное дерево (или минимальное покрывающее дерево) в связанном, взвешенном, неориентированном графе — это остовное дерево этого графа, имеющее минимальный возможный вес, где под весом дерева понимается сумма весов входящих в него рёбер. Если исходный граф несвязен, то описываемую ниже процедуру можно применять поочередно к каждой его компоненте связности, получая тем самым минимальные остовные деревья для этих компонент. Существует несколько алгоритмов для нахождения минимального остовного дерева. Некоторые наиболее известные из них: • Алгоритм Прима; • Алгоритм Краскала (или алгоритм Крускала); • Алгоритм Борувки.

Алгоритм Крускала (или алгоритм Краскала) — алгоритм построения минимального остовного дерева взвешенного связного неориентированного Алгоритм Крускала (или алгоритм Краскала) — алгоритм построения минимального остовного дерева взвешенного связного неориентированного графа. Алгоритм впервые описан Джозефом Крускалом в 1956 году. Вначале текущее множество рёбер устанавливается пустым. Затем, пока это возможно, проводится следующая операция: из всех рёбер, добавление которых к уже имеющемуся множеству не вызовет появление в нём цикла, выбирается ребро минимального веса и добавляется к уже имеющемуся множеству. Когда таких рёбер больше нет, алгоритм завершён. Подграф данного графа, содержащий все его вершины и найденное множество рёбер, является его остовным деревом минимального веса.

Алгоритм Прима (Прима-Дейкстры) — алгоритм построения минимального остовного дерева взвешенного связного неориентированного графа. Алгоритм Алгоритм Прима (Прима-Дейкстры) — алгоритм построения минимального остовного дерева взвешенного связного неориентированного графа. Алгоритм впервые был открыт в 1930 году чешским математиком Войцехом Ярником, позже переоткрыт Робертом Примом в 1957 году, и, независимо от них, Э. Дейкстрой в 1959 году. Построение начинается с дерева, включающего в себя одну (произвольную) вершину. В течение работы алгоритма дерево разрастается, пока не охватит все вершины исходного графа. На каждом шаге алгоритма к текущему дереву присоединяется самое лёгкое из рёбер, соединяющих вершину из построенного дерева и вершину не из дерева. Вход - Связный неориентированный граф Выход - Множество T рёбер минимального остовного дерева

Алгоритм Борувки — это алгоритм нахождения минимального остовного дерева в графе. Впервые был опубликован Алгоритм Борувки — это алгоритм нахождения минимального остовного дерева в графе. Впервые был опубликован в 1926 году Отакаром Борувкой в качестве метода нахождения оптимальной электрической сети в Моравии. Несколько раз был переоткрыт, например Флореком, Перкалом и Соллином. Последний, кроме того, был единственным западным ученым из этого списка, и поэтому алгоритм часто называют алгоритмом Соллина, особенно в литературе по параллельным вычислениям. Работа алгоритма состоит из нескольких итераций, каждая из которых состоит в последовательном добавлении рёбер к остовному лесу графа, до тех пор, пока лес не превратится в дерево, то есть, лес, состоящий из одной компоненты связности.

Алгоритмы поиска на графах • • • Алгоритмы поиска на графах A* B* Алгоритм Алгоритмы поиска на графах • • • Алгоритмы поиска на графах A* B* Алгоритм Беллмана — Форда Двунаправленный поиск Алгоритм Дейкстры Алгоритм Джонсона Поиск в ширину Поиск в глубину Поиск с ограничением глубины Поиск по первому наилучшему совпадению Алгоритм Флойда — Уоршелла

Алгоритм Дейкстры Алгори тм Де йкстры (англ. Dijkstra’s algorithm) — алгоритм на графах, изобретённый Алгоритм Дейкстры Алгори тм Де йкстры (англ. Dijkstra’s algorithm) — алгоритм на графах, изобретённый нидерландским ученым Э. Дейкстрой в 1959 году. Находит кратчайшее расстояние от одной из вершин графа до всех остальных. Алгоритм работает только для графов без рёбер отрицательного веса. Каждой вершине из V сопоставим метку — минимальное известное расстояние от этой вершины до a. Алгоритм работает пошагово — на каждом шаге он «посещает» одну вершину и пытается уменьшать метки. Работа алгоритма завершается, когда все вершины посещены.