Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
full_v2.doc
Скачиваний:
12
Добавлен:
01.07.2025
Размер:
13 Мб
Скачать
☆

Задания для самостоятельной работы

1. Задайте произвольный граф G = (X, U), |X| = 5, |U| = 7. Определите количество маршрутов длиной 2, 3, 4.

2. Составьте словесный алгоритм определения маршрутов в графе.

3. Составьте структурную схему алгоритма определения маршрутов в графе.

4. Задайте произвольный граф G = (X, U), где X = 6; U = 10. Постройте маршрут, цепь, цикл, простую цепь, простой цикл. Покажите на примере отличия между этими видами маршрутов.

5. Составьте структурную схему алгоритма или словесный алгоритм определения связности произвольного неориентированного графа.

6. Задайте произвольный граф G = (X, U), где X = 6; U = 18. Приведите пример правильного разреза и разреза графа.

7. Приведите пример графа, имеющего точку сочленения.

8. Приведите пример неразделимого графа.

9. Приведите пример графа блоков.

10. Постройте граф G и покажите на его примере взаимосвязь между числом реберной и вершинной связности и минимальной локальной степенью вершин графа.

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

15.3. Нахождение кратчайших маршрутов (цепей)

15.3.1. Алгоритм Форда

Приведем алгоритм Форда нахождения маршрутов с минимальной суммарной стоимостью ребер. Будет анализироваться помеченный граф с весами на ребрах. Граф с весами на ребрах называется взвешенным.

1. Строим матрицу R взвешенного графа G.

Если вершины не смежны между собой, то в матрице ставим M. Фиксируем одну вершину xk и приписываем ей вес V(k) = 0, всем остальным вершинам приписываем вес V(j) = M.

2. Берем произвольную вершину xjxk и находим смежную с xj вершину xi, имеющую вес ri,j. В начальный момент в качестве вершины xi берем фиксированную xk. Для xj и xi проверяется выполнение неравенства

V(j) > V(i) + ri,j. (15.8)

Если оно выполняется, то прежний вес V(j) вершины xj заменяется суммой V(i) + ri,j. В противном случае, вес V(j) остается неизменным.

3. Повторяем пп. 1, 2 пока не рассмотрены все вершины.

4. Конец работы алгоритма.

Для уменьшения объема вычислений операцию пересчета индексов сначала выполняют для всех xj, смежных с фиксированной xk, а затем продолжают это для вершин, смежных с выбранными ранее.

Операция пересчета производится для всех вершин графа до тех пор, пока ни одна из вершин не сможет принимать нового значения V(j). Тогда длинами кратчайших цепей от xj до xk будут величины V(j), полученные в результате замен переменных весов V(j) на новые.

Например, для графа G рис. 15.31 выполним алгоритм Форда.

Рис. 15.31. Пример графа G

В матрице R по главной диагонали проставлены нули, так как в графе G нет петель. При отсутствии связи между вершинами проставлен знак М.

Матрица смежности этого графа запишется так:

1

2

3

4

5

6

7

1

0

4

5

9

M

2

M

.

2

4

0

M

M

M

5

6

3

5

M

0

3

3

M

7

R = 4

9

M

3

0

8

M

M

5

M

M

3

8

0

M

1

6

2

5

M

M

M

0

3

7

M

6

7

M

1

3

0

Принимаем вес вершины х1 равным V(1) = 0, V(2) = V(3) = … = V(7) = M = .

1) Фиксированная вершина xk = x1.

2) Просматриваем все пары xi, xj и проверяем выполнение неравенства (15.8).

Пусть i = 1, j = 2, тогда имеем V(1) = 0, V(2) = M, r1,2 = 4.

Условие неравенства V(2) = M > V(1) + r1,2 = 0 + 4 = 4. Поэтому вершине x2 присваиваем новый вес V(2)1 = 4.

Для вершин, у которых ri,j = M, неравенство (15.8) выполняться не будет и вес V(j) останется прежним.

Далее, для x3: V(3) = M > V(1) + r1,3 = 0 + 5 = 5 и V(3)1 = 5.

Для x4: V(4) = M > V(1) + r1,4 = 0 + 9 = 9 и V(4)1 = 9.

Для x6: V(6) = M > V(1) + r1,6 = 0 + 2 = 2 и V(6)1 = 2.

Теперь произведем пересчет индексов для вершин, смежных с x1, с учетом пути через другие смежные вершины.

Для x2: V(2) = 4 < V(6) + r2,6 = 2 + 5 = 7, значит, индекс вершины остается без изменения.

Для x4: V(4) = 9 > V(3) + r4,3 = 5 + 3 = 8, следовательно, меняем значение V(4) с 9 на 8 (см рис. 1.31).

Для x6: V(6) = 2 < V(2) + r2,6 = 4 + 5 = 9, здесь индекс остается без изменения.

Произведем пересчет индексов для вершин, несмежных с фиксированной вершиной x1.

Вычислим индекс вершины x5, его можно найти через x3, x4 или x7. Индекс x7 равен М, поэтому для нее неравенство (15.8) не выполняется.

Вычислим индекс вершины x5 через x4. Получим V(5)41 = M > V(4)1 + r4,5 = 8 + 8 = 16.

Приняв V(5)1 = 16 за старое значение индекса, пересчитаем его через x3:

V(5)31= 16 > V(3)1 + r3,5 = 5 + 3 = 8.

Так как условие (15.8) выполняется, то значение индекса V(5)1 = 16 заменяем на V(5)2 = 8.

Индекс x7 можно определить через x2, x3, x5, x6.

V(7)21 = M > V(2)1 + r2,7 = 4 + 6 = 10,

V(7)51 = M > V(5)1 + r5,7 = 8 + 1 = 9,

V(7)31 = M > V(3)1 + r3,7 = 5 + 7 = 12,

V(7)61 = M > V(6)1 + r6,7 = 2 + 3 = 5.

Итак, V(1) = 0, V(2) = 4, V(3) = 5, V(4) = 8, V(5) = 8, V(6) = 2, V(7) = 5.

Алгоритм Форда дает кратчайшее расстояние от выбранных вершин до фиксированной вершины, а сами цепи не определяет.

Для определения цепи от выбранной вершины до фиксированной воспользуемся равенством V(j) ─ V(i) = ri,j.

Например, найдем путь от x7 до x1. Ищется предпоследний шаг при пересчете индекса V(7)1. Это x7 ─ x6. Затем для x6 определяется вершина пересчета. Это x6 - x1. Следовательно, кратчайший путь x7 ─ x6 ─ x1, а кратчайшее расстояние между вершинами x1 и x7 определено ранее V(7)1 = 5.

Предположение, что при выборе на каждом шаге ближайшей вершины ожидаемая длина всего маршрута будет меньше, чем при любом другом выборе, не очевидно.

На рис. 15.32 приведен пример, когда необходимо определить путь из вершины

Рис. 15.32. Пример нахождения минимального маршрута

А в В с минимальной стоимостью. При выборе ближайшей вершины 1 из вершины А получим длину маршрута АВ = 13. Например, длины маршрутов А – 1 – 6 – 7 – В или А – 1 – 2 – 7 – 8 – В равны 13. В то же время все другие маршруты (через вершину 3) дают длину маршрута АВ = 8 (например, А – 3 – 4 – 5 – В).

Отметим, что здесь необходима стратегия просмотра длины маршрута в глубину на несколько шагов. Хотя в общем случае этот метод может свестись к полному перебору вариантов.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]