Вы находитесь на странице: 1из 33

Графы

cт. преп. Алымбаева Ж. А.


Понятие графа
 Графом (graph) называется совокупность двух множеств:
непустого множества точек (вершин) и множества линий,
соединяющих эти точки (ребер).

 С точки зрения абстрактного представления граф G –это просто


набор V узлов (vertex) и коллекция (набор) пар узлов E из V,
называемых путями (edge).

 Таким образом, граф – это способ представления связей и


отношений между парами объектов из некоторого множества V.

 Кружки являются вершинами, а линии – ребрами графа.

2
Географическая карта

Граф

 Две вершины называются смежными, если они соединены


одним ребром (вершины I и G).

 Вершины смежные с некоторой вершиной называются ее


соседями (вершины I, H, F соседи G).

3
Виды графов

Графы (Graphs)

Неориентированные графы Ориентированные графы


(Undirected graphs) (Directed graphs)

4
Основные определения

5
 Циклом графа G называется
такой путь в этом графе, у
которого начало совпадает с
концом: (4,6,7,8,3,4).

 Граф называется связным, если


между любыми двумя его
вершинами существует путь. В
противном случае граф
называется несвязным.

6
 Степенью вершины (vertex degree) некоторого графа G
называется количество ребер графа G, которым данная вершина
принадлежит.

deg(А)=deg(В)=deg(D)=deg(Е)=3
deg(F)=4
deg(С)=2

Число ребер для этого графа:


0,5(deg(А)+deg(В)+deg(С)+deg(D)+
+deg(Е)+deg(F))=9

 Граф у которого степени всех


вершин одинаковы:

deg(А1)=deg(А2)= … =deg(Аn)=r

называется однородным графоми


степени r.

7
 Взвешенный граф
(weighted graph) – это
граф, ребрами (дугами)
которого назначены веса.

 Пустым называется граф


без ребер.

 Полным (complete graph)


называется граф, в котором
каждые две вершины
смежные.

 Ребро (А, В) называется мостом графа G, если в графе,


полученном после удаления из G ребра (А, В), вершины А и В
оказываются несвязными.

8
 Вершина графа, не
принадлежащая ни одному ребру
называется изолированной.

 Граф состоящий из одних


изолированных вершин
называется нуль-графом.

 Вместо того чтобы


проводить несколько
ребер между одними и
теми же вершинами А и
В некоторого графа G,
можно провести всего
одно ребро, приписав
ему кратность,
показывающую сколько
раз надо считать это
ребро.

9
 Данные три графа изоморфны (т. е. имеют одно и то же
строение), хотя они и выглядят по-разному.

 Граф называется плоским графом тогда когда его ребра


пересекаются только в вершинах (например, карта дорог).

10
Эйлеровы графы

 Цикл в графе называется эйлеровым, если он содержит все


ребра графа.

 Связный граф, в котором существует эйлеров цикл, называется


эйлеровым графом.

 Эйлеровой цепью (или путем) является цепь (путь), которая


включает все ребра (дуги) графа по одному разу.

 Связный граф является эйлеровым тогда и только тогда,


когда степени всех его вершин четны.

11
Гамильтоновы графы
• Гамильтонова цепь (путь) – это простая цепь (путь), которая
проходит через каждую вершину (узел) графа ровно по одному
разу.
• Гамильтонов цикл – это простой цикл, который проходит через
каждую вершину графа.

 Название «гамильтонов цикл» произошло от задачи


«Кругосветное путешествие» предложенной
ирландским математиком Вильямом Гамильтоном
в 1859 году.
 Нужно было, выйдя из исходной вершины графа,
обойти все его вершины и вернуться в исходную
точку.

• Граф представлял собой укладку додекаэдра,


каждой из 20 вершин графа было приписано
название крупного города мира (Брюссель,
Дели, Франкфурт ).

12
Деревья

 Связные графы, в которых существует одна и только одна


цепь, соединяющая каждую пару вершин, называются
деревьями.

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


содержащий циклов.

 Лесом называется несвязный граф, представляющий


объединение деревьев.

 Всякое ребро в дереве и в лесе является мостом.

13
Пример. Кубок по настольному теннису разыгрывается по
олимпийской системе. Встречи проводятся без "ничьих". К
очередному туру допускается только победившая в предыдущем
туре команда. Проигравшие команды выбывают из игры. Для
завоевания кубка команда должна победить во всех турах. На
участие в розыгрыше кубка поданы заявки от 16 команд.

Какую информацию можно получить с помощью этого дерева?

14
Графы в реальной жизни
• Одним из первых математиков, занимавшихся
теорией графов, был Леонард Эйлер (нач.
XVIII века).

• В частности, он решил знаменитую задачу с


―кенигсбергскими мостами‖ – Кенигсберг был
остров с семью мостами.

 В популярной задаче требовалось найти путь пересечения всех


семи мостов, в котором каждый мост проходился бы только один
раз. Он доказал, что такого пути не существует.

15
 Задан начальный
пользователь (узел
графа)

 Как начиная со
стартового узла найти
пользователя с заданным
именем?

 Как перебрать всех


пользователей и
применить к ним
некоторую процедуру?
 изменить профиль
 вычислить число
пользователей старше
20 лет

16
 Взаимодействие между исследователями одной из объектных
областей знаний можно представить с помощью графа. Узлы –
исследователи, пути связывает пары этих узлов - исследователей.

 Область возможный применений теории графов:

 планирование промышленного производства


 задачи теории сетевого планирования и управления
 проблемы построения системы связи
 исследования процессов передачи информации
 выбор оптимальных маршрутов потоков в сетях
 методы построения электрических сетей и. т. д.

17
Представление графа в памяти

 Представление графа в памяти (формат его хранения)


определяет вычислительную сложность операций над графом и
объемом требуемой памяти.

 Основные способы представления графов в памяти:

 Матрица смежности (adjacency matrix)

 Список смежных вершин (adjacency list)

18
Матрица смежности (adjacency matrix)

 Матрица смежности представляет собой двумерный массив,


элементы которого обозначают наличие связи между двумя
вершинами.

 Если граф содержит N вершин, то матрица смежности


представляет собой массив NxN.

19
Список смежности (adjacency list)

 Список смежности скорее является массивом списков A[n].


Каждый отдельный список содержит информацию о том,
какие вершины являются смежными по отношению к
заданной.

20
Методы графа
 Как АТД ―граф‖ представляет собой позиционный контейнер
элементов, хранящихся в узлах и путях графа, которые и
являются позициями.

 C точки зрения реализации на Java это определяется


интерфейсами Vertex и Edge, каждый из которых расширяет
интерфейс Position.

 При описании методов графа через v –обозначены позиции


узла, e- позиции пути, o –объект (элемент), хранящийся в
узле или пути.

numVertices() возвращает количество узлов в G


numEdges() возвращает количество путей в G
Vertices() возвращает итератор узлов G
Edges() возвращает итератор путей G
aVertex() возвращает узел из G

21
Методы доступа

degree(v) возвращает степень v


adjacentVertices(v) возвращает итератор смежного с v
узла
incidentEdges(v) возвращает итератор инцидентного
для v пути

endVertices() возвращает массив размером 2,


хранящий конечные точки пути e

opposite(v,e) возвращает конечную точку пути е,


отличную от v

areAdjacent(v,w) возвращает признак смежности v и


w

22
Методы работы с направленными путями
directedEdges() возвращает итератор всех направленных путей
undirectedEdges() возвращает итератор всех ненаправленных
путей
destination(e) возвращает точку назначения направленного
пути e
origin(e) возвращает место происхождения направленного
пути e
isDirected(e) возвращает true, если путь e является
направленным
inDegree(v) возвращает полу степень захода v
outDegree(v) возвращает полу степень исхода v

inIncidentEdges(v) возвращает итератор всех входящих в v путей

outIncidentEdges(v) возвращает итератор всех исходящих в v путей

inAdjacentVertices(v) возвращает итератор всех узлов, объединенных


с v входящими путями
outAdjacentVertices(v) возвращает итератор всех узлов, объединенных
с v исходящими путями
23
Методы обновления графа
insertEdge(v,w,o) вводит и возвращает ненаправленный
путь между узлами v и w, сохраняя
объект o в его позиции
insertDirectedEdge(v,w,o) вводит и возвращает направленный
путь между узлами v и w, сохраняя
объект o в его позиции
insertVertex(o) вводит и возвращает новый
(изолированный) узел, сохраняя
объект o в его позиции
removeVertex() удаляет узел v и все его инцидентные
пути
removeEdge(e) удаляет путь e
makeUndirected(e) делает путь e ненаправленным
reverseDirection(e) перенаправляет путь e в обратную
сторону
setDirectionFrom(e,v) делает путь e направленным из узла v

setDirectionTo(e,v) делает путь e направленным в узел v24


Обход (прохождение) графа

 Обход (прохождение) - это системная


процедура исследования графа
посредством обращения ко всем его узлам
и путям.

 Существует два основных способа обхода


графов: обход в глубину (DFS -Depth – First
Search) и обход в ширину (BFS Breadth –
First Search).

 Обход в глубину реализуется на базе стека.

 Обход в ширину реализуется на базе


очереди.

25
Обход в глубину (DFS)
 Алгоритм обхода в глубину хранит в стеке информацию о том,
куда следует вернуться при достижении ―тупика‖.

 Обход в глубину начинается с выбора отправной точки


Затем алгоритм выполняет три операции:
 посетить смежную вершину, не посещавшийся ранее,
пометить ее и занести в стек.

 если выполнение
правила 1
невозможно,
извлечь вершину
из стека

 если выполнение
правил 1 и 2
невозможно, обход
закончен.

26
 Алгоритм обхода в глубину
стремится, как можно быстрее
удалиться от исходной вершины
и возвращается к ней только при
достижении тупика.

27
Обход в ширину (BFS)

 Обход начинается с заданного узла, алгоритм посещает ее и


делает текущей.

 Далее применяются следующие правила:


 посетить следующую вершину, не посещавшийся ранее,
смежную с текущей вершиной, пометить ее и занести в
очередь

 если выполнение правила 1 невозможно, извлечь вершину


из очереди и сделать ее текущей вершиной.

 если выполнение правил 1 и 2 невозможно, обход


закончен.

 При обходе в ширину алгоритм стремится, держаться как


можно ближе к исходно вершине. Он посещает все вершины,
смежные с исходной, и только после этого отходит дальше.

28
29
Ориентированные (направленные)графы

 Ориентированный граф - это граф, на ребрах которого


обозначены разрешенные направления движения
(стрелочки). Ребра направленного графа называют дугами.

 Ребро входит в вершину, если по


нему можно двигаться в
направлении к этой вершине.

 Ребро выходит из вершины, если


по нему можно двигаться в
направлении от этой вершины.

 Входящая степень вершины - это


число входящих в нее ребер.

 Исходящая (или выходящая)


степень вершины - это число
выходящих из нее ребер.

30
 Путь из вершины A в вершину B - это последовательность ребер
и промежуточных вершин, по которым можно дойти из A в B

 Длина пути - число ребер.

 Простой путь - путь, в котором вершины (и ребра) не


повторяются

 Ориентированный цикл - это замкнутый простой путь в


ориентированном графе

 Сильно связный ориентированный граф - это


ориентированный граф, где из любой вершины в любую есть
путь (для каждой пары вершин A и B есть как путь из A в B, так
и путь из B в A)
 Ориентированный (направленный)
ациклический граф - случай
ориентированного графа, в котором
отсутствуют ориентированные циклы,
т.е. пути, начинающиеся и
заканчивающиеся в одной и той же
вершине.
31
Метод поиска в глубину
 Поиск в глубину начинается с выбора начальной
вершины v графа G.

 Затем для каждой вершины, смежной с вершиной v и


которая не посещалась ранее, рекурсивно применяется
поиск в глубину.

 Когда все вершины, которые можно достичь из


вершины v, будут "удостоены" посещения, поиск
заканчивается.

 Если некоторые вершины остались не посещенными, то


выбирается одна из них и поиск повторяется.

 Этот процесс продолжается до тех пор, пока обходом не


будут охвачены все вершины орграфа G.

32
 В процессе обхода ориентированного графа
методом поиска в глубину только
определенные дуги ведут к вершинам,
которые ранее не посещались. Такие дуги,
ведущие к новым вершинам, называются
дугами остовного дерева и формируют
для данного графа остовный лес,
построенный методом поиска в глубину.

• Здесь сплошными линиями


обозначены дуги дерева.
• Обратные дуги (дуга С → А) —
такие дуги, которые в остовном лесе
идут от потомков к предкам.
• Прямыми дугами называются дуги,
идущие от предков к истинным
потомкам, но которые не являются
дугами дерева.
• Дуги, такие как D → C и G → D, соединяющие вершины, не
являющиеся ни предками, ни потомками друг друга,
называются поперечными дугами.

33