Задача коммивояжера
| Категория реферата: Рефераты по математике
| Теги реферата: понятие культуры, отчет о прохождении практики
| Добавил(а) на сайт: Жигалов.
Предыдущая страница реферата | 1 2 3 4 5 6 7 | Следующая страница реферата
Вначале обсудим свойство спрямления. Рассмотрим какую-нибудь цепь, например, на рис.5. Если справедливо неравенство треугольника, то d[1,3](d[1,2]+d[2,3] и d[3,5](d[3,4]+d[4,5]
Сложив эти два неравенства, получим d[1,3]+d[3,5](d[1,2]+d[2,3]+d[3,4]+d[4,5]. По неравенству треугольника получим. d[1,5](d[1,3]+d[3,5]. Окончательно d[1,5]( d[1,2]+d[2,3]+d[3,4]+d[4,5]
Итак, если справедливо неравенство треугольника, то для каждой цепи верно, что расстояние от начала до конца цепи меньше (или равно) суммарной длины всех ребер цепи. Это обобщение расхожего убеждения, что прямая короче кривой.
Вернемся к ЗК и опишем решающий ее деревянный алгоритм.
1. Построим на входной сети ЗК кратчайшее остовное дерево и удвоим все его ребра. Получим граф G – связный и с вершинами, имеющими только четные степени.
2. Построим эйлеров цикл G, начиная с вершины 1, цикл задается перечнем вершин.
3. Просмотрим перечень вершин, начиная с 1, и будем зачеркивать каждую вершину, которая повторяет уже встреченную в последовательности.
Останется тур, который и является результатом алгоритма.
Пример 1. Дана полная сеть, показанная на рис.5. Найти тур жадным и
деревянным алгоритмами.
|- |1 |2 |3 |4 |5 |6 |
|1 |- |6 |4 |8 |7 |14|
|2 |6 |- |7 |11|7 |10|
|3 |4 |7 |- |4 |3 |10|
Решение. Жадный алгоритм (иди в ближайший город из города 1) дает тур
1–(4)–3-(3)–5(5)–4–(11)–6–(10)–2–(6)–1, где без скобок показаны номера
вершин, а в скобках – длины ребер. Длина тура равна 39, тур показана на
рис. 5.
2. Деревянный алгоритм вначале строит остовное дерево, показанное на рис. 6 штриховой линией, затем эйлеров цикл 1-2-1-3-4-3-5-6-5-3-1, затем тур 1-2-3-4-5-6-1 длиной 43, который показан сплошной линией на рис. 6.
Теорема. Погрешность деревянного алгоритма равна 1.
Доказательство. Возьмем минимальный тур длины fB и удалим из него
максимальное ребро. Длина получившейся гамильтоновой цепи LHC меньше fB. Но
эту же цепь можно рассматривать как остовное дерево, т. к. эта цепь
достигает все вершины и не имеет циклов. Длина кратчайшего остовного дерева
LMT меньше или равна LHC. Имеем цепочку неравенств
|fB>LHC(LMT |(6)|
Но удвоенное дерево – оно же эйлеров граф – мы свели к туру
посредством спрямлений, следовательно, длина полученного по алгоритму тура
удовлетворяет неравенству
|2LMT>fA |(7)|
Умножая (6) на два и соединяя с (7), получаем цепочку неравенств
|2fB>2LHC(2LMT(fA |(8)|
Т.е. 2fB>fA, т.е. fA/fB>1+(; (=1.
Теорема доказана.
Таким образом, мы доказали, что деревянный алгоритм ошибается менее, чем в два раза. Такие алгоритмы уже называют приблизительными, а не просто эвристическими.
Известно еще несколько простых алгоритмов, гарантирующих в худшем
случае (=1. Для того, чтобы найти среди них алгоритм поточнее, зайдем с
другого конца и для начала опишем «brute-force enumeration» - «перебор
животной силой», как его называют в англоязычной литературе. Понятно, что
полный перебор практически применим только в задачах малого размера.
Напомним, что ЗК с n городами требует при полном переборе рассмотрения (n-
1)!/2 туров в симметричной задаче и (n-1)! Туров в несимметричной, а
факториал, как показано в следующей таблице, растет удручающе быстро:
|1 |- |0 |0 |3 |3 |6 |
|2 |0 |- |1 |4 |1 |0 |
|3 |1 |2 |- |0 |0 |3 |
|табл. 4 |
Изложим алгоритм Литтла на примере 1 предыдущего раздела.. Повторно
запишем матрицу:
|-|1 |2 |3 |4 |5|6 |
|1|- |6 |4 |8 |7|14|
Нам будет удобнее трактовать Сij как стоимость проезда из города i в
город j. Допустим, что добрый мэр города j издал указ выплачивать каждому
въехавшему в город коммивояжеру 5 долларов. Это означает, что любой тур
подешевеет на 5 долларов, поскольку в любом туре нужно въехать в город j.
Но поскольку все туры равномерно подешевели, то прежний минимальный тур
будет и теперь стоить меньше всех. Добрый же поступок мэра можно
представить как уменьшение всех чисел j-го столбца матрицы С на 5. Если бы
мэр хотел спровадить коммивояжеров из j-го города и установил награду за
выезд в размере 10 долларов, это можно было бы выразить вычитанием 10 из
всех элементов j-й той строки. Это снова бы изменило стоимость каждого
тура, но минимальный тур остался бы минимальным. Итак, доказана следующая
лемма.
Вычитая любую константу из всех элементов любой строки или столбца матрицы С, мы оставляем минимальный тур минимальным.
Для алгоритма нам будет удобно получить побольше нулей в матрице С, не получая там, однако, отрицательных чисел. Для этого мы вычтем из каждой строки ее минимальный элемент (это называется приведением по строкам, см. табл. 3), а затем вычтем из каждого столбца матрицы, приведенной по строкам, его минимальный элемент, получив матрицу, приведенную по столбцам, см. табл. 4).
Прочерки по диагонали означают, что из города i в город i ходить нельзя. Заметим, что сумма констант приведения по строкам равна 27, сумма по столбцам 7, сумма сумм равна 34.
Тур можно задать системой из шести подчеркнутых (выделенных другим
цветом) элементов матрицы С, например, такой, как показано на табл. 2.
Подчеркивание элемента означает, что в туре из i-го элемента идут
именно в j-тый. Для тура из шести городов подчеркнутых элементов должно
быть шесть, так как в туре из шести городов есть шесть ребер. Каждый
столбец должен содержать ровно один подчеркнутый элемент (в каждый город
коммивояжер въехал один раз), в каждой строке должен быть ровно один
подчеркнутый элемент (из каждого города коммивояжер выехал один раз); кроме
того, подчеркнутые элементы должны описывать один тур, а не несколько
меньших циклов. Сумма чисел подчеркнутых элементов есть стоимость тура. На
табл. 2 стоимость равна 36, это тот минимальный тур, который получен
лексикографическим перебором.
Теперь будем рассуждать от приведенной матрицы на табл. 2. Если в ней удастся построить правильную систему подчеркнутых элементов, т.е. систему, удовлетворяющую трем вышеописанным требованиям, и этими подчеркнутыми элементами будут только нули, то ясно, что для этой матрицы мы получим минимальный тур. Но он же будет минимальным и для исходной матрицы С, только для того, чтобы получить правильную стоимость тура, нужно будет обратно прибавить все константы приведения, и стоимость тура изменится с 0 до 34. Таким образом, минимальный тур не может быть меньше 34. Мы получили оценку снизу для всех туров.
Рекомендуем скачать другие рефераты по теме: конспекты по литературе, шпаргалки бесплатно.
Категории:
Предыдущая страница реферата | 1 2 3 4 5 6 7 | Следующая страница реферата