Алгоритм Дейкстри
Як видно з останнього прикладу ваги вершин Vi перераховувались неодноразово і з'являлись декілька раз в масиві М, будучи джерелом нових хвиль розповсюдження ваг. Цей недолік може бути усунений за допомогою алгоритму Дейкстри, відмінність якого полягають в тому, що на кожному кроці обирається для розповсюдження ваги вершина, яка має найменшу вагу, яка не розповсюдила його на другі вершини. Таким чином, в алгоритмі Дейкстри потрібно відмітити вершини, які вже розповсюдили свою вагу, а з інших вибрати чергову з найменшою вагою.
Формулювання алгоритму.
l. VH=0, x1(iH)(Vi=). Всі вершини не відмічені.
2. Серед невідмічених вершин вибираємо х1 з найменшою вагою Vі, вершину відмічаємо, якщо Vі=, то робимо висновок, що маршрутів з вершини хн до вершини хк нема, інакше, якщо вибрана вершина хі=хк, то виконуємо п.3, інакше перераховуємо ваги вершин, які належать G(xi): Vj=min(Vj,Vi+lij). Виконуємо п.4.
3. Аналогічний п.3 хвильового алгоритму.
Як бачимо, процес розв'язання для обох прикладів трохи скоротився, хоча на кожному кроці необхідно вибирати вершину меншої ваги.
X1 |
X2 |
X3 |
X4 |
X5 |
X6 |
|
0 |
∞ |
∞ |
∞ |
∞ |
∞ | |
|
1 |
4 |
∞ |
∞ |
∞ | |
|
|
5 |
6 |
∞ |
∞ | |
|
|
|
5 |
7 |
∞ | |
|
|
|
|
6 |
9 | |
|
|
|
|
|
8 |
X1 |
X2 |
X3 |
X4 |
X5 |
X6 |
|
0 |
∞ |
∞ |
∞ |
∞ |
∞ | |
|
5 |
2 |
∞ |
∞ |
∞ | |
|
4 |
|
∞ |
5 |
∞ | |
|
|
|
7 |
5 |
∞ | |
|
|
|
6 |
|
9 | |
|
|
|
|
|
8 |
Примітка про найдовші маршрути
В багатьох додатках поряд з найкоротшими маршрутами постає задача побудови найдовших маршрутів. Наприклад, в програмі необхідно знати не тільки найменший, але й найбільший час реалізації. При побудові графіка робіт найбільший час виконання робіт має суттєве значення і т.д. Якщо в алгоритмах пошуку найкоротшого маршруту замінити процедуру розрахунку ваг вершин
і у першому пункті хвильового алгоритму присвоїти всім вершинам вагу 0, то автоматично будуть будуватися найдовші маршрути.
Під час побудови найдовших маршрутів розглядаються елементарні або прості найдовші маршрути, найдовші маршрути з заданим числом виконання циклу.
Приклад.
X1 |
X2 |
X3 |
X4 |
X5 |
X6 |
M |
Рисунок 4 |
0 |
0 |
0 |
0 |
0 |
0 |
1 | |
0 |
1 |
4 |
0 |
0 |
0 |
2,3 | |
0 |
1 |
4 |
6 |
0 |
0 |
3,4 | |
0 |
1 |
4 |
6 |
8 |
0 |
4,5 | |
0 |
1 |
4 |
6 |
8 |
10 |
5,6 | |
0 |
1 |
4 |
6 |
8 |
10 |
6 | |
0 |
1 |
4 |
6 |
8 |
10 |
Побудовані три найдовші маршрути
Всі вони мають довжину 10.