
- •Основы теории
- •ОСНОВНЫЕ ПОНЯТИЯ ТЕОРИИ
- •ОСНОВНЫЕ ПОНЯТИЯ ТЕОРИИ
- •Наглядное
- •Табличное
- •СВЯЗНОСТЬ ГРАФА
- •Цикл
- •В ходе рассуждений Эйлер пришёл к следующим выводам:
- •Гамильтонов
- •ВЗВЕШЕННЫЙ ГРАФ
- •Построение остовного
- •Математическая
- •Алгоритм Прима
- •Алгоритм
- •Алгоритм Краскала
- •Алгоритм Краскала
- •Поиск кратчайшего пути в графе
- •Алгоритм Дейкстры
- •Идея алгоритма Дейкстры
- •Алгоритм Дейкстры
- •ПРИМЕР
- •Второй шаг. Шаг алгоритма повторяется. Снова находим «ближайшую» из непосещенных вершин. Это вершина
- •Третий шаг. Повторяем шаг алгоритма, выбрав вершину 3. После её «обработки» получим:
- •Алгоритм Флойда -
- •Обозначения
- •Обозначения
- •Суть алгоритма Флойда
- •Алгоритм Флойда на примере
- •Алгоритм Флойда на примере
- •Алгоритм Флойда на примере
- •Алгоритм Флойда на примере
- •Алгоритм Флойда на примере
- •Алгоритм Флойда на примере
- •Алгоритм Флойда на примере
- •Алгоритм Флойда на примере
- •Алгоритм Флойда на примере
- •Алгоритм Флойда на примере
- •Алгоритм Флойда на примере
- •Задача коммивояжёра
- •Метод ветвей и границ ("поиск с возвратом", "backtracking")
- •Алгоритм Литтла для задачи коммивояжера (Литтла, Мурти, Суини и Кэрел)
- •Алгоритм Литтла
- •Алгоритм Литтла
- •Алгоритм Литтла
- •Алгоритм Литтла (пример)
- •Алгоритм Литтла (пример. Шаг 1)
- •Алгоритм Литтла (пример. Шаг 1)
- •Алгоритм Литтла (пример. Шаг 2)
- •Алгоритм Литтла (пример. Шаг 2)
- •Алгоритм Литтла (пример. Шаг 3)
- •Алгоритм Литтла (пример. Шаг 1)
- •Алгоритм Литтла (пример. Шаг 2)
- •Алгоритм Литтла (пример. Шаг 3)
- •Алгоритм Литтла (пример. Шаг 3)
- •Алгоритм Литтла (пример. Шаг 1,2)
- •Алгоритм Литтла (пример. Шаг 1,2)
- •Алгоритм Литтла (пример. Шаг 1,2)
- •Алгоритм Литтла (пример. Шаг 3)
- •Алгоритм Литтла (пример. Возврат к слайду 56)
- •Алгоритм Литтла (оптимальное решение)

Алгоритм Литтла для задачи коммивояжера (Литтла, Мурти, Суини и Кэрел)
Применительно к задаче о коммивояжере идея метода ветвей и границ такова:
Ветвление основано на следующем простом соображении: переезд из любого данного
города i в любой другой город j может либо принадлежать оптимальному циклу
коммивояжера, либо не принадлежать ему. При вычислении же границ используется тот факт, что изменение длин всех путей, приводящих в данный город, или всех путей, выводящих из данного города, на одну и ту же величину
приводит к новой задаче, оптимальный план которой совпадает с оптимальным планом исходной задачи.

Алгоритм Литтла
1.В каждой строке матрицы стоимости найдем минимальный элемент и вычтем его из всех элементов строки. Сделаем это и для столбцов, не содержащих нуля. Получим матрицу стоимости, каждая строка и каждый столбец которой содержат хотя бы один нулевой элемент.
2.Для каждого нулевого элемента матрицы dij рассчитаем коэффициент Гij, который равен
сумме наименьшего элемента i строки (исключая элемент dij=0) и наименьшего элемента j столбца.
Из всех коэффициентов Гij выберем такой, который является максимальным Гkl = max{Гij}. В
гамильтонов контур вносится соответствующая дуга (k,l).

Алгоритм Литтла
3.Удаляем k-тую строку и столбец l, поменяем на бесконечность значение элемента dlk (поскольку дуга (k,l) включена в контур, то обратный путь из l в k недопустим).
4.Повторяем алгоритм c шага 1, пока порядок матрицы не станет равным двум.
5.Затем в текущий ориентированный граф вносим две недостающие дуги, определяющиеся однозначно матрицей прядка 2. Получаем гамильтонов контур.

Алгоритм Литтла
В ходе решения ведется постоянный подсчет текущего значения нижней границы.
Нижняя граница равна сумме всех вычтенных элементов в строках и столбцах.
Итоговое значение нижней границы должно совпасть с длиной результирующего контура (пути).

Алгоритм Литтла (пример)
1 2 3 4 5 6
1 |
∞ |
7 |
|
9 |
2 |
|
2 |
|
|
∞ |
|
0 |
|
0 |
|
2 |
7 |
1 |
1 |
|
2 |
||
|
0 |
5 |
|
1 |
|||
3 |
9 |
1 |
|
∞ |
1 |
|
1 |
|
0 |
|
1 |
|
1 |
||
4 |
2 |
1 |
|
1 |
∞ |
|
6 |
0 |
5 |
|
1 |
∞ |
|||
5 |
2 |
2 |
|
1 |
6 |
||
Матри0 |
ца1 |
кратчай1 |
ши |
||||
расстояний, где d |
9 |
||||||
6 |
1 |
1 |
|
2 |
1 |
|
|
|
1 |
2 |
|
|
3 |
|
|
1
1
1
2
2
1
3
9
∞

Алгоритм Литтла (пример. Шаг 1)
|
1 |
2 |
3 |
4 |
5 |
6 |
1 |
∞ |
7 |
9 |
2 |
2 |
1 |
|
|
|
|
0 |
0 |
1 |
2 |
7 |
∞ |
1 |
1 |
2 |
1 |
|
|
|
0 |
5 |
1 |
2 |
3 |
9 |
1 |
∞ |
1 |
1 |
2 |
|
|
0 |
|
1 |
1 |
|
4 |
2 |
1 |
1 |
∞ |
6 |
1 |
|
0 |
5 |
|
|
|
3 |
|
1 |
2 |
3 |
4 |
5 |
6 |
1 |
∞ |
0 |
2 |
1 |
1 |
4 |
|
|
|
|
3 |
3 |
|
2 |
0 |
∞ |
3 |
8 |
1 |
5 |
|
|
|
|
|
4 |
|
3 |
7 |
8 |
∞ |
9 |
9 |
0 |
4 |
1 |
9 |
5 |
∞ |
0 |
7 |
|
4 |
|
|
|
|
|
мин |
|
|
7 |
|
|
7 |
|
|
2 |
|
|
6 |
Сумма констант приведения |
|
6 |
||
равна 7+7+2+6+6+2 = 30 |
||
2 |
|
Во всех столбцах есть нулевые элементы.
Приводить по столбцам не нужно

Алгоритм Литтла (пример. Шаг 1)
|
1 |
2 |
3 |
4 |
5 |
6 |
|
|
1 |
∞ |
0 |
2 |
1 |
1 |
4 |
Тур, проходящий только |
|
|
|
|
|
3 |
3 |
|
||
2 |
0 |
∞ |
3 |
8 |
1 |
5 |
через ребра нулевой |
|
стоимости, будет, очевидно, |
||||||||
|
|
|
|
|
4 |
|
||
3 |
7 |
8 |
∞ |
9 |
9 |
0 |
минимальным. |
|
Его стоимость 30. |
||||||||
4 |
1 |
9 |
5 |
∞ |
0 |
7 |
||
|
4 |
|
|
|
|
|
|
|
5 |
1 |
1 |
5 |
0 |
∞ |
3 |
|
|
|
4 |
6 |
|
|
|
|
|
|
6 |
9 |
1 |
0 |
1 |
7 |
∞ |
|
|
|
Таким образом, мы получили нижнюю оценку |
|||||||
|
|
0 |
|
1 |
|
|
|
стоимости класса всех возможных туров. То есть минимальный тур в данной задаче не может стоить меньше, чем 30.

Алгоритм Литтла (пример. Шаг 2)
Назовем оценкой нуля в позиции (i, j) в матрице сумму минимальных элементов в i-й строке и j-м столбце (не считая сам этот ноль).
Оценим каждый ноль в приведенной матрице:
|
1 |
2 |
1 |
∞ |
0 |
|
|
(2+ |
|
|
8) |
2 |
0 |
∞ |
(3+ |
|
|
|
7) |
|
3 |
7 |
8 |
4 14 9
5 14 16
6 9
10
3 4 5 6
2 13 13 4
3 8 14 5
∞ |
9 |
9 |
0 |
|
|
|
(3+ |
|
|
|
7) |
5 |
∞ |
0 |
7 |
|
|
(5+ |
|
|
|
7) |
|
5 |
0 |
∞ |
3 |
|
(3+ |
|
|
|
8) |
max=12 |
|
0 |
11 |
7 |
∞ |
(2+ |
|
|
|

Алгоритм Литтла (пример. Шаг 2)
Оценка k нуля, в позиции (i, j) означает буквально следующее: если в тур не будет включен путь из i в j (стоимостью 0), то придется доплатить как минимум k. Поэтому, можно разделить класс всех возможных туров на два: туры, содержащие ребро (i, j) и туры, не содержащие его. Для последних минимальная оценка увеличится на k.

Алгоритм Литтла (пример. Шаг 3)
|
1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
1 |
∞ |
|
0 |
|
2 |
|
1 |
|
1 |
|
4 |
|
|
|
|
|
|
|
3 |
|
3 |
|
|
2 |
0 |
|
∞ |
|
3 |
|
8 |
|
1 |
|
5 |
|
|
|
|
|
|
|
|
|
4 |
|
|
3 |
7 |
|
8 |
|
∞ |
|
9 |
|
9 |
|
0 |
4 |
1 |
|
9 |
|
5 |
|
∞ |
|
0 |
|
7 |
|
4 |
|
|
|
|
|
|
|
|
|
|
5 |
1 |
|
1 |
|
|
|
0 |
|
∞ |
|
3 |
|
4 |
1 |
6 |
2 |
|
3 |
|
4 |
|
6 |
|
6 1 9 |
∞ |
1 |
0 |
0 |
2 |
1 |
1 |
7 |
4 |
∞ |
|
|
|
|
|
|
|
|
|
3 |
|
|
|
|
2 |
0 |
|
∞ |
|
3 |
|
8 |
|
5 |
|
|
3 |
7 |
|
8 |
|
∞ |
|
9 |
|
0 |
|
|
5 |
1 |
|
1 |
|
5 |
|
∞ |
|
3 |
|
|
|
4 |
|
6 |
|
|
|
|
|
|
|
Рассмотрим ребро, соответствующее нулю с максимальной оценкой. В данном случае это ребро (4, 5). Нижняя оценка стоимости класса туров, не содержащих (4,5) увеличивается до 30+12=42.
Чтобы определить оценку для класса туров, содержащих дугу (4,5),
удалим из матрицы строку 4 и столбец 5. Элемент d54
заменим , чтобы не было замкнутого контура.