Алгоритми на графах
Пошук в глибину, пошук в ширину

Теорія графів
Теорія графів — розділ математики, що вивчає властивості графів. Наочно граф можна уявити як геометричну конфігурацію, яка складається з точок (вершини) сполучених лініями (ребрами). У строгому визначенні графом називається така пара множин G = (V, E), де V є підмножина будь-якої зліченної множини, а E — підмножина V × V.Визначення графу є настільки загальним, що цим терміном можна описувати безліч подій та об'єктів повсякденного життя. Високий рівень абстракції та узагальнення дозволяє використовувати типові алгоритми теорії графів для вирішення зовнішньо несхожих задач у транспортних і комп'ютерних мережах, будівельному проектуванні, молекулярному моделюванні тощо. Теорія графів знаходить застосування, наприклад, в геоінформаційних системах (ГІС). Існуючі або запроектовані будинки, споруди, квартали тощо розглядаються як вершини, а дороги, інженерні мережі, лінії електропередачі, що їй з'єднують, тощо — як ребра. Застосування різних обчислень, вироблених на такому графі, дозволяє, наприклад, знайти найкоротший об'їзний шлях або найближчий продуктовий магазин, спланувати оптимальний маршрут.Теорія графів містить велику кількість невирішених проблем і поки не доведених гіпотез.
Дивитись більше

Пошук в ширину
Пошук в глибину
Алгоритм Дейкстри
Алгоритм Флойда
Алгоритм Краскала
Пошук в ширину
Суть алгоритму полягає в тому, щоб перебрати всіх наступників початкової вершини (кореневого вузла), і далі по ланцюжку. Такий алгоритм допомагає отримати компоненту зв'язності, тобто схему, куди можна прийти з якоїсь заданої вершини. Застосовуючи цей алгоритм по черзі для всіх вершин, можна знайти найкоротшу відстань, оптимальний шлях між двома вершинами і так далі, в залежності від запропонованих умов.
Пошук в глибину
Алгоритм пошуку в глибину описується наступним чином: для кожної непройденої вершини необхідно знайти всі непройдені суміжні вершини і повторити пошук для них. Використовується в якості підпрограми в алгоритмах пошуку одно- і двусвязного компонент, топологічної сортування. Реалізується простіше пошук в глибину, але витрат на ресурсів більше, так як тут головну роль відіграє рекурсія.
Алгоритм Дейкстри
Знаходить найкоротшу відстань від однієї з вершин графа до всіх інших. Алгоритм працює тільки для графів без ребер негативноїваги (так як на такому циклі нескінченно буде зменшуватись найкращий шлях). На кожному кроці циклу ми шукаємо вершину з мінімальною відстанню і флашком рівним нулю. Потім ми відзначаємо її пройденою і перевіряємо всі сусідні з нею вершини. Якщо в ній відстань більше, ніж сума відстані до поточної вершини і довжини ребра, то зменшуємо його. Цикл завершується коли всі вершини будуть пройдені. Час роботи алгоритму оцінюється як O (N ^ 2).
Алгоритм Флойда
Також знаходить масив найкоротших відстаней. Але на відміну від алгоритму Дейкстри, він використовує динамічне програмування. На кожному кроці циклу k створюється масив рішень, де w [i, j] містить мінімальну відстань, де використовуються тільки вершини 1,2..k і самі i та j. На початковому етапі W копіює матрицю суміжності. Тоді на кожному k є два варіанти - мінімальний шлях йде через вершину k чи ні. Теоретично такий метод набагато легше реалізувати (банальний перебір), але використовує більше машинних ресурсів, ніж Дейкстра (складність алгоритму оцінюється як O (N ^ 3), зате шукає мінімальні шлях між усіма парами точок).
Алгоритм Краскала
Знаходить каркас мінімальної ваги, тобто такий підграф вихідного графа, який би був зв'язковим, містив всі вершини вихідного графа і сумарна вага ребер була найменшою. У цьому завданні використовується список ребер. Спочатку поточна множина ребер встановлюється порожньою. Потім, поки це можливо, проводиться наступна операція: з усіх ребер, додавання яких до вже наявного безлічі не викличе появу в ньому циклу, вибирається ребро мінімальної ваги і додається до вже наявної множини. Коли таких ребер більше немає, алгоритм завершений. Масив ребер повинен бути заздалегідь відсортований у вазі (можна привести доказ: якщо спочатку розглядати ребро R1 (i, j)> R2 (i, j), то вонр потім буде видалено, оскільки ми зустріли в списку ребер R2 (i, j), який важить менше R1, а видалення ребер в алгоритмі не передбачено).

Наша команда
Не покладаючи рук, трудилися
Сільвейстр Богдан
@the_stunx
Паламар Максим
@max_palamar
Майданюк Артем
@___a._r._t._e._m.___
This site was made on Tilda — a website builder that helps to create a website without any code
Create a website