Синтез сети межузловой связи.
Нахождение циклов наименьшей длины представляет собой «задачу ком- мивояжера» — задачу поиска маршрута коммивояжера наименьшей длины. Точным решением «задачи коммивояжера» является результат, получен-
ный в результате перебора всех вариантов маршрута.
Маршрутом коммивояжера является гамильтонов контур — контур,
включающий каждую вершину графа ровно один раз.
Для решения задачи коммивояжера можно использовать эвристические алгоритмы. Эвристические алгоритмы являются приближенными. Они
строятся с использованием рациональных, с точки зрения логики человека, правил выполнения вычислений.
Сравним эвристические и точные алгоритмы.
Достоинства:
эвристических — быстрые, меньше вычислений,
точных — высокая точность результатов.
Недостатки:
эвристических — приблизительная точность,
точных — высокая длительность вычислений.
11
Рисунок 4.1 – Цикл Рисунок 4.2 - Цикл
1 → 2 → 3 → 7 → 10 → 9 → 8 → 1 → 2 → 4 → 6 → 3 → 7 → 10→
5 → 6 → 4 → 1 9 → 8 → 5 → 1
Рисунок 4.3 – Цикл Рисунок 4.4 - Цикл
1 → 4 → 2→ 3→ 6 → 5 → 8 → 1 → 4→ 2 → 3 → 6 → 7 → 10→
9 → 10 → 7 → 1 9 → 8 → 5 → 1
12
Рисунок 4.5 – Цикл Рисунок 4.6 - Цикл
1 → 4 → 2→ 3→ 7→ 6 → 9 → 1 → 4→ 2 → 3 → 7 → 10 → 8→
10 → 8 → 5→ 1 9 → 6 → 5 → 1
Рисунок 4.7 – Цикл Рисунок 4.8 - Цикл
1 → 4 → 2→ 3→ 7→ 10 → 9 → 1 → 4→ 2 → 3 → 7 → 10 → 9→
6 → 5 → 8→ 1 6 → 8 → 5 → 1
13
Рисунок 4.9 – Цикл Рисунок 4.10 - Цикл
1 → 4 → 2→ 3→ 7→ 10 → 9 → 1 → 5→ 6 → 4 → 2→ 3 → 7→
8 → 6 → 5→ 1 10 → 9 → 8 → 1
Рисунок 4.11 – Цикл
1 → 5 → 8→ 10→ 9→ 6 → 4 →
2 → 3 → 7→ 1
14
Нахождение кратчайших путей
Для нахождения минимальных расстояний от одной вершины графа до всех остальных применяется алгоритм Дейкстры.
Алгоритм Дейкстры (Dijkstra’s algorithm) — алгоритм на графах,
изобретённый нидерландским ученым Э. Дейкстрой в 1959 году. Находит кратчайшее расстояние от одной из вершин графа до всех остальных. Алгоритм работает только для графов без рёбер отрицательного веса. Алгоритм широко применяется в программировании и технологиях, например, его использует протокол OSPF для устранения кольцевых маршрутов.
В начале алгоритма расстояние для начальной вершины полагается
равным нулю, а все остальные расстояния заполняются большим положительным числом (большим максимального возможного пути в графе). Массив флагов заполняется нулями. Затем запускается основной цикл.
На каждом шаге цикла мы ищем вершину с минимальным расстоянием и флагом равным нулю. Затем мы устанавливаем в ней флаг в 1 и проверяем все соседние с ней вершины. Если в ней расстояние больше, чем сумма расстояния до текущей вершины и длины ребра, то уменьшаем его. Цикл завершается когда флаги всех вершин становятся равны 1, либо когда у всех вершин c флагом 0 длина равна значению, большему максимально возможного пути в графе. Последний случай возможен тогда и только тогда, когда граф не связан.
15
1 → 2
1 → 2→3
1 → 4
1 → 5
1 → 7→ 6
1 → 7
1 → 8
1 →7→ 10→ 9
1 →7→ 10
Рисунок 5.1 – Пути из вершины 1
16
2→ 1
2 → 3
2→ 4
2→ 1→ 5
2 →3→ 7→ 6
2 →3→ 7
2 →3→ 6→ 8
2 →3→ 7→ 10→ 9
2 →3→ 7→ 10
Рисунок 5.2 – Пути из вершины 2
17
3→ 2
3→7→ 1
3→ 2→ 4
3→ 2→ 1→ 5
3→6
3→ 7
3→6→ 8
3 →7→ 10→ 9
3 →7→ 10
Рисунок 5.3 – Пути из вершины 3
18
4→ 1
4→ 2
4→ 2→ 3
4→ 1→ 5
4→1→ 7→ 6
4→ 1→ 7
4→1→ 8
4 →1→ 7→ 10→9
4 →1→ 7→ 10
Рисунок 5.4 – Пути из вершины 4
19
5→ 1
5→ 1→ 2
5→ 1→ 2→ 3
5→ 1→ 4
5→ 8→ 6
5→ 1→ 7
5→ 8
5→9→ 9
5 →1→ 7→ 10
Рисунок 5.5 – Пути из вершины 5
20
6→ 7→ 1
6→ 3→ 2
6→ 3
6→ 7→ 1→ 4
6→ 5
6→ 7
6→ 8
6→8→ 10→ 9
6 →8→ 10
Рисунок 5.6 – Пути из вершины 6
21
7→ 1
7→ 3→ 2
7→ 3
7→ 1→ 4
7→ 1→ 5
7→ 6
7→ 6→ 8 или 7→ 1→ 8
7→10→ 9
7→ 10
Рисунок 5.7 – Пути из вершины 7
22
8→ 1
8→ 6→ 3→ 2
8→ 6→ 3
8→ 1→ 4
8→ 5
8→ 6
8→ 6→ 7 или 8→ 1→ 7
8→10→ 9
8→ 10
Рисунок 5.8 – Пути из вершины 8
23
9→ 10→ 7→ 1
9→10→7→ 3→ 2
9→ 10→ 7 → 3
9→ 10→ 7→ 1→ 4
9→ 10→ 8→ 5
9→10→ 8→ 6
9→ 10→ 7
9→10→ 8
9→ 10
Рисунок 5.9 – Пути из вершины 9
24
10→ 7→ 1
10→7→3→ 2
10→ 7→ 3
10→ 7→ 1→ 4
10→ 8→ 5
10→8→ 6
10→ 7
10→ 8
10→ 9
Рисунок 5.10 – Пути из вершины 10
25