ГРАФЫ ИХ ПРЕДСТАВЛЕНИЕ В stl

33
ГРАФЫ ИХ ПРЕДСТАВЛЕНИЕ В STL u Отделение программной инженерии группа 271 ПИ Антонова Н.А.

Upload: brygid

Post on 05-Jan-2016

83 views

Category:

Documents


4 download

DESCRIPTION

u. ГРАФЫ ИХ ПРЕДСТАВЛЕНИЕ В STL. Отделение программной инженерии группа 271 ПИ Антонова Н.А. ГРАФ. G = . множество вершин ( vertices ) |V|=N. множество пар вершин – дуг (arcs) |E|=M. БИБЛИОТЕКА STL. STANDARD TEMPLATE LIBRARY стандартная библиотека шаблонов. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: ГРАФЫ ИХ ПРЕДСТАВЛЕНИЕ  В  STL

ГРАФЫИХ ПРЕДСТАВЛЕНИЕ

В STL

u

Отделение

программной инженерии

группа 271 ПИ

Антонова Н.А.

Page 2: ГРАФЫ ИХ ПРЕДСТАВЛЕНИЕ  В  STL

G = <V, E>

множество вершин (vertices)

|V|=N

множество пар вершин – дуг (arcs)

|E|=M

ГРАФГРАФ

Page 3: ГРАФЫ ИХ ПРЕДСТАВЛЕНИЕ  В  STL

БИБЛИОТЕКАБИБЛИОТЕКА STLSTLSTANDARD TEMPLATE LIBRARY

стандартная библиотека шаблонов

Это библиотека шаблонов

и функций С++,

включающая в себя

различные контейнеры

данных (список, очередь,

множество, отображение,

хэш-таблица, очередь с

приоритетами) и базовые

алгоритмы (сортировка,

поиск)

Page 4: ГРАФЫ ИХ ПРЕДСТАВЛЕНИЕ  В  STL

Последовательные Ассоциативные(линейный список) (ключ – значение)

• list• vector• deque• …

КОНТЕЙНЕРЫКОНТЕЙНЕРЫ

• map• multimap• set• …

Page 5: ГРАФЫ ИХ ПРЕДСТАВЛЕНИЕ  В  STL

VECTOR – динамический массив– size() – возвращает текущий размер вектора– begin() – возвращает итератор, установленный на начало вектора– end() - возвращает итератор, установленный на конец вектора– push_back() – записывает значение в конец вектора– insert() – записывает значение непосредственно перед

элементом, на который ссылается итератор– erase() – удаляет элемент из вектора– …

vector<char> iv; //пустой вектор

int i; //счетчик

for (i=0; i<10; i++) v[i] = i + ’a’; //заполнение

//устанавливаем итератор в конец

vector<char>::iterator p=v.end();

v.insert (p,3,’X’); //вставляем три символа Х в

вектор

//выводим на экран содержимое вектора

for (i=0; i<v.size(); i++) cout<< v[i] << “ “;

КОНТЕЙНЕРЫКОНТЕЙНЕРЫ

Page 6: ГРАФЫ ИХ ПРЕДСТАВЛЕНИЕ  В  STL

VECTOR – динамический массив– size() – возвращает текущий размер вектора– begin() – возвращает итератор, установленный на начало вектора– end() - возвращает итератор, установленный на конец вектора– push_back() – записывает значение в конец вектора– insert() – записывает значение непосредственно перед

элементом, на который ссылается итератор– erase() – удаляет элемент из вектора– …

на экране:

a b c d e f g h i j X X X

КОНТЕЙНЕРЫКОНТЕЙНЕРЫ

Page 7: ГРАФЫ ИХ ПРЕДСТАВЛЕНИЕ  В  STL

SET – упорядоченные уникальные значения;

MAP – ассоциативный контейнер:уникальный ключ – значение

map<string, string> m1; //ключ и значение – строковый тип

//заполнение: ключ-значение хранится с помощью стандартного типа пары

m1.insert(pair<string, string>("apple", "a small red fruit"));

m1.insert(pair<string, string>("orange", "a small orange fruit"));

m1["banana"] = "a long yellow fruit"; //заполнение

//вывод на экран вариант 1

map<string, string>::iterator it = m1.begin();

for ( ; it != m1.end(); it++) {

cout << it->first << ": " << it->second << endl;

}

//вывод на экран вариант 2

cout << m1["apple"] << endl;

cout << m1["orange"] << endl;

cout << m1["banana"] << endl;

КОНТЕЙНЕРЫКОНТЕЙНЕРЫ

Page 8: ГРАФЫ ИХ ПРЕДСТАВЛЕНИЕ  В  STL

MAP – ассоциативный контейнер:уникальный ключ – значение

на экране:

apple: a small red fruit

orange: a small orange fruit

banana: a long yellow fruit

a small red fruit

a small orange fruit

a long yellow fruit

КОНТЕЙНЕРЫКОНТЕЙНЕРЫ

Page 9: ГРАФЫ ИХ ПРЕДСТАВЛЕНИЕ  В  STL

MULTIMAP – ключ может иметь несколько значенийPRIORITY_QUEUE – очередь с приоритетами

priority_queue<int> pq;

pq.push(1); //добавляем элемент

pq.push(4);

pq.push(2);

cout << pq.top() << endl; // выводит '4'

pq.pop(); // удаление элемента

cout << pq.top() << endl; // выводит '2'

pq.pop(); // удаление элемента

cout << pq.top() << endl; // выводит '1'

cout << pq.size() << endl; // выводит '1'

КОНТЕЙНЕРЫКОНТЕЙНЕРЫ

Page 10: ГРАФЫ ИХ ПРЕДСТАВЛЕНИЕ  В  STL

Вершины, соединенные дугой, называются смежными

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

Дуга и любая из ее вершин называются инцидентными

СМЕЖНОСТЬ и СМЕЖНОСТЬ и ИНЦИДЕНТНОСТЬИНЦИДЕНТНОСТЬ

Page 11: ГРАФЫ ИХ ПРЕДСТАВЛЕНИЕ  В  STL

ПРЕДСТАВЛЕНИЕ ПРЕДСТАВЛЕНИЕ ГРАФОВГРАФОВ

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

2. Матрица инциденций

3. Структуры смежности

4. Массив дуг

Page 12: ГРАФЫ ИХ ПРЕДСТАВЛЕНИЕ  В  STL

Это двумерный массив размером NxN, где N – мощность множества вершин V (|V|=N)

МАТРИЦА МАТРИЦА СМЕЖНОСТИСМЕЖНОСТИ

//двумерный массив#include <vector>typedef std::vector< std::vector< bool > > Matrix;Matrix m;

Page 13: ГРАФЫ ИХ ПРЕДСТАВЛЕНИЕ  В  STL

МАТРИЦА МАТРИЦА ИНЦИДЕНЦИЙИНЦИДЕНЦИЙ

Это двумерный массив размером NxМ, где N – мощность множества вершин V (|V|=N),

М – мощность множества ребер (|E|=M)

1 2 3 4 5 6 7 8

1 1 0

0 0 1 0 0 0

2 0 0 1 0 1 0 0 0

3 0 0 1 1 0 0 0 0

4 0 1 0 1 0 0 0 1

5 0 0 0 0 0 0 0 1

6 1 0 0 0 0 0 1 0

7 0 0 0 0 0 1 1 0

8 0 0 0 0 0 1 0 0

9 0 1 0 0 0 0 0 0

Page 14: ГРАФЫ ИХ ПРЕДСТАВЛЕНИЕ  В  STL

Это одномерный массив размером N, где N – мощность множества вершин V (|V|=N). Элемент

массива – указатель на начало списка, где храниться перечень вершин, смежных с

рассматриваемой

СТРУКТУРА СТРУКТУРА СМЕЖНОСТИСМЕЖНОСТИ

struct node{ int v; node* next;

node (int x, node* t) { v = x; next = t; }};typedef node* link;vector <link> adj;

Page 15: ГРАФЫ ИХ ПРЕДСТАВЛЕНИЕ  В  STL

Это двумерный массив размером Мx2, где М – мощность множества ребер Е (|Е|=М)

МАССИВ ДУГМАССИВ ДУГ

//map#include <map>typedef std::map< int, int > Matrix;Matrix m;

Page 16: ГРАФЫ ИХ ПРЕДСТАВЛЕНИЕ  В  STL

Использование в прикладных Использование в прикладных задачахзадачах

• Географические карты и маршруты

• Расписания (scheduling)

• Web (гипертекст)

• Сети (networks) и т.д.

Page 17: ГРАФЫ ИХ ПРЕДСТАВЛЕНИЕ  В  STL

Сеть европейских железных дорог

ПОИСК КРАТЧАЙШЕГО ПОИСК КРАТЧАЙШЕГО ПУТИПУТИ

Page 18: ГРАФЫ ИХ ПРЕДСТАВЛЕНИЕ  В  STL

ПУТЬПУТЬПуть – последовательность вершин, соединенных

ребрами

Длина пути – число ребер(невзвешенная) или сумма весов всех ребер (взвешенная), входящих в путь

Page 19: ГРАФЫ ИХ ПРЕДСТАВЛЕНИЕ  В  STL

ПРЕДСТАВЛЕНИЕПРЕДСТАВЛЕНИЕmap<string, list<Service*> > outgoing_services;

map<string, City*> cities;

Page 20: ГРАФЫ ИХ ПРЕДСТАВЛЕНИЕ  В  STL

АЛГОРИТМ АЛГОРИТМ ДЕЙКСТРЫДЕЙКСТРЫ

Инициализация Метка начальной вершины полагается равной 0, метки остальных вершин — бесконечности (расстояния до них пока неизвестны)

Шаг алгоритма• Если все вершины посещены, алгоритм завершается• В противном случае из еще не посещенных вершин выбирается вершина U, имеющая минимальную метку• Рассматриваются все смежные к ней вершины. Для каждой из них определяется новая длина пути, равную сумме текущей метки U и длины ребра, их соединяющего• Если полученная длина меньше метки новой вершины, заменим метку этой длиной• Рассмотрев все такие вершины, пометим вершину U как посещенную и повторим шаг

Page 21: ГРАФЫ ИХ ПРЕДСТАВЛЕНИЕ  В  STL
Page 22: ГРАФЫ ИХ ПРЕДСТАВЛЕНИЕ  В  STL

ОСНОВНЫЕ АЛГОРИТМЫ ОСНОВНЫЕ АЛГОРИТМЫ НА ГРАФАХНА ГРАФАХ

Page 23: ГРАФЫ ИХ ПРЕДСТАВЛЕНИЕ  В  STL

BBreadthreadth-F-First irst SSearch earch Поиск в ширинуПоиск в ширину

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

следующему уровню

Page 24: ГРАФЫ ИХ ПРЕДСТАВЛЕНИЕ  В  STL

• Рассматриваются все вершины, связанные с текущей

• Выбирается та вершина, которая раньше была рассмотрена

• Структура данных – очередь

Page 25: ГРАФЫ ИХ ПРЕДСТАВЛЕНИЕ  В  STL
Page 26: ГРАФЫ ИХ ПРЕДСТАВЛЕНИЕ  В  STL
Page 27: ГРАФЫ ИХ ПРЕДСТАВЛЕНИЕ  В  STL
Page 28: ГРАФЫ ИХ ПРЕДСТАВЛЕНИЕ  В  STL

Depth-First SearchDepth-First SearchПоиск в глубинуПоиск в глубину

метод анализа структуры графа, при котором узлы анализируются

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

ближайшие к стартовому

Page 29: ГРАФЫ ИХ ПРЕДСТАВЛЕНИЕ  В  STL

• Поиск начинается с некоторой фиксированной вершины v

• Рассматривается вершина u, смежная с v

• Если нет вершин, смежных с текущей, возврат к предыдущей (если эта вершина – v, то просмотр окончен)

• Структура данных – стек

Page 30: ГРАФЫ ИХ ПРЕДСТАВЛЕНИЕ  В  STL
Page 31: ГРАФЫ ИХ ПРЕДСТАВЛЕНИЕ  В  STL
Page 32: ГРАФЫ ИХ ПРЕДСТАВЛЕНИЕ  В  STL
Page 33: ГРАФЫ ИХ ПРЕДСТАВЛЕНИЕ  В  STL

СПАСИБО ЗА ВНИМАНИЕ!