26
Выполнила Тагирова Лиана 271 ПИ Графы и их представление в STL

Выполнила Тагирова Лиана 271 ПИ

  • Upload
    mieko

  • View
    75

  • Download
    0

Embed Size (px)

DESCRIPTION

Графы и их представление в STL. Выполнила Тагирова Лиана 271 ПИ. Что такое граф?. Граф или неориентированный граф G — это упорядоченная пара G = < V , E > , для которой выполнены следующие условия: V это множество вершин или узлов , - PowerPoint PPT Presentation

Citation preview

Page 1: Выполнила Тагирова Лиана  271 ПИ

Выполнила Тагирова Лиана 271 ПИ

Графы и их представление в STL

Page 2: Выполнила Тагирова Лиана  271 ПИ

Что такое граф?

Граф или неориентированный граф G — это упорядоченная пара G = <V,E>, для которой выполнены следующие условия:

V это множество вершин или узлов,

E это множество пар (неупорядоченных) различных вершин, называемых рёбрами.

Page 3: Выполнила Тагирова Лиана  271 ПИ

Свойства графа:

•Два ребра называются смежными, если они имеют общую концевую вершину.

•Два ребра называются кратными, если множества их концевых вершин совпадают.

Page 4: Выполнила Тагирова Лиана  271 ПИ

Ориентированный граф Ориентированный граф

(сокращенно орграф) G — это упорядоченная пара G = <V,A>, для которой выполнены следующие условия:

V это множество вершин или узлов,

A это множество (упорядоченных) пар различных вершин, называемых дугами или ориентированными рёбрами.

Дуга — это упорядоченная пара вершин (v,w), где вершину v называют началом, а w — концом дуги. Можно сказать, что дуга v w ведёт от вершины v к вершине w.

Page 5: Выполнила Тагирова Лиана  271 ПИ

Смешанный граф

Смешанный граф G — это граф, в котором некоторые рёбра могут быть ориентированными, а некоторые — неориентированными. Записывается упорядоченной тройкой G= <V,E,A>, где V, E и A определены так же, как для ориентированного графа.

Page 6: Выполнила Тагирова Лиана  271 ПИ

Путь: виды и свойства

Путём (или цепью) в графе называют конечную последовательность вершин, в которой каждая вершина (кроме последней) соединена со следующей в последовательности вершин ребром.

Page 7: Выполнила Тагирова Лиана  271 ПИ

Путь: виды и свойства

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

Циклом называют путь, в котором первая и последняя вершины совпадают. При этом длиной пути (или цикла) называют число составляющих его рёбер. Заметим, что если вершины u и v являются концами некоторого ребра, то согласно данному определению, последовательность (u,v,u) является циклом. Чтобы избежать таких «вырожденных» случаев, вводят следующие понятия.

Page 8: Выполнила Тагирова Лиана  271 ПИ

Дополнительные характеристики графов

Граф называется: связным, если для любых вершин u,v

есть путь из u в v.

сильно связным или ориентированно связным, если он ориентированный, и из любой вершины в любую другую имеется ориентированный путь.

деревом, если он связный и не содержит простых циклов.

Page 9: Выполнила Тагирова Лиана  271 ПИ

Представление Представление графовграфов

Page 10: Выполнила Тагирова Лиана  271 ПИ

Абстрактный граф в С++ class Graph { public:

Graph (int numV_, bool directed_): numV(numV_), numE(0), directed(directed_) {} virtual ~Graph() {} int V() const {return numV;} int E() const {return numE;} bool isDirected() const {return directed;} virtual void insert(Edge) = 0; virtual void remove (Edge) = 0; virtual bool isEdge(int,int) const = 0;

protected: int numV; int numE; bool directed;

};

Page 11: Выполнила Тагирова Лиана  271 ПИ

Представление графов

Матрица смежности Список смежных вершин

Page 12: Выполнила Тагирова Лиана  271 ПИ

Матрица смежности

•Матрица M размером NxN (N – мощность множества вершин V (|V|=N) •Элемент матрицы M[i,j] равен 1, если (i,j) – ребро и 0 – если нет.

Page 13: Выполнила Тагирова Лиана  271 ПИ

Класс vectorКонтейнер vector обеспечивает структуру данных непрерывной областью памяти. Это позволяет обеспечивает эффективный прямой доступ к любому элементу контейнера vector посредством операции индексирования []. Все алгоритмы STL могут работать с контейнером vector. Итераторы для vector обычно реализуются как указатели на элементы контейнера vector.

Page 14: Выполнила Тагирова Лиана  271 ПИ

Матрица смежности-реализация

class AdjMatrixGraph : public Graph {public:

std::vector<std::vector<bool> > adj; // двухмерн. массив AdjMatrixGraph(int numV_, bool directed_ = false) : Graph(numV_, directed_) { adj.resize(numV_); for (int i = 0; i != numV; ++i)

adj[i] = std::vector<bool>(numV_, false); } void insert (Edge e) {

if (!adj[e.v][e.w]) { adj[e.v][e.w] = true; if (!directed) adj[e.w][e.v] = true; ++numE;

} }

Page 15: Выполнила Тагирова Лиана  271 ПИ

Матрица смежности-реализация 2

void remove (Edge e) { if (adj[e.v][e.w]) { adj[e.v][e.w] = false; if (!directed) adj[e.w][e.v] = false; --numE; } }; bool isEdge(int u, int v) const { return adj[u][v]; }

}

Page 16: Выполнила Тагирова Лиана  271 ПИ

Характеристики представления Проверка на существование ребра

isEdge(i,j) – O(1) Перебор всех верших – O(n) Перебор всех ребер - O(n2)

Page 17: Выполнила Тагирова Лиана  271 ПИ

Список смежных вершин

Представляет собой набор связных списков, в которых хранятся инцендентные соседи каждого ребра

Page 18: Выполнила Тагирова Лиана  271 ПИ

Реализация class AdjListGraph : public Graph {

public: std::vector<std::list<int> > adj; AdjListGraph(int numV_, bool directed_ = false) : Graph(numV_, directed_), adj(numV_) {} void insert(Edge e) {

if (!(0 <= e.v && e.v <= numV && 0 <= e.w && e.w < numV))

throw "Invalid vertex"; adj[e.v].push_back(e.w); ++numE; if (!directed) adj[e.w].push_back(e.v);

}

Page 19: Выполнила Тагирова Лиана  271 ПИ

Реализация void remove(Edge e) {

std::list<int>::iterator itr = std::find(adj[e.v].begin(), adj[e.v].end(), e.w); if (itr != adj[e.v].end()){ adj[e.v].erase(itr); --numE; if (!directed) { itr = std::find(adj[e.w].begin(), adj[e.w].end(), e.v); adj[e.w].erase(itr); } }

} bool isEdge(int u, int v) const { std::list<int>::const_iterator itr = std::find(adj[u].begin(), adj[u].end(), v); return itr != adj[u].end(); }

}

Page 20: Выполнила Тагирова Лиана  271 ПИ

Характеристики представления isEdge (i,j) – O(|E|) Перебор вершин - O(|E|) Перебор всех ребер - O(|E|)

Обычно, |E|<<|V|2,поэтому чаще используют связный список смежных вершин

Page 21: Выполнила Тагирова Лиана  271 ПИ

Пример использования на задаче:

Page 22: Выполнила Тагирова Лиана  271 ПИ

Постановка задачи: Предположим, к примеру, что мы используем текстовые строки для кодирования названий городов и хотим сконструировать карту, где значения ребер графа — это расстояние между двумя соответствующими городами. Такой граф показан на рис.:

Взвешенный граф

Page 23: Выполнила Тагирова Лиана  271 ПИ

Операторы инициализации графа:

Page 24: Выполнила Тагирова Лиана  271 ПИ

Можно использовать набор классических алгоритмов для обработки таких графов. Одним из примеров является алгоритм Дейкстры поиска кратчайшего пути. Требуется указать город, с которого начинается путь. При этом создается приоритетная очередь для пар расстояние/ город. Она инициализируется нулем для начального города. Приоритетная очередь содержит города в порядке от ближайшего до самого дальнего.

Page 25: Выполнила Тагирова Лиана  271 ПИ

При каждой итерации цикла мы извлекаем из очереди город. Если для него еще не найдено кратчайшего пути, записывается текущее расстояние и путем проверки графа вычисляется расстояние до соседних городов. Этот процесс продолжается до тех пор, пока не будет исчерпана приоритетная очередь.

Page 26: Выполнила Тагирова Лиана  271 ПИ

Список исрользованных материалов: Лекции по курсу «Алгоритмы и

структуры данных» Г. Шилдт «Полный справочник по

С++» электронная энциклопедия

«wikipedia.org» http://www.freesource.info/