Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
инф-госы теория и практика.doc
Скачиваний:
28
Добавлен:
29.08.2019
Размер:
3.77 Mб
Скачать

19. Основные понятия теории графов.

Определение. Графом   будем называть тройку G={V, E, P}, где

V - множество мощности n (|V|=n), называемое множеством вершин.

E - множество мощности m (|E|=m), называемое множеством ребер.

P(x,e,y) - предикат, где x, y V - вершины, e E - ребра, такой что

A) P определено на всех упорядоченных тройках (x,e,y), где x,y V, e E.

B) e x,y [P(x,e,y)/\ x ,y V (P(x ,e,y )-> ((x =x )/\(y =y )v(x =y)/\(y =x)))], т.е. каждое ребро соединяет 2 вершины и может быть либо направленным, либо нет.

Здесь возможны несколько интересных частных случаев:

1. Пусть для  eE  x,yV [P(x,e,y) /\ ┐P(y,e,x)],

т.е. все ребра имеют ориентацию, такие ребра называют дугами, а такой граф - ориентированным (орграфом)

2. Если для eE  x,yV [P(x,e,y) /\ P(y,e,x)], то граф называется неориентированным.

3. Иначе граф называется смешанным, впрочем смешанные графы рассматриваются редко. Обычно говорят либо об орграфах или о неориентированных графах.

Определение. Ребро e E называется петлей если v V P(v,e,v), т.е. если оно соединяет вершину саму с собой.

Определение.  Граф  G называется  простым, если

e,fE [P(x,e,y)/\P(x,f,y) (e=f)], т.е. любая пара вершин соединяется всего одним ребром.

  

Замечание.  Простой граф можно представить как 2 множества{V,E}.

Определение. Рассмотрим P(x,e,y),если предикат истинен, то говорят, что вершина x и ребро e, а также вершина y и ребро e- инцидентны,   а  вершины x и y -  смежные.

Определение.    Изображением графа на плоскости или пространстве называется геометрическое построение, где каждой вершине графа соответствует точка, а каждому  ребру - линия (для дуг- направленная), причем линии не должны пересекаться.

Пример.

                 1                                    3                                                      1                                      3 

                

                  2                                   4                                                       2                                      4

        ориентированный   граф с 4 вершинами                          неориентированный граф с 4 вершинами

  Не  каждый граф можно реализовать на двумерной плоскости. пример - граф, иллюстрирующий задачу о трех домах и трех колодцах. Пусть есть три дома и три колодца, надо проложить от каждого дома к каждому колодцу дорожку, так чтобы они не пересекались. В топологии (раздел математики, изучающий взаимное расположение объектов на плоскости) доказано, что это сделать невозможно.

Теорема. Любой граф реализуется в 3-мерном пространстве.

Определение. Граф G называется полным, если в нем соединены все пары вершин.

Пример.

                                   1                             3

                                     

                                 

                                  2                              4

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

Очевидно, что число ребер в полном графе - n2, а в почти полном - n2-n.

Представление графа в ЭВМ.

Для человека самое удобное представление графа - его изображение на плоскости. Но этот вариант не пригоден для машинного представления. В ЭВМ граф можно в частности представить одним из двух способов.

A) С - матрица смежности размера n*n. Если существует дуга из i в j или неориентированное ребро между i-й и j-й вершинами, то cij=1, иначе сij=0. Этот способ годиться только для простых графов.

B) G - массив пар смежных вершин, каждая из которых есть ребро.

Пример.    

                                       2                          4  

                   1                                                       6

                                                                            

                                        3                              5

1 .Матрица смежности                                                 2.Список ребер {(1,2),(1,3),(2,2),(2,3),(2,4),......(6,5)}                                                                  

 

1

2

3

4

5

6

1

0

1

1

0

0

0

2

1

1

1

1

1

0

3

1

1

0

0

1

0

4

0

1

0

0

1

1

5

0

1

1

1

0

1

6

0

0

0

1

1

0

                                   

Части графа.

Опред. Граф G’, получаемый из графа G путем удаления части вершин вместе с инцидентными им ребрам называется подграфом графа G, а граф G - надграфом графа G’.

Опред. Граф G’, получаемый из графа G путем удаления части ребер называется суграфом графа G, а граф G в этом случае есть сверхграф графа G’.

Примеры.

                               2             4                                                            2                        4

                 1                                                                         1                                                       6

                                  3                                                                        3                          5

                               подграф                                                                           суграф

 Остов (каркас) графа.

Опред. Маршрутом (путем) в графе G между вершинами x и y называется упорядоченное множество ребер следующего вида:M={ ei |  v1,..,vn  V [P(x,e1,v1)/\P(v1,e2,v2)/\.../\P(vn-1,en,vn)/\P(vn+1,e,y)]}.

Пример.

Опред. Вершины x и y называются взаимнодостижимыми, если существует маршрут из х в у и из у в х.

Опред. Остовом или каркасом неориентированного графа G называется суграф G’={V’, E’, P’}, построенный следующим образом.

A) Сначала V’:=V, E’:=0;

B) Перебираем ребра ei из E и включаем их в E’ в том случае, если на данный момент вершины - x,y, где P(x,ei,y) (т.е. вершины, которые соединяет данное ребро)- взаимно недостижимые.

Это определение фактически дает алгоритм построения остова.

Пример

                      2                                 4

              1

                      3            5                         6

Теорема. Количество элементов в остове <=n-1.

Док-во опускается.

Запишем алгоритм в формальном виде:

ВХОД - граф, заданный масcивом ребер G[i,1] и G[i,2] соответственно вершины, инцидентные i-му ребру. Считаем, что граф неориинтированный, и поэтому если в массиве есть запись (x,y) считаем, что нет записи (y,x); m- число ребер в G, n - число вершин в G.

ВЫХОД - остов G’, заданный массивом ребер G1. число ребер в остове - i1

Главная проблема при построении алгоритма - определение факта взаимодостижимости вершин. Эта проблема решена путем введения вcпомогательного массива A[1..n], который поддерживается таким образом, что все взаимно-достижимые на данный момент вершины имеют одинаковое значение.

Алгоритм выглядит так:

procedure ostov;

for i:=1 to n do A[i]:=i; //обозн., что любая вершина достижима сама с собой.

i1:=0; // i1 - число ребер в остове

for i:=1 to m do if A[G[i,1]]<>A[G[i,2]] then begin //если G[i,1] и G[i,2] - недостижимые - включаем i-е ребро в остов.

inc(i1); //включаем ребро

G1[i1,1]:=G[i,1]; G1[i1,2]:=G[i,2]; // в остов

//перестроение массива A.

if A[G[i,1]]<>G[i,1] then begin

A[G[i,2]]:=A[G[i,1]];

for j:=1 to n do if A[j]=G[i,2] then A[j]:=A[G[i,1]]

end else if A[G[i,2]]<>G[i,2] then begin

A[G[i,1]]:=A[G[i,2]];

for j:=1 to n do if A[j]=G[i,1] then A[j]:=A[G[i,2]]

end else A[G[i,2]]:=A[G[i,1]];

if i1=n -1 then break;

end;

end;

Оценим трудоемкость T(n)~m+(n-1)n~m+n2. первое слагаемое - мах придется просмотреть все m ребер, 2-е - max n-1 включений ребер в остов, каждое приводящее мах к n шагов по перестройке массива A.