Типи графів у структурі даних з прикладами

⚡ Розумний підсумок

Графи в структурах даних — це нелінійні колекції вершин і ребер, класифіковані на сімейства, такі як орієнтовані, неорієнтовані, зважені, циклічні, ациклічні, повні, зв'язані, двочасткові, графи Ейлера та Гамільтона на основі структури.

  • 📐 Визначення: Граф G = (V, E) — це нелінійна структура, де V — множина вершин, а E — множина ребер, що з'єднують пари вершин.
  • ➡️ напрямок: Орієнтовані графи використовують ребра зі стрілками з фіксованим джерелом і ціллю, тоді як неорієнтовані графи дозволяють двонаправлений рух по кожному ребру.
  • 🇧🇷 вага: Зважені графи прив'язують числову вартість до кожного ребра, тоді як незважені графи трактують усі ребра як з'єднання з рівною вартістю.
  • 🔁 Цикли: Циклічні графи містять один або декілька циклів; орієнтований ациклічний граф (DAG) забороняє цикли та дозволяє планування та топологічне сортування.
  • 🔗 Повнота: Повні графи з'єднують кожну пару вершин, зв'язані графи дозволяють шлях між будь-якими двома вершинами, а нульові графи мають нуль ребер.
  • 🧩 Спеціальні типи: Дводольні, ейлерові, гамільтонові, мультидольні, циклічні та тривіальні графи накладають певне правило на розташування вершин та ребер.

Типи графів у структурі даних

Граф — це нелінійна структура даних, що складається з вершин і ребер. Вершини містять інформацію або дані, а ребра виконують роль сполучної ланки між парою вершин.

Графи можуть бути кількох типів, залежно від положення вузлів та ребер. Ось деякі важливі типи графів:

Орієнтований граф

Ребра орієнтованого графа містять стрілки, що позначають напрямок. Стрілка визначає, куди вказує або де закінчується ребро. Ось приклад орієнтованого графа.

Орієнтований граф

Орієнтований граф

  • Ми можемо перейти від вузла A до D.
  • Однак, ми не можемо перейти від вузла D до вузла A, оскільки ребро вказує від A до D.
  • Оскільки граф не має вагових коефіцієнтів, подорож від вершини A до D коштуватиме так само, як подорож від D до F.

Неорієнтований графік

Неорієнтований граф містить ребра без вказівників. Це означає, що ми можемо переміщатися між двома вершинами у зворотному напрямку. Ось простий приклад неорієнтованого графа.

Неорієнтований графік

Неорієнтований графік

На наведеному вище графіку

  • Ми можемо перейти з пункту А до пункту Б.
  • Ми також можемо перейти з пункту B до пункту A.
  • Ребра не містять напрямків.

Це приклад неорієнтованого графа, що має скінченну кількість вершин і ребер без ваг.

Зважений графік

Граф, що містить ваги або витрати на ребрах, називається зваженим графом. Числове значення зазвичай представляє вартість переміщення з однієї вершини в іншу. Як орієнтовані, так і неорієнтовані графи можуть мати ваги на своїх ребрах. Ось приклад зваженого графа (орієнтованого).

Орієнтований граф з вагою

Орієнтований граф з вагою

  • З пункту А до пункту Б є ребро, а вага дорівнює 5, що означає, що переміщення з пункту А до пункту Б коштуватиме нам 5.
  • А вказує на B, але на цьому графіку B не має прямої переваги над A. Отже, ми не можемо подорожувати з B до A.
  • Однак, якщо ми хочемо перейти від A до F, існує кілька шляхів. Шляхи - ADF та ABF. ADF коштуватиме (10+11) або 21.
  • Тут шлях ABF коштуватиме (5+15) або 20. Тут ми додаємо вагу кожного ребра в шляху.

Ось приклад неорієнтованого графа з вагами:

Неорієнтований графік з вагою

Неорієнтований граф з вагою

Тут край має вагу, але не має напрямку. Отже, це означає, що подорож від вершини A до D коштуватиме 10 і навпаки.

Двонаправлений графік

Двонаправлені та неорієнтовані графи мають спільну властивість, а саме:

  • Зазвичай, неорієнтований граф може мати одне ребро між двома вершинами.

Наприклад:

Двонаправлений графік

  • Тут перехід від A до D або D до A коштуватиме 10.
  • У двонаправленому графі ми можемо мати два ребра між двома вершинами.

Ось приклад:

Двонаправлений графік

Двонаправлений графік

Подорож з A до D коштуватиме нам 17, але подорож з D до A коштуватиме нам 12. Отже, ми не можемо призначити дві різні ваги, якщо це неорієнтований граф.

Нескінченний графік

Граф міститиме нескінченну кількість ребер та вузлів. Якщо граф нескінченний і водночас зв'язний, то він також міститиме нескінченну кількість ребер. Тут розширені ребра означають, що більше ребер можуть бути з'єднані з цими вузлами через ребра. Ось приклад нескінченного графа:

Нескінченний графік

Нескінченний графік

Нульовий графік

Нульовий граф містить лише вузли або вершини, але не має ребер. Якщо задано граф G = (V, E), де V – вершини, а E – ребра, він буде нульовим, якщо кількість ребер E дорівнює нулю. Ось приклад нульового графа:

Нульовий графік

Нульовий графік

Тривіальний граф

Структура даних графа вважається тривіальною, якщо присутня лише одна вершина або вузол без ребер. Ось приклад тривіального графа:

Тривіальний граф

Мультиграф

Граф називається мультиграфом, коли між двома вершинами присутні кілька ребер або вершина має петлю. Термін «петля» в структурі даних графа означає ребро, що вказує на той самий вузол або вершину. Мультиграф може бути орієнтованим або неорієнтованим. Ось приклад мультиграфа:

Мультиграф

З B до A ведуть два ребра. Більше того, вершина E має петлю в собі. Наведений вище графік є орієнтованим графом без ваг на ребрах.

Повний графік

Граф вважається повним, якщо кожна вершина має спрямовані або неорієнтовані ребра з усіма іншими вершинами. Припустимо, що загалом V вершин, і кожна вершина має рівно V-1 ребер. Тоді такий граф називатиметься повним графом. У цьому типі графа кожна вершина з'єднана з усіма іншими вершинами через ребра. Ось приклад повного графа з п'ятьма вершинами:

Повний графік

На зображенні видно, що загальна кількість вузлів дорівнює п'яти, і всі вузли мають рівно чотири ребра.

Підключений граф

Граф називається зв'язним, якщо ми починаємо з вузла або вершини і можемо перейти до всіх вузлів з початкового вузла. Для цього між кожною парою вузлів або вершин має бути принаймні одне ребро. Ось приклад зв'язного графа:

Підключений граф

Ось деякі пояснення вищезгаданого зв'язаного графа:

  • Якщо припустити, що між C та F немає ребра, ми не можемо перейти з A до G. Однак ребро C до F дозволяє нам перейти до будь-якого вузла з заданого вузла.
  • Повний граф є зв’язаним графом, оскільки ми можемо переходити від вузла до будь-якого іншого вузла в даному графіку.

Циклічний графік

Граф називається циклічним, якщо в ньому присутній один або декілька циклів. Ось приклад циклічного графа:

Циклічний графік

Тут вершини A, B та C утворюють цикл. Граф може мати кілька циклів усередині себе.

Спрямований ациклічний графік (DAG)

Граф називається орієнтованим ациклічним графом або DAG, якщо всередині графа немає циклів. DAG важливий під час виконання Топологічне сортування або знаходження порядку виконання. DAG також важливий для створення систем планування або сканування залежностей ресурсів тощо. Однак, наведений вище графік не містить жодного циклу всередині. Ось простий приклад орієнтованого ациклічного графа (DAG):

Спрямований ациклічний графік (DAG)

Графік циклу

Циклічний граф — це не те саме, що циклічний граф. У циклічному графі кожен вузол матиме рівно два з'єднані ребра, тобто кожен вузол матиме рівно два ступені. Ось приклад циклічного графа:

Графік циклу

Дводольний граф

Ці види діаграми є спеціальними видами графів, де вершини призначаються двом множинам. Двочастковий граф повинен дотримуватися правила:

  • Два набори вершин повинні бути різними, що означає, що всі вершини необхідно розділити на дві групи або набори.
  • Вершини з однакової множини не повинні утворювати жодних ребер.

Дводольний граф

Графік Ейлера

Структура даних Graph вважається графом Ейлера, якщо всі вершини мають парний степінь. Термін "степінь вершин" означає кількість ребер, що вказують на певну вершину або виходять з неї. Ось приклад графа Ейлера:

Графік Ейлера

Усі вершини мають парні ступені. Вершини A, D, E та H мають два ступені. Тут вузол C має чотири ступені, що є парним.

Графік Гамільтона

Граф Гамільтона — це зв'язний граф, де можна відвідати всі вершини з заданої вершини, не повертаючись до того самого вузла чи використовуючи те саме ребро. Такий тип зв'язного графа відомий як «граф Гамільтона». Шлях, який ви проходите, щоб перевірити, чи є даний граф графом Гамільтона, називається гамільтоновим шляхом. Ось простий приклад графа Гамільтона:

Графік Гамільтона

На цьому зображенні ми можемо відвідати всі вершини з будь-якого вузла на наведеному вище графіку. Одним із шляхів може бути ADCHBEТакож можливо знайти цикл Гамільтона. Цикл Гамільтона починається та закінчується в одній вершині. Отже, цикл Гамільтона буде АДЧБЕА.

Поширені запитання

Граф — це нелінійна структура даних, що складається з вершин (вузлів) та ребер (зв'язків). Вершини зберігають дані, а ребра з'єднують пари вершин, утворюючи мережі, що використовуються для моделювання доріг, соціальних зв'язків, залежностей тощо.

Орієнтовані графи використовують ребра зі стрілками, що вказують від джерела до цілі, обмежуючи переміщення в цьому напрямку. Неорієнтовані графи використовують ребра без стрілок, що дозволяє переміщення між з'єднаними вершинами в будь-якому напрямку.

Орієнтований ациклічний граф, або DAG, — це орієнтований граф, який не містить циклів. DAG широко використовуються для планування завдань, систем збірки, вирішення залежностей пакетів та будь-якого робочого процесу, який вимагає дійсного топологічного порядку.

Зважений граф надає кожному ребру числову вагу, яка представляє відстань, час або вартість. Алгоритми найкоротшого шляху, такі як Дейкстра та протоколи мережевої маршрутизації, використовують зважені графи для знаходження найефективнішого шляху.

Повний граф має ребро між кожною парою вершин. Зв'язному графу потрібен лише шлях між кожною парою. Кожен повний граф є зв'язним, але не кожен зв'язний граф є повним.

Дводольні графи розділяють вершини на дві непересічні множини з ребрами лише між цими двома множинами. Вони моделюють проблеми зіставлення, такі як призначення працівників роботам, студентів курсам або водіїв, що замовляють поїздки, пасажирам.

Графові нейронні мережі застосовують машинне навчання до даних у графовій формі для таких завдань, як виявлення шахрайства, пошук ліків та рекомендації. Графи знань забезпечують відповіді на запитання за допомогою штучного інтелекту, а графіки обчислень описують кожен прохід уперед і назад у глибокому навчанні.

Так. Інструменти AI Copilot, такі як GitHub Copilot та ChatGPT, генерують шаблони для BFS, DFS, сортування Дейкстри та топологічного сортування у більшості мов програмування. Розробникам все ще потрібно перевіряти граничні випадки, обробку циклів та складність для продакшн-коду.

Підсумуйте цей пост за допомогою: