Граф — це сукупність об'єктів із зв'язками між ними.
Об'єкти розглядаються як вершини, або вузли графа, а зв'язки — як дуги, або ребра. Для різних галузей види графів можуть відрізнятися орієнтованістю, обмеженнями на кількість зв'язків і додатковими даними про вершини або ребра.
Ребра графа можуть бути напрямленими або ненапрямленими. Наприклад, якщо вершини будуть представляти людей на вечірці, й існуватиме ребро між двома людьми, якщо вони потиснули руки, тоді ребра цього графа не матимуть напряму, оскільки будь-яка особа A може потиснути руки із особою B лише якщо B також потисне руки із A. На противагу цьому, якщо будь-яке ребро від особи A до особи B означатиме, що особі A подобається B, то ребра матимуть напрям, оскільки таке вподобання не обов'язково буде взаємним. Граф першого типу називається неорієнтованим графом, а ребра в свою чергу — неорієнтованими ребрами, тоді як граф другого типу називається орієнтованим графом і ребра — орієнтованими ребрами або дугами.
Велика кількість структур, які мають практичну цінність у математиці та інформатиці, можуть бути подані графами. Наприклад, будову Вікіпедії можна змоделювати за допомогою орієнтованого графа, в якому вершини — це статті, а дуги (орієнтовані ребра) — посилання на інші статті.
Першою працею з теорії графів як математичної дисципліни вважають статтю Леонарда Ейлера (1736), у якій розглядалася задача про кенігсберзькі мости. Наступний імпульс теорія графів отримала близько 100 років потому з розвитком досліджень електричних мереж, кристалографії, органічної хімії та інших наук[3].
Теорія графів не має стійкої термінології. В різних статтях під одними й тими ж термінами розуміють різні поняття. Наведені нижче визначення належать до найбільш розповсюджених.
Граф
Орієнтований граф з трьома вершинами і трьома ребрами.
Простий не орієнтований граф. Кожна вершина має степінь два, тому це буде регулярний граф.
Граф або неорієнтований граф — це впорядкована пара, для якої виконуються такі умови:
— множина пар (у випадку неорієнтованого графа — невпорядкованих) вершин з , які називаються ребрами.
(і так само ) зазвичай вважають скінченними множинами. Багато результатів, отриманих для скінченних графів, неправильні (або інші) для нескінченних графів. Це пов'язано з тим, що певний набір ідей стає хибним у випадку нескінченних множин.
Граф (геометричний граф) — це фігура на площині, яка складається з непорожньої скінченної множиниVточок (вершин) і скінченної множини E орієнтованих чи не орієнтованих ліній (ребер), що з'єднують деякі пари вершин.
Вершини та називаються суміжними, якщо вони з'єднані ребром . В такому разі кажуть, що вершини та інцидентні ребру , також ребро інцидентне вершинам та .
Ребра та називаються суміжними, якщо вони інцидентні вершині .
Граф, який містить тільки ребра називається неорієнтованим, який містить тільки дуги — орієнтованим. Граф, що має як ребра так і дуги, називається мішаним.
Іноді є потреба пару вершин з'єднати більше, ніж одним ребром. Ребра чи дуги одного напряму, які з'єднують ту саму пару вершин, називаються кратними (паралельними) ребрами.
Дуга чи ребро, що сполучає вершину саму зі собою називається петлею.
Граф без кратних дуг і петель називається простим.
Вершини сполучені ребром чи дугою називаються суміжними, також називаються суміжними ребра, що мають спільну вершину. Ребро (чи дуга) і її вершина називаються інцидентними. Ребро (u, v) з'єднує вершини u і v, дуга (u, v) починається у вершині u і закінчується у вершині v.
Кожен граф можна відобразити в евклідовому просторі множиною точок, які відповідають вершинам, сполучених лініями, що відповідають ребрам (дугам).
Мультиграфом називається пара , де — множина, елементи якої називаються вершинами. — сім'я ребер, кожне з яких — це пара вершин із .
Мультиграф, який може мати петлі, іноді називають псевдографом.
Тип графа
Ребра
Кратні ребра
Простий граф
Неорієнтовані
Ні
Мультиграф
Неорієнтовані
Так
Орієнтований граф
Орієнтовані
Ні
Орієнтований мультиграф
Орієнтовані
Так
Поняття
Цикл — замкнутий ланцюг, для орієнтованих графів цикл називається контуром.
Цикл в орієнтованому графі — це простий шлях довжини не менше 1, котрий починається і закінчується в одній і тій самій вершині.
Якщо мережу автомобільних доріг, ліній комунікацій чи будь-який граф взагалі треба використати в комп'ютерній програмі, то постає проблема збереження інформації про цей граф у пам'яті комп'ютера. Вибір структури даних для збереження графа в пам'яті є визначальним у процесі розробки ефективних алгоритмів.
Надалі вважатимемо, що вершини графа мають номери від 1 до N, а ребра — від 1 до M. Кожному ребру і кожній вершині зіставлена вага — ціле додатне число.
При цьому Graph[i, j] дорівнює 0, якщо вершини i та j не є суміжними, та 1 для суміжних вершин. Для зваженого графаGraph[i, j] дорівнює вазі вершини i, якщо i=j, а для суміжних вершин — вазі ребра (дуги) з вершини i у вершину j.
Просторова складність цього способу O(N2)
Цей спосіб застосовують тоді, коли в задачі треба часто перевіряти суміжність чи знаходити вагу ребра за двома заданими вершинами.
При цьому Graph[i, j] дорівнює 0, якщо вершини i та ребро j не є інцидентними, −1, якщо вершина i є кінцем орієнтованого ребра j, +1, якщо вершина i є початком орієнтованого ребра j. Інколи зручно користуватись означенням, у якому Graph[i, j] дорівнює вазі ребра (дуги) j, що є інцидентним вершині i.
Матриця інцидентності найкраще підходить для операції перерахування ребер, що є інцидентними вершині x.
Список суміжності це послідовність (масив, список) розміром N, кожен елемент якої є списком вершин суміжних з даною:
// список суміжностіTypeTAdjacencyList=array[1..N]ofrecordCount:Integer;{кількість елементів у списку}List:array[1..N]ofrecord{список}Node,{номер суміжної вершини}Weight:Integer;{вага ребра}end;end;VarGraph:AdjacencyList;
Цей спосіб збереження найкраще підходить для перерахування усіх вершин суміжних з x.
// динамічний список ребер (із вказівниками)// застосовують тоді, коли кількість ребер невідома наперед і їх багатоTypeListElPtr=^ListEl;{вершини графа позначені числами }{(номерами)}ListEl=recordNode1,Node2:integer;{список складаються із пар цілих чисел: }{перше - звідки ребро, друге - куди}Next:ListElPtr;{вказівник на наступне ребро графа}end;// список (масив) ребер// застосовують тоді, коли кількість ребер відома наперед і невеликаTypeTBranchList=array[1..M]ofrecordNode1,Node2,{пари вершин, що зв'язує ребро}Weight:Integer;{вага ребра}end;VarGraph:BranchList;
Цей спосіб збереження графа є особливо зручним, якщо головною операцією є перерахування ребер або пошук вершин і ребер, що знаходяться у відносинах інцидентності.
Застосування графів
Графи використовуються в різних галузях науки і техніки, зокрема:
Молекули всіх хімічних речовин можна зобразити у вигляді графа, де атоми є вершинами, а зв'язки між ними — ребрами;
Карта автомобільних чи будь-яких інших шляхів також є графом, причому кожна дорога може мати певне значення «ваги» (наприклад, щільність транспортного потоку), тоді такий граф є зваженим;
Соціальну мережу також можна подати у вигляді графа, де кожна людина чи соціальна група є вершиною, а зв'язки між ними — ребрами;
Будь-який виробничий процес також можна зобразити у вигляді графа (див. приклад — технологічна схема збагачення корисних копалин);
Розробка програмного забезпечення та комп'ютерні науки взагалі є однією з тих галузей, де графи застосовуються найчастіше. Складність та велика кількість модулів і протоколів у сучасних програмних продуктах дуже ускладнює розуміння їх роботи, керування нею та її оптимізацію, тому дуже часто складаються графи програм, причому найчастіше це робиться автоматично трансляторами чи компіляторами. Графи також є зручними для зображення структур даних, блок-схем, потоків даних, схем баз даних та баз знань, скінченних автоматів, схем комп'ютерних мереж та окремих сайтів, схем викликівпідпрограм тощо. Також графи широко використовуються в багатьох алгоритмах пошуку та сортування. Крім того, одним з головних напрямків сучасних досліджень у царині глобальних мереж є задане консорціумом W3C завдання побудови семантичної мережі (один з видів графів) на базі мережі Інтернет.
J. J. Sylvester (February 7, 1878) "Chemistry and algebra, " [Архівовано 5 червня 2020 у Wayback Machine.] Nature, 17 : 284. DOI:10.1038/017284a0. From page 284: «Every invariant and covariant thus becomes expressible by a graph precisely identical with a Kekuléan diagram or chemicograph.»
↑(рос.)Белоусов А. И., Ткачев С. Б. Дискретная математика: Учебник для вузов / Под ред. В. С. Зарубина, А. П. Крищенко. — 3-е изд., стереотипное. — М.: Издательство МГТУ им. Н. Э. Баумана, 2004. ISBN 5-7038-1270-4.