Download - ГРАФЫ ИХ ПРЕДСТАВЛЕНИЕ В STL u Отделение программной инженерии группа 271 ПИ Антонова Н. А
![Page 1: ГРАФЫ ИХ ПРЕДСТАВЛЕНИЕ В STL u Отделение программной инженерии группа 271 ПИ Антонова Н. А](https://reader031.vdocuments.site/reader031/viewer/2022012913/56649d435503460f94a20067/html5/thumbnails/1.jpg)
ГРАФЫИХ ПРЕДСТАВЛЕНИЕ
В STL
u
Отделение
программной инженерии
группа 271 ПИ
Антонова Н.А.
![Page 2: ГРАФЫ ИХ ПРЕДСТАВЛЕНИЕ В STL u Отделение программной инженерии группа 271 ПИ Антонова Н. А](https://reader031.vdocuments.site/reader031/viewer/2022012913/56649d435503460f94a20067/html5/thumbnails/2.jpg)
G = <V, E>
множество вершин (vertices)
|V|=N
множество пар вершин – дуг (arcs)
|E|=M
ГРАФГРАФ
![Page 3: ГРАФЫ ИХ ПРЕДСТАВЛЕНИЕ В STL u Отделение программной инженерии группа 271 ПИ Антонова Н. А](https://reader031.vdocuments.site/reader031/viewer/2022012913/56649d435503460f94a20067/html5/thumbnails/3.jpg)
БИБЛИОТЕКАБИБЛИОТЕКА STLSTLSTANDARD TEMPLATE LIBRARY
стандартная библиотека шаблонов
Это библиотека шаблонов
и функций С++,
включающая в себя
различные контейнеры
данных (список, очередь,
множество, отображение,
хэш-таблица, очередь с
приоритетами) и базовые
алгоритмы (сортировка,
поиск)
![Page 4: ГРАФЫ ИХ ПРЕДСТАВЛЕНИЕ В STL u Отделение программной инженерии группа 271 ПИ Антонова Н. А](https://reader031.vdocuments.site/reader031/viewer/2022012913/56649d435503460f94a20067/html5/thumbnails/4.jpg)
Последовательные Ассоциативные(линейный список) (ключ – значение)
• list• vector• deque• …
КОНТЕЙНЕРЫКОНТЕЙНЕРЫ
• map• multimap• set• …
![Page 5: ГРАФЫ ИХ ПРЕДСТАВЛЕНИЕ В STL u Отделение программной инженерии группа 271 ПИ Антонова Н. А](https://reader031.vdocuments.site/reader031/viewer/2022012913/56649d435503460f94a20067/html5/thumbnails/5.jpg)
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 u Отделение программной инженерии группа 271 ПИ Антонова Н. А](https://reader031.vdocuments.site/reader031/viewer/2022012913/56649d435503460f94a20067/html5/thumbnails/6.jpg)
VECTOR – динамический массив– size() – возвращает текущий размер вектора– begin() – возвращает итератор, установленный на начало вектора– end() - возвращает итератор, установленный на конец вектора– push_back() – записывает значение в конец вектора– insert() – записывает значение непосредственно перед
элементом, на который ссылается итератор– erase() – удаляет элемент из вектора– …
на экране:
a b c d e f g h i j X X X
КОНТЕЙНЕРЫКОНТЕЙНЕРЫ
![Page 7: ГРАФЫ ИХ ПРЕДСТАВЛЕНИЕ В STL u Отделение программной инженерии группа 271 ПИ Антонова Н. А](https://reader031.vdocuments.site/reader031/viewer/2022012913/56649d435503460f94a20067/html5/thumbnails/7.jpg)
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 u Отделение программной инженерии группа 271 ПИ Антонова Н. А](https://reader031.vdocuments.site/reader031/viewer/2022012913/56649d435503460f94a20067/html5/thumbnails/8.jpg)
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 u Отделение программной инженерии группа 271 ПИ Антонова Н. А](https://reader031.vdocuments.site/reader031/viewer/2022012913/56649d435503460f94a20067/html5/thumbnails/9.jpg)
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 u Отделение программной инженерии группа 271 ПИ Антонова Н. А](https://reader031.vdocuments.site/reader031/viewer/2022012913/56649d435503460f94a20067/html5/thumbnails/10.jpg)
Вершины, соединенные дугой, называются смежными
Дуги, имеющие общую вершину, также называются смежными
Дуга и любая из ее вершин называются инцидентными
СМЕЖНОСТЬ и СМЕЖНОСТЬ и ИНЦИДЕНТНОСТЬИНЦИДЕНТНОСТЬ
![Page 11: ГРАФЫ ИХ ПРЕДСТАВЛЕНИЕ В STL u Отделение программной инженерии группа 271 ПИ Антонова Н. А](https://reader031.vdocuments.site/reader031/viewer/2022012913/56649d435503460f94a20067/html5/thumbnails/11.jpg)
ПРЕДСТАВЛЕНИЕ ПРЕДСТАВЛЕНИЕ ГРАФОВГРАФОВ
1. Матрица смежности
2. Матрица инциденций
3. Структуры смежности
4. Массив дуг
![Page 12: ГРАФЫ ИХ ПРЕДСТАВЛЕНИЕ В STL u Отделение программной инженерии группа 271 ПИ Антонова Н. А](https://reader031.vdocuments.site/reader031/viewer/2022012913/56649d435503460f94a20067/html5/thumbnails/12.jpg)
Это двумерный массив размером NxN, где N – мощность множества вершин V (|V|=N)
МАТРИЦА МАТРИЦА СМЕЖНОСТИСМЕЖНОСТИ
//двумерный массив#include <vector>typedef std::vector< std::vector< bool > > Matrix;Matrix m;
![Page 13: ГРАФЫ ИХ ПРЕДСТАВЛЕНИЕ В STL u Отделение программной инженерии группа 271 ПИ Антонова Н. А](https://reader031.vdocuments.site/reader031/viewer/2022012913/56649d435503460f94a20067/html5/thumbnails/13.jpg)
МАТРИЦА МАТРИЦА ИНЦИДЕНЦИЙИНЦИДЕНЦИЙ
Это двумерный массив размером 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 u Отделение программной инженерии группа 271 ПИ Антонова Н. А](https://reader031.vdocuments.site/reader031/viewer/2022012913/56649d435503460f94a20067/html5/thumbnails/14.jpg)
Это одномерный массив размером 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 u Отделение программной инженерии группа 271 ПИ Антонова Н. А](https://reader031.vdocuments.site/reader031/viewer/2022012913/56649d435503460f94a20067/html5/thumbnails/15.jpg)
Это двумерный массив размером Мx2, где М – мощность множества ребер Е (|Е|=М)
МАССИВ ДУГМАССИВ ДУГ
//map#include <map>typedef std::map< int, int > Matrix;Matrix m;
![Page 16: ГРАФЫ ИХ ПРЕДСТАВЛЕНИЕ В STL u Отделение программной инженерии группа 271 ПИ Антонова Н. А](https://reader031.vdocuments.site/reader031/viewer/2022012913/56649d435503460f94a20067/html5/thumbnails/16.jpg)
Использование в прикладных Использование в прикладных задачахзадачах
• Географические карты и маршруты
• Расписания (scheduling)
• Web (гипертекст)
• Сети (networks) и т.д.
![Page 17: ГРАФЫ ИХ ПРЕДСТАВЛЕНИЕ В STL u Отделение программной инженерии группа 271 ПИ Антонова Н. А](https://reader031.vdocuments.site/reader031/viewer/2022012913/56649d435503460f94a20067/html5/thumbnails/17.jpg)
Сеть европейских железных дорог
ПОИСК КРАТЧАЙШЕГО ПОИСК КРАТЧАЙШЕГО ПУТИПУТИ
![Page 18: ГРАФЫ ИХ ПРЕДСТАВЛЕНИЕ В STL u Отделение программной инженерии группа 271 ПИ Антонова Н. А](https://reader031.vdocuments.site/reader031/viewer/2022012913/56649d435503460f94a20067/html5/thumbnails/18.jpg)
ПУТЬПУТЬПуть – последовательность вершин, соединенных
ребрами
Длина пути – число ребер(невзвешенная) или сумма весов всех ребер (взвешенная), входящих в путь
![Page 19: ГРАФЫ ИХ ПРЕДСТАВЛЕНИЕ В STL u Отделение программной инженерии группа 271 ПИ Антонова Н. А](https://reader031.vdocuments.site/reader031/viewer/2022012913/56649d435503460f94a20067/html5/thumbnails/19.jpg)
ПРЕДСТАВЛЕНИЕПРЕДСТАВЛЕНИЕmap<string, list<Service*> > outgoing_services;
map<string, City*> cities;
![Page 20: ГРАФЫ ИХ ПРЕДСТАВЛЕНИЕ В STL u Отделение программной инженерии группа 271 ПИ Антонова Н. А](https://reader031.vdocuments.site/reader031/viewer/2022012913/56649d435503460f94a20067/html5/thumbnails/20.jpg)
АЛГОРИТМ АЛГОРИТМ ДЕЙКСТРЫДЕЙКСТРЫ
Инициализация Метка начальной вершины полагается равной 0, метки остальных вершин — бесконечности (расстояния до них пока неизвестны)
Шаг алгоритма• Если все вершины посещены, алгоритм завершается• В противном случае из еще не посещенных вершин выбирается вершина U, имеющая минимальную метку• Рассматриваются все смежные к ней вершины. Для каждой из них определяется новая длина пути, равную сумме текущей метки U и длины ребра, их соединяющего• Если полученная длина меньше метки новой вершины, заменим метку этой длиной• Рассмотрев все такие вершины, пометим вершину U как посещенную и повторим шаг
…
![Page 21: ГРАФЫ ИХ ПРЕДСТАВЛЕНИЕ В STL u Отделение программной инженерии группа 271 ПИ Антонова Н. А](https://reader031.vdocuments.site/reader031/viewer/2022012913/56649d435503460f94a20067/html5/thumbnails/21.jpg)
![Page 22: ГРАФЫ ИХ ПРЕДСТАВЛЕНИЕ В STL u Отделение программной инженерии группа 271 ПИ Антонова Н. А](https://reader031.vdocuments.site/reader031/viewer/2022012913/56649d435503460f94a20067/html5/thumbnails/22.jpg)
ОСНОВНЫЕ АЛГОРИТМЫ ОСНОВНЫЕ АЛГОРИТМЫ НА ГРАФАХНА ГРАФАХ
![Page 23: ГРАФЫ ИХ ПРЕДСТАВЛЕНИЕ В STL u Отделение программной инженерии группа 271 ПИ Антонова Н. А](https://reader031.vdocuments.site/reader031/viewer/2022012913/56649d435503460f94a20067/html5/thumbnails/23.jpg)
BBreadthreadth-F-First irst SSearch earch Поиск в ширинуПоиск в ширину
метод анализа структуры графа, при котором каждый уровень полностью подвергается анализу до перехода к
следующему уровню
![Page 24: ГРАФЫ ИХ ПРЕДСТАВЛЕНИЕ В STL u Отделение программной инженерии группа 271 ПИ Антонова Н. А](https://reader031.vdocuments.site/reader031/viewer/2022012913/56649d435503460f94a20067/html5/thumbnails/24.jpg)
• Рассматриваются все вершины, связанные с текущей
• Выбирается та вершина, которая раньше была рассмотрена
•
• Структура данных – очередь
![Page 25: ГРАФЫ ИХ ПРЕДСТАВЛЕНИЕ В STL u Отделение программной инженерии группа 271 ПИ Антонова Н. А](https://reader031.vdocuments.site/reader031/viewer/2022012913/56649d435503460f94a20067/html5/thumbnails/25.jpg)
![Page 26: ГРАФЫ ИХ ПРЕДСТАВЛЕНИЕ В STL u Отделение программной инженерии группа 271 ПИ Антонова Н. А](https://reader031.vdocuments.site/reader031/viewer/2022012913/56649d435503460f94a20067/html5/thumbnails/26.jpg)
![Page 27: ГРАФЫ ИХ ПРЕДСТАВЛЕНИЕ В STL u Отделение программной инженерии группа 271 ПИ Антонова Н. А](https://reader031.vdocuments.site/reader031/viewer/2022012913/56649d435503460f94a20067/html5/thumbnails/27.jpg)
![Page 28: ГРАФЫ ИХ ПРЕДСТАВЛЕНИЕ В STL u Отделение программной инженерии группа 271 ПИ Антонова Н. А](https://reader031.vdocuments.site/reader031/viewer/2022012913/56649d435503460f94a20067/html5/thumbnails/28.jpg)
Depth-First SearchDepth-First SearchПоиск в глубинуПоиск в глубину
метод анализа структуры графа, при котором узлы анализируются
последовательно, по мере продвижения вглубь, а далее анализируются
ближайшие к стартовому
![Page 29: ГРАФЫ ИХ ПРЕДСТАВЛЕНИЕ В STL u Отделение программной инженерии группа 271 ПИ Антонова Н. А](https://reader031.vdocuments.site/reader031/viewer/2022012913/56649d435503460f94a20067/html5/thumbnails/29.jpg)
• Поиск начинается с некоторой фиксированной вершины v
• Рассматривается вершина u, смежная с v
• Если нет вершин, смежных с текущей, возврат к предыдущей (если эта вершина – v, то просмотр окончен)
• Структура данных – стек
![Page 30: ГРАФЫ ИХ ПРЕДСТАВЛЕНИЕ В STL u Отделение программной инженерии группа 271 ПИ Антонова Н. А](https://reader031.vdocuments.site/reader031/viewer/2022012913/56649d435503460f94a20067/html5/thumbnails/30.jpg)
![Page 31: ГРАФЫ ИХ ПРЕДСТАВЛЕНИЕ В STL u Отделение программной инженерии группа 271 ПИ Антонова Н. А](https://reader031.vdocuments.site/reader031/viewer/2022012913/56649d435503460f94a20067/html5/thumbnails/31.jpg)
![Page 32: ГРАФЫ ИХ ПРЕДСТАВЛЕНИЕ В STL u Отделение программной инженерии группа 271 ПИ Антонова Н. А](https://reader031.vdocuments.site/reader031/viewer/2022012913/56649d435503460f94a20067/html5/thumbnails/32.jpg)
![Page 33: ГРАФЫ ИХ ПРЕДСТАВЛЕНИЕ В STL u Отделение программной инженерии группа 271 ПИ Антонова Н. А](https://reader031.vdocuments.site/reader031/viewer/2022012913/56649d435503460f94a20067/html5/thumbnails/33.jpg)
СПАСИБО ЗА ВНИМАНИЕ!