SlideShare a Scribd company logo
1 of 33
ГРАФЫ
ИХ ПРЕДСТАВЛЕНИЕ
В STL
u
Отделение
программной инженерии
группа 271 ПИ
. .Антонова Н А
G = <V, E>
множество вершин
(vertices)
|V|=N
множество –пар вершин
дуг (arcs)
|E|=M
ГРАФГРАФ
БИБЛИОТЕКАБИБЛИОТЕКА STLSTL
STANDARD TEMPLATE LIBRARY
стандартная библиотека шаблонов
Это библиотека шаблонов и
функций С++, включающая в
себя различные контейнеры
( , ,данных список очередь
, , -множество отображение хэш
,таблица очередь с
)приоритетами и базовые
( , )алгоритмы сортировка поиск
Последовательные
Ассоциативные
(линейный список) ( –ключ значение)• list
• vector
• deque
• …
КОНТЕЙНЕРЫКОНТЕЙНЕРЫ
• map
•
multimap
• set
• …
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] << “ “;
КОНТЕЙНЕРЫКОНТЕЙНЕРЫ
VECTOR – динамический массив
– size() – возвращает текущий размер вектора
– begin() – ,возвращает итератор установленный на начало вектора
– end() - ,возвращает итератор установленный на конец вектора
– push_back() – записывает значение в конец вектора
– insert() – ,записывает значение непосредственно перед элементом
на который ссылается итератор
– erase() – удаляет элемент из вектора
– …
:на экране
a b c d e f g h i j X X X
КОНТЕЙНЕРЫКОНТЕЙНЕРЫ
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;
КОНТЕЙНЕРЫКОНТЕЙНЕРЫ
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
КОНТЕЙНЕРЫКОНТЕЙНЕРЫ
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'
КОНТЕЙНЕРЫКОНТЕЙНЕРЫ
, ,Вершины соединенные дугой называются
смежными
, ,Дуги имеющие общую вершину также
называются смежными
Дуга и любая из ее вершин называются
инцидентными
СМЕЖНОСТЬ иСМЕЖНОСТЬ и
ИНЦИДЕНТНОСТЬИНЦИДЕНТНОСТЬ
ПРЕДСТАВЛЕНИЕПРЕДСТАВЛЕНИЕ
ГРАФОВГРАФОВ
1. Матрица смежности
2. Матрица инциденций
3. Структуры смежности
4. Массив дуг
Это двумерный массив размером NxN, где
N – мощность множества вершин V (|V|=N)
МАТРИЦАМАТРИЦА
СМЕЖНОСТИСМЕЖНОСТИ
//двумерный массив
#include <vector>
typedef std::vector< std::vector< bool > > Matrix;
Matrix m;
МАТРИЦАМАТРИЦА
ИНЦИДЕНЦИЙИНЦИДЕНЦИЙ
Это двумерный массив размером 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
Это одномерный массив размером 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;
Это двумерный массив размером Мx2,
где М – мощность множества ребер Е (|Е|=М)
МАССИВ ДУГМАССИВ ДУГ
//map
#include <map>
typedef std::map< int, int > Matrix;
Matrix m;
Использование в прикладныхИспользование в прикладных
задачахзадачах
• Географические карты и маршруты
• Расписания (scheduling)
• Web (гипертекст)
• Сети (networks) и т.д.
Сеть европейских железных дорог
ПОИСК КРАТЧАЙШЕГОПОИСК КРАТЧАЙШЕГО
ПУТИПУТИ
ПУТЬПУТЬ
Путь – последовательность вершин, соединенных
ребрами
Длина пути – число ребер(невзвешенная) или
сумма весов всех ребер (взвешенная),
входящих в путь
ПРЕДСТАВЛЕНИЕПРЕДСТАВЛЕНИЕ
map<string, list<Service*> > outgoing_services;
map<string, City*> cities;
АЛГОРИТМАЛГОРИТМ
ДЕЙКСТРЫДЕЙКСТРЫИнициализация
Метка начальной вершины полагается равной 0, метки остальных
вершин — бесконечности (расстояния до них пока неизвестны)
Шаг алгоритма
• Если все вершины посещены, алгоритм завершается
• В противном случае из еще не посещенных вершин выбирается
вершина U, имеющая минимальную метку
• Рассматриваются все смежные к ней вершины. Для каждой из них
определяется новая длина пути, равную сумме текущей метки U и
длины ребра, их соединяющего
• Если полученная длина меньше метки новой вершины, заменим
метку этой длиной
• Рассмотрев все такие вершины, пометим вершину U как
посещенную и повторим шаг
…
ОСНОВНЫЕ АЛГОРИТМЫОСНОВНЫЕ АЛГОРИТМЫ
НА ГРАФАХНА ГРАФАХ
BBreadthreadth-F-Firstirst SSearchearch
Поиск в ширинуПоиск в ширину
метод анализа структуры графа, при
котором каждый уровень полностью
подвергается анализу до перехода к
следующему уровню
• Рассматриваются все вершины, связанные
с текущей
• Выбирается та вершина, которая раньше
была рассмотрена
•
• Структура данных – очередь
Depth-First SearchDepth-First Search
Поиск в глубинуПоиск в глубину
метод анализа структуры графа, при
котором узлы анализируются
последовательно, по мере продвижения
вглубь, а далее анализируются
ближайшие к стартовому
• Поиск начинается с некоторой
фиксированной вершины v
• Рассматривается вершина u, смежная с v
• Если нет вершин, смежных с текущей,
возврат к предыдущей (если эта вершина
– v, то просмотр окончен)
• Структура данных – стек
СПАСИБО ЗА
!ВНИМАНИЕ

More Related Content

What's hot

Лекция 12 (часть 2): Языки программирования семейства PGAS: IBM X10
Лекция 12 (часть 2): Языки программирования семейства PGAS: IBM X10Лекция 12 (часть 2): Языки программирования семейства PGAS: IBM X10
Лекция 12 (часть 2): Языки программирования семейства PGAS: IBM X10Mikhail Kurnosov
 
Лекция 7. Стандарт OpenMP (подолжение)
Лекция 7. Стандарт OpenMP (подолжение)Лекция 7. Стандарт OpenMP (подолжение)
Лекция 7. Стандарт OpenMP (подолжение)Mikhail Kurnosov
 
Компьютерная графика в Processing, часть 5. Анимация
Компьютерная графика в Processing, часть 5. АнимацияКомпьютерная графика в Processing, часть 5. Анимация
Компьютерная графика в Processing, часть 5. АнимацияTatiana Volkova
 
Векторизация кода (семинар 2)
Векторизация кода (семинар 2)Векторизация кода (семинар 2)
Векторизация кода (семинар 2)Mikhail Kurnosov
 
Компьютерная графика в Processing, часть 4. Преобразования на плоскости
Компьютерная графика в Processing, часть 4. Преобразования на плоскостиКомпьютерная графика в Processing, часть 4. Преобразования на плоскости
Компьютерная графика в Processing, часть 4. Преобразования на плоскостиTatiana Volkova
 
TMPA-2013 Chupilko: Verification of Correct Behaviour of HDL Models
TMPA-2013 Chupilko: Verification of Correct Behaviour of HDL ModelsTMPA-2013 Chupilko: Verification of Correct Behaviour of HDL Models
TMPA-2013 Chupilko: Verification of Correct Behaviour of HDL ModelsIosif Itkin
 
Компьютерная графика в Processing, часть 2. Основные 2D-примитивы
Компьютерная графика в Processing, часть 2. Основные 2D-примитивыКомпьютерная графика в Processing, часть 2. Основные 2D-примитивы
Компьютерная графика в Processing, часть 2. Основные 2D-примитивыTatiana Volkova
 
Компьютерная графика в Processing, часть 7. 3D в Processing
Компьютерная графика в Processing, часть 7. 3D в ProcessingКомпьютерная графика в Processing, часть 7. 3D в Processing
Компьютерная графика в Processing, часть 7. 3D в ProcessingTatiana Volkova
 
TMPA-2013 Dmitry Zaitsev
TMPA-2013 Dmitry ZaitsevTMPA-2013 Dmitry Zaitsev
TMPA-2013 Dmitry ZaitsevIosif Itkin
 
Лекция 2: Абстрактные типы данных. Алгоритмы сортировки
Лекция 2: Абстрактные типы данных. Алгоритмы сортировкиЛекция 2: Абстрактные типы данных. Алгоритмы сортировки
Лекция 2: Абстрактные типы данных. Алгоритмы сортировкиMikhail Kurnosov
 
Векторизация кода (семинар 3)
Векторизация кода (семинар 3)Векторизация кода (семинар 3)
Векторизация кода (семинар 3)Mikhail Kurnosov
 
Лекция №13. Графы: сильно связные компоненты и остовные деревья. Предмет "Стр...
Лекция №13. Графы: сильно связные компоненты и остовные деревья. Предмет "Стр...Лекция №13. Графы: сильно связные компоненты и остовные деревья. Предмет "Стр...
Лекция №13. Графы: сильно связные компоненты и остовные деревья. Предмет "Стр...Nikolay Grebenshikov
 
4. Многомерные массивы и массивы массивов в C#
4. Многомерные массивы и массивы массивов в C#4. Многомерные массивы и массивы массивов в C#
4. Многомерные массивы и массивы массивов в C#Olga Maksimenkova
 
Лекция 10. Графы. Остовные деревья минимальной стоимости
Лекция 10. Графы. Остовные деревья минимальной стоимостиЛекция 10. Графы. Остовные деревья минимальной стоимости
Лекция 10. Графы. Остовные деревья минимальной стоимостиMikhail Kurnosov
 
Probabilistic Verification in Computational Systems Design
Probabilistic Verification in Computational Systems DesignProbabilistic Verification in Computational Systems Design
Probabilistic Verification in Computational Systems DesignIosif Itkin
 
Лекция 11. Методы разработки алгоритмов
Лекция 11. Методы разработки алгоритмовЛекция 11. Методы разработки алгоритмов
Лекция 11. Методы разработки алгоритмовMikhail Kurnosov
 
Основы С++ (массивы, указатели). Задачи с массивами
Основы С++ (массивы, указатели). Задачи с массивамиОсновы С++ (массивы, указатели). Задачи с массивами
Основы С++ (массивы, указатели). Задачи с массивамиOlga Maksimenkova
 
Лекция №16. Поиск подстрок. Предмет "Структуры и алгоритмы обработки данных"
Лекция №16. Поиск подстрок. Предмет "Структуры и алгоритмы обработки данных"Лекция №16. Поиск подстрок. Предмет "Структуры и алгоритмы обработки данных"
Лекция №16. Поиск подстрок. Предмет "Структуры и алгоритмы обработки данных"Nikolay Grebenshikov
 

What's hot (20)

Лекция 12 (часть 2): Языки программирования семейства PGAS: IBM X10
Лекция 12 (часть 2): Языки программирования семейства PGAS: IBM X10Лекция 12 (часть 2): Языки программирования семейства PGAS: IBM X10
Лекция 12 (часть 2): Языки программирования семейства PGAS: IBM X10
 
Лекция 7. Стандарт OpenMP (подолжение)
Лекция 7. Стандарт OpenMP (подолжение)Лекция 7. Стандарт OpenMP (подолжение)
Лекция 7. Стандарт OpenMP (подолжение)
 
Компьютерная графика в Processing, часть 5. Анимация
Компьютерная графика в Processing, часть 5. АнимацияКомпьютерная графика в Processing, часть 5. Анимация
Компьютерная графика в Processing, часть 5. Анимация
 
Векторизация кода (семинар 2)
Векторизация кода (семинар 2)Векторизация кода (семинар 2)
Векторизация кода (семинар 2)
 
Компьютерная графика в Processing, часть 4. Преобразования на плоскости
Компьютерная графика в Processing, часть 4. Преобразования на плоскостиКомпьютерная графика в Processing, часть 4. Преобразования на плоскости
Компьютерная графика в Processing, часть 4. Преобразования на плоскости
 
TMPA-2013 Chupilko: Verification of Correct Behaviour of HDL Models
TMPA-2013 Chupilko: Verification of Correct Behaviour of HDL ModelsTMPA-2013 Chupilko: Verification of Correct Behaviour of HDL Models
TMPA-2013 Chupilko: Verification of Correct Behaviour of HDL Models
 
Компьютерная графика в Processing, часть 2. Основные 2D-примитивы
Компьютерная графика в Processing, часть 2. Основные 2D-примитивыКомпьютерная графика в Processing, часть 2. Основные 2D-примитивы
Компьютерная графика в Processing, часть 2. Основные 2D-примитивы
 
Компьютерная графика в Processing, часть 7. 3D в Processing
Компьютерная графика в Processing, часть 7. 3D в ProcessingКомпьютерная графика в Processing, часть 7. 3D в Processing
Компьютерная графика в Processing, часть 7. 3D в Processing
 
TMPA-2013 Dmitry Zaitsev
TMPA-2013 Dmitry ZaitsevTMPA-2013 Dmitry Zaitsev
TMPA-2013 Dmitry Zaitsev
 
Основы MATLAB. Лекция 1.
Основы MATLAB. Лекция 1.Основы MATLAB. Лекция 1.
Основы MATLAB. Лекция 1.
 
Лекция 2: Абстрактные типы данных. Алгоритмы сортировки
Лекция 2: Абстрактные типы данных. Алгоритмы сортировкиЛекция 2: Абстрактные типы данных. Алгоритмы сортировки
Лекция 2: Абстрактные типы данных. Алгоритмы сортировки
 
Векторизация кода (семинар 3)
Векторизация кода (семинар 3)Векторизация кода (семинар 3)
Векторизация кода (семинар 3)
 
Лекция №13. Графы: сильно связные компоненты и остовные деревья. Предмет "Стр...
Лекция №13. Графы: сильно связные компоненты и остовные деревья. Предмет "Стр...Лекция №13. Графы: сильно связные компоненты и остовные деревья. Предмет "Стр...
Лекция №13. Графы: сильно связные компоненты и остовные деревья. Предмет "Стр...
 
4. Многомерные массивы и массивы массивов в C#
4. Многомерные массивы и массивы массивов в C#4. Многомерные массивы и массивы массивов в C#
4. Многомерные массивы и массивы массивов в C#
 
Лекция 10. Графы. Остовные деревья минимальной стоимости
Лекция 10. Графы. Остовные деревья минимальной стоимостиЛекция 10. Графы. Остовные деревья минимальной стоимости
Лекция 10. Графы. Остовные деревья минимальной стоимости
 
Probabilistic Verification in Computational Systems Design
Probabilistic Verification in Computational Systems DesignProbabilistic Verification in Computational Systems Design
Probabilistic Verification in Computational Systems Design
 
Лекция 11. Методы разработки алгоритмов
Лекция 11. Методы разработки алгоритмовЛекция 11. Методы разработки алгоритмов
Лекция 11. Методы разработки алгоритмов
 
Основы С++ (массивы, указатели). Задачи с массивами
Основы С++ (массивы, указатели). Задачи с массивамиОсновы С++ (массивы, указатели). Задачи с массивами
Основы С++ (массивы, указатели). Задачи с массивами
 
Основы MATLAB. Программирование
Основы MATLAB. ПрограммированиеОсновы MATLAB. Программирование
Основы MATLAB. Программирование
 
Лекция №16. Поиск подстрок. Предмет "Структуры и алгоритмы обработки данных"
Лекция №16. Поиск подстрок. Предмет "Структуры и алгоритмы обработки данных"Лекция №16. Поиск подстрок. Предмет "Структуры и алгоритмы обработки данных"
Лекция №16. Поиск подстрок. Предмет "Структуры и алгоритмы обработки данных"
 

Similar to 6.0a

массивы.строки
массивы.строкимассивы.строки
массивы.строкиdasha2012
 
!Predictive analytics part_2
!Predictive analytics part_2!Predictive analytics part_2
!Predictive analytics part_2Vladimir Krylov
 
алгоритмизация
алгоритмизацияалгоритмизация
алгоритмизацияisva69
 
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...Yandex
 
SQL-ник DevDay. Каменский. Расширенный SQL в MySQL и PostgreSQL. Сравнение во...
SQL-ник DevDay. Каменский. Расширенный SQL в MySQL и PostgreSQL. Сравнение во...SQL-ник DevDay. Каменский. Расширенный SQL в MySQL и PostgreSQL. Сравнение во...
SQL-ник DevDay. Каменский. Расширенный SQL в MySQL и PostgreSQL. Сравнение во...DevDay
 
Презентация на тему: Повторение курса информатики 7 класс
Презентация на тему: Повторение курса информатики 7 классПрезентация на тему: Повторение курса информатики 7 класс
Презентация на тему: Повторение курса информатики 7 класс2berkas
 
2.3 Указатели и массивы
2.3 Указатели и массивы2.3 Указатели и массивы
2.3 Указатели и массивыDEVTYPE
 
МЕТОД ПРЕДСТАВЛЕНИЯ АВТОМАТОВ ЛИНЕЙНЫМИ БИНАРНЫМИ ГРАФАМИ ДЛЯ ИСПОЛЬЗОВАНИЯ В...
МЕТОД ПРЕДСТАВЛЕНИЯ АВТОМАТОВ ЛИНЕЙНЫМИ БИНАРНЫМИ ГРАФАМИ ДЛЯ ИСПОЛЬЗОВАНИЯ В...МЕТОД ПРЕДСТАВЛЕНИЯ АВТОМАТОВ ЛИНЕЙНЫМИ БИНАРНЫМИ ГРАФАМИ ДЛЯ ИСПОЛЬЗОВАНИЯ В...
МЕТОД ПРЕДСТАВЛЕНИЯ АВТОМАТОВ ЛИНЕЙНЫМИ БИНАРНЫМИ ГРАФАМИ ДЛЯ ИСПОЛЬЗОВАНИЯ В...ITMO University
 
Data Mining - lecture 6 - 2014
Data Mining - lecture 6 - 2014Data Mining - lecture 6 - 2014
Data Mining - lecture 6 - 2014Andrii Gakhov
 
03
0303
03JIuc
 
TMPA-2015: Expanding the Meta-Generation of Correctness Conditions by Means o...
TMPA-2015: Expanding the Meta-Generation of Correctness Conditions by Means o...TMPA-2015: Expanding the Meta-Generation of Correctness Conditions by Means o...
TMPA-2015: Expanding the Meta-Generation of Correctness Conditions by Means o...Iosif Itkin
 
Лекция 9: Графы. Поиск кратчайшего пути в графе
Лекция 9: Графы. Поиск кратчайшего пути в графеЛекция 9: Графы. Поиск кратчайшего пути в графе
Лекция 9: Графы. Поиск кратчайшего пути в графеMikhail Kurnosov
 
Cpp/cli particularities
Cpp/cli particularitiesCpp/cli particularities
Cpp/cli particularitiesmcroitor
 

Similar to 6.0a (20)

Основы MATLAB. Численные методы
Основы MATLAB. Численные методыОсновы MATLAB. Численные методы
Основы MATLAB. Численные методы
 
лекция 6
лекция 6лекция 6
лекция 6
 
массивы.строки
массивы.строкимассивы.строки
массивы.строки
 
лекция 6
лекция 6лекция 6
лекция 6
 
!Predictive analytics part_2
!Predictive analytics part_2!Predictive analytics part_2
!Predictive analytics part_2
 
лекция 14
лекция 14лекция 14
лекция 14
 
алгоритмизация
алгоритмизацияалгоритмизация
алгоритмизация
 
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
 
SQL-ник DevDay. Каменский. Расширенный SQL в MySQL и PostgreSQL. Сравнение во...
SQL-ник DevDay. Каменский. Расширенный SQL в MySQL и PostgreSQL. Сравнение во...SQL-ник DevDay. Каменский. Расширенный SQL в MySQL и PostgreSQL. Сравнение во...
SQL-ник DevDay. Каменский. Расширенный SQL в MySQL и PostgreSQL. Сравнение во...
 
Презентация на тему: Повторение курса информатики 7 класс
Презентация на тему: Повторение курса информатики 7 классПрезентация на тему: Повторение курса информатики 7 класс
Презентация на тему: Повторение курса информатики 7 класс
 
2.3 Указатели и массивы
2.3 Указатели и массивы2.3 Указатели и массивы
2.3 Указатели и массивы
 
МЕТОД ПРЕДСТАВЛЕНИЯ АВТОМАТОВ ЛИНЕЙНЫМИ БИНАРНЫМИ ГРАФАМИ ДЛЯ ИСПОЛЬЗОВАНИЯ В...
МЕТОД ПРЕДСТАВЛЕНИЯ АВТОМАТОВ ЛИНЕЙНЫМИ БИНАРНЫМИ ГРАФАМИ ДЛЯ ИСПОЛЬЗОВАНИЯ В...МЕТОД ПРЕДСТАВЛЕНИЯ АВТОМАТОВ ЛИНЕЙНЫМИ БИНАРНЫМИ ГРАФАМИ ДЛЯ ИСПОЛЬЗОВАНИЯ В...
МЕТОД ПРЕДСТАВЛЕНИЯ АВТОМАТОВ ЛИНЕЙНЫМИ БИНАРНЫМИ ГРАФАМИ ДЛЯ ИСПОЛЬЗОВАНИЯ В...
 
Data Mining - lecture 6 - 2014
Data Mining - lecture 6 - 2014Data Mining - lecture 6 - 2014
Data Mining - lecture 6 - 2014
 
String
StringString
String
 
03
0303
03
 
04 array
04 array04 array
04 array
 
9893
98939893
9893
 
TMPA-2015: Expanding the Meta-Generation of Correctness Conditions by Means o...
TMPA-2015: Expanding the Meta-Generation of Correctness Conditions by Means o...TMPA-2015: Expanding the Meta-Generation of Correctness Conditions by Means o...
TMPA-2015: Expanding the Meta-Generation of Correctness Conditions by Means o...
 
Лекция 9: Графы. Поиск кратчайшего пути в графе
Лекция 9: Графы. Поиск кратчайшего пути в графеЛекция 9: Графы. Поиск кратчайшего пути в графе
Лекция 9: Графы. Поиск кратчайшего пути в графе
 
Cpp/cli particularities
Cpp/cli particularitiesCpp/cli particularities
Cpp/cli particularities
 

6.0a

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