ТА_Методички / Lab11_Graphs_для студентів
.pdf
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”
Кафедра САПР
Теорія графів
МЕТОДИЧНІ ВКАЗІВНИКИ
до лабораторної роботи № 11 з курсу: “Теорія алгоритмів”
для студентів базового напрямку 6.050101 “Комп’ютерні науки”
Затверджено на засiданнi кафедриСистеми автоматизованого проектування"
Протокол N ____ вiд __________2013р.
ЛЬВІВ – 2013
Теорія графів: Методичні вказівки до лабораторної роботи №11 з курсу «Теорія алгоритмів» для студентів базового напрямку 6.050101 «Комп’ютернi науки» / Укл.: Денисюк П.Ю., Керницький А.Б., Медвідь А.В., Сосницький В.Ю. - Львiв: Національний університет «Львівська політехніка», 2013.- 16 с.
Укладачі |
Денисюк П.Ю., канд.техн.наук, доц.., |
|
Керницький А.Б., др.інж., доц., |
|
Медвідь А.В. |
|
Сосницький В.Ю. |
Відповідальний за випуск Лобур М.В., д-р техн.наук, проф.
Рецензенти |
Каркульовський В.І., канд.техн.наук, доц. |
|
Яковина В.С., канд.фіз.-мат.наук, доц. |
1. МЕТА РОБОТИ
Мета роботи – вивчити основні визначення та правила використання теорії графів, правила побудови матриць суміжності та інцидентності.
2. КОРОТКІ ТЕОРЕТИЧНІ ВІДОМОСТІ
В математической теории графов и информатике граф — это
совокупность непустого множества вершин и множества пар вершин (связей между вершинами).
Объекты представляются как вершины, или узлы графа, а связи —
как дуги, или рёбра. Для разных областей применения виды графов могут различаться направленностью, ограничениями на количество связей и дополнительными данными о вершинах или рёбрах.
Многие структуры, представляющие практический интерес в математике и информатике, могут быть представлены графами. Например, строение Википедии можно смоделировать при помощи ориентированного графа (орграф), в котором вершины — это статьи, а дуги (ориентированные
рёбра) — гиперссылки
В загальному випадку, граф — це сукупність об'єктів із зв'язками між
ними.
Першою працею з теорії графів як математичної дисципліни вважають
статтю Леонарда |
Ейлера (1736), |
у |
якій |
розглядалася |
задача |
про Кенігсбергські |
мости. Наступний |
імпульс |
теорія графів |
отримала |
|
близько 100 років потому з розвитком досліджень по електричних мережах, кристалографії, органічній хімії та іншим наукам [1]
Теорія графів не має стійкої термінології. В різних статтях під одними й тими ж термінами розуміють різні поняття. Наведені нижче визначення є одними з найбільш розповсюджених.
Граф або неорієнтований граф 
— це впорядкована пара











, для якої виконуються наступні умови:


— множина вершин або вузлів,
— множина пар (у випадку неорієнтованого графу —
невпорядкованих) вершин, які називають ребрами.


(і так само
) зазвичай вважаються скінченними множинами. Велика кількість результатів, отриманих для скінченних графів, невірна (або інша) для нескінченних графів. Це пов'язано з тим, що певний набір ідей стає хибним у випадку нескінченних множин.
Граф (геометричний граф) — це фігура на площині, яка складається з не порожньої скінченної множини V точок(вершин) і скінченної множини E орієнтованих чи не орієнтованих ліній (ребер), що з'єднують деякі пари вершин.
Орієнтований граф
Граф, який містить тільки ребра називається неорієнтованим (див.рис.1), який містить тільки дуги — орієнтованим (див.рис.2). Граф, що має як ребра так і дуги, називається мішаним (див.рис.3). Якщо пара вершин сполучається кількома ребрами чи дугами одного напрямку, то ребра (дуги) називають кратними (паралельними) (див.рис.4). Дуга чи ребро що сполучає вершину саму із собою називається петлею (див.рис.5). Граф без кратних дуг і петель називається простим.
Вершини сполучені ребром чи дугою називають суміжними, також називають суміжними ребра, що мають спільну вершину. Ребро (чи дуга) і її вершина називаються інцидентними. Ребро (u, v) з'єднує вершини u і v, дуга (u, v) починається у вершині u і закінчується у вершині v.
Кожен граф можна відобразити в евклідовому просторі множиною точок які відповідають вершинам, сполучених лініями, що відповідають ребрам (дугам).
Іноді є потреба пару вершин з'єднати більше, ніж одним ребром. Мультиграфом називають пару G=(V,E), де V — множина, елементи якої називають вершинами. E — сім'я ребер, кожне з яких — це пара вершин із V. приклад
Ребра, які з'єднують одну й ту саму пару вершин, називають кратними (паралельними) ребрами.
Мультиграф, який може мати петлі, іноді називають псевдографом.
Тип графу |
Ребра |
Кратні ребра |
Простий граф |
Неорієнтовані |
Ні |
Мультиграф |
Неорієнтовані |
Так |
Орієнтований граф |
Орієнтовані |
Ні |
Орієнтований мультиграф |
Орієнтовані |
Так |
Цикл — замкнутий ланцюг, для орграфів цикл називається контур. Цикл в орієнтованому графі — це простий шлях довжини не менше 1, котрий починається і закінчується в одній і тій самій вершині.
Дерево — зв'язний граф без циклів.
2.2. Представлення графа в пам’яті ЕОМ При реалізації на комп’ютері мережі автомобільних доріг, ліній
комунікацій, тощо зручно використовувати граф. При програмній реалізації виникає проблема збереження інформації про цей граф у пам'яті комп'ютера. Вибір структури даних для збереження графа в пам'яті має визначальне значення у процесі розробки ефективних алгоритмів.
У подальшому будемо припускати, що вершини графа мають номери від 1 до N, а ребра — від 1 до M. Кожному ребру і кожній вершині зіставлена вага — ціле позитивне число.
Одним з шляхів рішення даної задачі є представлення інформації про граф у вигляді матриці суміжності. Отже матриця суміжності — один із способів представлення графа у вигляді матриці. Матриця суміжності це двовимірний масив розміром N*N (де N – вершини графа).
Матриця суміжності графа G зі скінченною кількістю вершин n (пронумерованих числами від 1 до n) — це квадратна
матриця A розміру n, в якій значення елементу aij рівне числу ребер з i-ї вершини графа в j-у вершину.
Іноді, особливо у разі неорієнтованого графа, петля (ребро з i-ї вершини в саму себе) вважається за два ребра, тобто значення діагонального елементу aii в цьому випадку рівне подвоєному числу петель навколо i-ї вершини.
Матриця суміжності простого графа (що не містить петель і кратних ребер) є бінарною матрицею і містить нулі на головній діагоналі.
На мові програмування Паскаль, оголошення буде виглядати наступним чином
Type TAdjacencyMatrix = array [1..N, 1..N] of Integer; Var Graph: TAdjacencyMatrix;
// де N – вершини графа описані у розділі констант
При цьому елемент матриці Graph[i, j] дорівнює 0, якщо вершини i та j не є суміжними, та 1 для суміжних вершин. Для зваженого графа Graph[i, j] дорівнює вазі вершини i, якщо i=j, а для суміжних вершин — вазі ребра (дуги) з вершини i у вершину j. Просторова складність цього
способу O(N2).
Цей спосіб використовують у тих випадках, коли виникає потреба часто перевіряти суміжність чи знаходити вагу ребра за двома заданими вершинами.
Матриця інцидентності Ма́триця інциде́нтності— одна з форм представлення графа, в якій
вказуються зв'язок між інцидентними елементами графа (ребро (дуга) і вершина). Стовпці матриці відповідають ребрам, рядки — вершин. Ненульове значення у клітинці матриці вказує на зв'язок між вершиною і ребром (їх інцидентність).
Кожна комірка матриці може набувати трьох значень: 1: якщо ребро виходить з 


і входить у 



; -1: якщо ребро входить у 


і виходить з 



; 0: якщо між 


і 



немає ребра.
Матриця інцидентності це двовимірний масив розміром N*M:
// матриця інцидентності
Type TIncidenceMatrix = array [1..N, 1..M] of Integer;
Var Graph: TIncidenceMatrix;
При цьому Graph[i, j] дорівнює 0, якщо вершини i та ребро j не є інцидентними, −1, якщо вершина i є кінцем орієнтованого ребра j, +1, якщо вершина i є початком орієнтованого ребраj. Інколи зручно користуватись означенням, у якому Graph[i, j] вазі ребра (дуги) j, що є інцидентним вершині i.
Матриця інцидентності найкраще підходить для операції перерахування ребер, що є інцидентними вершині x.
Приклади
Приклад № 1 орієнтований граф
Орієнтований граф (до прикладу № 1) Якщо у нас є граф:
то матриця виглядатиме так:
Приклад № 2 неорієнтований
Неорієнтований граф Матриця інцидентності
Особливості даного подання Не використовується для графів з петлями, так як у петель одна вершина є і початком, і кінцем.
У кожному стовпці повинні стояти дві одиниці, а всі інші символи — нулі.
Списки суміжності
Список суміжності це послідовність (масив, список) розміром N, кожен елемент якої є списком вершин суміжних з даною:
// список суміжності
Type TAdjacencyList = array [1..N] of record
Count: Integer; {кількість елементів у списку}
List: array[1..N] of
record {список}
Node, {номер суміжної вершини} Weight: Integer; {вага ребра} end;
end;
Var Graph: AdjacencyList;
Цей спосіб збереження найкраще підходить для перерахування усіх вершин суміжних з x.
Список ребер
//динамічний список ребер (із вказівниками)
//застосовують тоді, коли кількість ребер невідома наперед і їх багато
Type ListElPtr=^ListEl; {вершини графа позначені числами } {(номерами)}
ListE l= record
Node1, Node2: integer; {список складаються із пар цілих чисел: }
{перше - звідки ребро, друге - куди} Next:ListElPtr; {вказівник на наступне ребро графа} end;
//список (масив) ребер
//застосовують тоді, коли кількість ребер відома наперед і невелика
Type TBranchList = array [1..M] of record
Node1, Node2, {пари вершин, що зв'язує ребро}
Weight: Integer; {вага ребра}
end;
Var Graph: BranchList;
Як видно з цієї таблиці, цей спосіб збереження графа є особливо зручним, якщо головною операцією є перерахування ребер або пошук вершин і ребер, що знаходяться у відносинах інцидентності.
Приклад виконання лабораторного завдання
Хід роботи:
1. На основі вибраної карти будуємо граф, так щоб ребра не перетинались.
2. Замінимо назви континентів на букви від ”А” до ”G” і прономеруємо ребра.
3. |
Побудуємо матрицю інцидентності для графа. |
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
e1 |
e2 |
e3 |
е4 |
е5 |
е6 |
е7 |
|
е8 |
е9 |
е10 |
е11 |
A |
1 |
0 |
0 |
0 |
0 |
1 |
1 |
|
0 |
0 |
0 |
0 |
B |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
|
0 |
0 |
0 |
0 |
C |
0 |
1 |
1 |
0 |
0 |
0 |
0 |
|
1 |
0 |
0 |
0 |
D |
0 |
0 |
1 |
1 |
0 |
0 |
0 |
|
0 |
1 |
0 |
0 |
E |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
|
0 |
0 |
1 |
0 |
F |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
|
0 |
0 |
0 |
1 |
G |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
|
1 |
1 |
1 |
1 |
4. |
Довільно розставимо ваги ребер графа. |
|
|
|
|
|
|
|||||
|
|
5. |
Побудуємо матрицю суміжності. |
|
|
|||
|
|
|
|
|
|
|
|
|
|
A |
B |
|
C |
D |
E |
F |
G |
A |
0 |
10 |
|
0 |
0 |
0 |
18 |
11 |
B |
10 |
0 |
|
14 |
0 |
0 |
0 |
9 |
C |
0 |
14 |
|
0 |
12 |
0 |
0 |
16 |
D |
0 |
0 |
|
12 |
0 |
13 |
0 |
15 |
E |
0 |
0 |
|
0 |
13 |
0 |
20 |
10 |
F |
18 |
0 |
|
0 |
0 |
20 |
0 |
17 |
G |
11 |
9 |
|
16 |
15 |
10 |
17 |
0 |
