Professional Documents
Culture Documents
РГР Каракушан АІ-226
РГР Каракушан АІ-226
Розрахунково-графічна робота
з дисципліни «Теорія алгоритмів»
Тема: «Алгоритм визначення найкоротшого шляху»
Виконала:
Студентка групи АІ-226
Каракушан К.Г.
Прийняли:
Арсірій О. О.
Смик С. Ю.
Одеса 2023
Завдання: Розробіть та реалізуйте алгоритм визначення
найкоротшого шляху між будь-якими двома визначними пам’ятками
обраними на мапі.
Призначення:
Властивості:
Оптимальність:
o На кожному кроці вибирається вершина з найменшою
відстанню, тому гарантовано знаходить найкоротший шлях
для кожної вершини.
Складність:
Дискретність:
Напрямок:
Основні Кроки:
Ініціалізація:
Основний Цикл:
Формування Відповіді:
Вихідні Дані:
Застосування:
Псевдокод:
pred = CreateArray(|V|)
dist = CreateArray(|V|)
pq = CreatePQ()
for each v in V
pred[v] = -1
if v ≠ s:
dist[v] = ∞
else:
dist[v] = 0
InsertInPQ(pq, v, dist[v])
while SizePQ(pq) ≠ 0:
u = ExtractMinFromPQ(pq)
pred[v] = u
UpdatePQ(pq, v, dist[v])
// Конструктор результату
public Result(int shortestDistance, List<Integer> shortestPath) {
this.shortestDistance = shortestDistance;
this.shortestPath = shortestPath;
}
}
// Конструктор графу
public Graph(int vertices) {
this.vertices = vertices;
this.adjacencyList = new HashMap<>();
for (int i = 1; i <= vertices; i++) {
this.adjacencyList.put(i, new ArrayList<>());
}
}
// Конструктор ребра
public Edge(int destination, int weight) {
this.destination = destination;
this.weight = weight;
}
}
while (!priorityQueue.isEmpty()) {
Edge currentEdge = priorityQueue.poll();
int currentVertex = currentEdge.destination;
path.add(source);
Collections.reverse(path);
return path;
}
}
4. Приклади та покрокова візуалізація роботи коду
Вихідні дані:
Результат рішення алгоритму в коді виглядає так (рис. 4.5.):
Перший крок:
- Знаходимо невідвідану вершину з найменшою міткою і це
вершина 1. Переглянемо суміжні їй вершини – 2 і 4. Змінюємо
мітки цих вершин на відповідно 50 і 18 (рис. 4.7.)
Третій крок:
- Знаходимо невідвідану вершину з найменшою міткою і це
вершина 2. Переглянемо суміжні їй вершини – 1, 3 і 5. Мітка 1
вершини незмінна, вона початкова, мітка 3 вершини не
змінюється так як 128(50+78)>103, при такій умові значення не
змінюється, мітка 5 вершини змінюється на 95. (рис. 4.9.)
Рис. 4. 9. – Визначення вершин, які суміжні для вершини 2.
Четвертий крок:
- Знаходимо невідвідану вершину з найменшою міткою і це
вершина 6. Переглянемо суміжні їй вершини – 4 і 8. В вершині 4
мітка не змінюється, в вершині 8 мітка приймає значення –
86(18+45+23) (рис.4.10.)
Шостий крок:
- Знаходимо невідвідану вершину з найменшою міткою і це
вершина 7. Переглянемо суміжні їй вершини – 8, 4 і 3.
Вершини не змінюються (рис. 4.12.)
Рис. 4.12. - Визначення вершин, які суміжні для вершини 7
Сьомий крок:
- Знаходимо невідвідану вершину з найменшою міткою і це
вершина 5. Переглянемо суміжні їй вершини – 2 і 3. Вершини
не змінюються (рис. 4.13.)
Рис. 4.15. – Граф, у якому всі вершини мають свої відповідні мітки.
Тепер знаходимо найкоротший шлях в графі від вершини 1 до 8
(рис. 4.16.):
Висновки:
Проект успішно досягнув своєї мети: був розроблений та
реалізований алгоритм для визначення найкоротшого шляху між
визначними пам'ятками. Результати свідчать про високу функціональність
та точність алгоритму. Графічне відображення робить отримані дані
доступними та зрозумілими для користувачів. Проект може бути
використаний як основа для розширення функціональності або
впровадження в реальне використання, наприклад, для туристичних
додатків або навігації.