330 likes | 597 Views
u. ГРАФЫ ИХ ПРЕДСТАВЛЕНИЕ В STL. Отделение программной инженерии группа 271 ПИ Антонова Н.А. ГРАФ. G = <V, E>. множество вершин ( vertices ) |V|=N. множество пар вершин – дуг (arcs) |E|=M. БИБЛИОТЕКА STL. STANDARD TEMPLATE LIBRARY стандартная библиотека шаблонов.
E N D
u ГРАФЫИХ ПРЕДСТАВЛЕНИЕ В STL Отделение программной инженерии группа 271ПИ Антонова Н.А.
ГРАФ G = <V, E> множество вершин (vertices) |V|=N • множествопар вершин – дуг (arcs) • |E|=M
БИБЛИОТЕКАSTL 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: along 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'
СМЕЖНОСТЬ и ИНЦИДЕНТНОСТЬ Вершины, соединенные дугой, называются смежными Дуги, имеющие общую вершину, также называются смежными Дуга и любая из ее вершин называются инцидентными
ПРЕДСТАВЛЕНИЕ ГРАФОВ • Матрица смежности • Матрица инциденций • Структуры смежности • Массив дуг
МАТРИЦА СМЕЖНОСТИ Это двумерный массив размером NxN, где N – мощность множества вершин V (|V|=N) //двумерный массив #include <vector> typedef std::vector< std::vector< bool > > Matrix; Matrixm;
МАТРИЦА ИНЦИДЕНЦИЙ Это двумерный массив размером NxМ, где N – мощность множества вершин V (|V|=N), М – мощность множества ребер (|E|=M)
СТРУКТУРА СМЕЖНОСТИ Это одномерный массив размером 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; Matrixm;
Использование в прикладных задачах • Географические карты и маршруты • Расписания (scheduling) • Web (гипертекст) • Сети (networks) и т.д.
ПОИСК КРАТЧАЙШЕГО ПУТИ Сеть европейских железных дорог
ПУТЬ Путь – последовательность вершин, соединенных ребрами Длина пути – число ребер(невзвешенная) или сумма весов всех ребер (взвешенная), входящих в путь
ПРЕДСТАВЛЕНИЕ map<string, list<Service*> > outgoing_services; map<string, City*> cities;
АЛГОРИТМ ДЕЙКСТРЫ • Инициализация • Метка начальной вершины полагается равной 0, метки остальных вершин — бесконечности (расстояния до них пока неизвестны) • Шаг алгоритма • Если все вершины посещены, алгоритм завершается • В противном случае из еще не посещенных вершин выбирается вершина U, имеющая минимальную метку • Рассматриваются все смежные к ней вершины. Для каждой из них определяется новая длина пути, равную сумме текущей метки U и длины ребра, их соединяющего • Если полученная длина меньше метки новой вершины, заменим метку этой длиной • Рассмотрев все такие вершины, пометим вершину U как посещенную и повторим шаг …
Breadth-First Search Поиск в ширину метод анализа структуры графа, при котором каждый уровень полностью подвергается анализу до перехода к следующему уровню
Рассматриваются все вершины, связанные с текущей • Выбирается та вершина, которая раньше была рассмотрена • Структура данных – очередь
Depth-First SearchПоиск в глубину метод анализа структуры графа, при котором узлы анализируются последовательно, по мере продвижения вглубь, а далее анализируются ближайшие к стартовому
Поиск начинается с некоторой фиксированной вершины v • Рассматривается вершина u, смежная с v • Если нет вершин, смежных с текущей, возврат к предыдущей (если эта вершина – v, то просмотр окончен) • Структура данных – стек