1 / 33

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

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

brygid
Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. ГРАФ G = <V, E> множество вершин (vertices) |V|=N • множествопар вершин – дуг (arcs) • |E|=M

  3. БИБЛИОТЕКАSTL 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: along 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. ПРЕДСТАВЛЕНИЕ ГРАФОВ • Матрица смежности • Матрица инциденций • Структуры смежности • Массив дуг

  12. МАТРИЦА СМЕЖНОСТИ Это двумерный массив размером NxN, где N – мощность множества вершин V (|V|=N) //двумерный массив #include <vector> typedef std::vector< std::vector< bool > > Matrix; Matrixm;

  13. МАТРИЦА ИНЦИДЕНЦИЙ Это двумерный массив размером NxМ, где N – мощность множества вершин V (|V|=N), М – мощность множества ребер (|E|=M)

  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; Matrixm;

  16. Использование в прикладных задачах • Географические карты и маршруты • Расписания (scheduling) • Web (гипертекст) • Сети (networks) и т.д.

  17. ПОИСК КРАТЧАЙШЕГО ПУТИ Сеть европейских железных дорог

  18. ПУТЬ Путь – последовательность вершин, соединенных ребрами Длина пути – число ребер(невзвешенная) или сумма весов всех ребер (взвешенная), входящих в путь

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

  20. АЛГОРИТМ ДЕЙКСТРЫ • Инициализация • Метка начальной вершины полагается равной 0, метки остальных вершин — бесконечности (расстояния до них пока неизвестны) • Шаг алгоритма • Если все вершины посещены, алгоритм завершается • В противном случае из еще не посещенных вершин выбирается вершина U, имеющая минимальную метку • Рассматриваются все смежные к ней вершины. Для каждой из них определяется новая длина пути, равную сумме текущей метки U и длины ребра, их соединяющего • Если полученная длина меньше метки новой вершины, заменим метку этой длиной • Рассмотрев все такие вершины, пометим вершину U как посещенную и повторим шаг …

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

  22. Breadth-First Search Поиск в ширину метод анализа структуры графа, при котором каждый уровень полностью подвергается анализу до перехода к следующему уровню

  23. Рассматриваются все вершины, связанные с текущей • Выбирается та вершина, которая раньше была рассмотрена • Структура данных – очередь

  24. Depth-First SearchПоиск в глубину метод анализа структуры графа, при котором узлы анализируются последовательно, по мере продвижения вглубь, а далее анализируются ближайшие к стартовому

  25. Поиск начинается с некоторой фиксированной вершины v • Рассматривается вершина u, смежная с v • Если нет вершин, смежных с текущей, возврат к предыдущей (если эта вершина – v, то просмотр окончен) • Структура данных – стек

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

More Related