Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
04_Пояснювальна записка ДР_зразок вимоги.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
472.58 Кб
Скачать

1.3 Методи рішення задачі комівояжера

1.3.1. Жадібний алгоритм

Жадібний алгоритм - алгоритм знаходження найкоротшого відстані шляхом вибору найкоротшого, ще не обраного ребра, за умови, що воно не утворює циклу з вже обраними ребрами. «Жадібним» цей алгоритм названий тому, що на останніх кроках доводиться жорстоко розплачуватися за жадібність.

П одивимося, як поведеться при вирішенні ЗК жадібний алгоритм. Тут він перетвориться на стратегію «йди у найближчий (у який ще не входив) місто». Жадібний алгоритм, очевидно, безсилий у цьому завданні. Розглянемо для прикладу мережу на рис. 2, що представляє вузький ромб. Нехай комівояжер стартує з міста 1. Алгоритм «йди ви найближчий місто» виведе його в місто 2, потім 3, потім 4; на останньому кроці доведеться платити за жадібність, повертаючись по довгій діагоналі ромба. В результаті вийде не найкоротший, а довжелезний тур.

На користь процедури «йди у найближчий» можна сказати лише те, що при старті з одного міста вона не поступиться стратегії «йди в подальший».

Як бачимо, жадібний алгоритм помиляється. Чи можна довести, що він помиляється помірковано, що отриманий ним тур гірше мінімального, покладемо, в 1000 разів? Ми доведемо, що цього довести не можна, причому не тільки для жодного логарифма, а для алгоритмів набагато потужніших. Але спочатку потрібно домовитися, як оцінювати похибка неточних алгоритмів, для визначеності, в задачі мінімізації. Нехай fB - справжній мінімум, а fA - той квазімінімум, який отримано за алгоритмом. Ясно, що fA / fB≥1, але це - тривіальне твердження, що може бути похибка. Щоб оцінити її, потрібно затиснути ставлення оцінкою зверху:

fA / fB ≥1 + nε, (5)

де, як зазвичай у вищій математиці, ε≥0, але, проти звичаю, може бути дуже великим. Величина ε і буде служити мірою похибки. Якщо алгоритм мінімізації буде задовольняти нерівності (5), ми будемо говорити, що він має похибку ε.

Припустимо тепер, що є алгоритм А рішення ЗК, похибка якого потрібно оцінити. Візьмемо довільний граф G (V, E) і по ньому складемо вхідну матрицю ЗК:

С [i, j] = {1, якщо ребро (i, j) належить Е

1 + nε в іншому випадку

Якщо в графі G є гамільтонів цикл, то мінімальний тур проходить по цьому циклу і fB = n. Якщо алгоритм А теж завжди знаходитиме цей шлях, то за результатами алгоритму можна судити, чи є гамільтонів цикл в довільному графі. Однак, непереборного алгоритму, який міг би відповісти, чи є гамільтонів цикл в довільному графі, досі нікому не відомо. Таким чином, наш алгоритм А повинен іноді помилятися і включати в тур хоча б одне ребро довжини 1 + nε. Але тоді fA (n-1) + (1 + nε) так що fA / fB = 1 + nε тобто перевершує похибка ε на задану нерівністю (5). Про величину ε в нашому міркуванні ми не домовлялися, так що ε може бути безпідставно великий.

Таким чином доведена наступна теорема.

Або алгоритм А визначає, чи існує в довільному графі гамільтонів цикл, або похибка А при вирішенні ЗК може бути безпідставно велика.

Це міркування було вперше опубліковано Сани і Гонзалесом в 1980 р Теорема Сани-Гонзалеса заснована на тому, що немає ніяких обмежень на довжину ребер. Теорема не проходить, якщо відстані підпорядковуються нерівності трикутника (4).

Якщо воно дотримується, можна запропонувати кілька алгоритмів з похибкою 12. Перш, ніж описати такий алгоритм, слід згадати старовинну головоломку. Чи можна накреслити однією лінією відкритий конверт? Рис.2 показує, що можна (цифри на відрізках показують порядок їх проведення). Закритий конверт (рис.3.) Однією лінією намалювати не можна і ось чому. Будемо називати лінії ребрами, а їх перехрестя - вершинами.

К оли через точку проводиться лінія, то використовується два ребра - одне для входу в вершину, одне - для виходу. Якщо ступінь вершини непарна - то в ній лінія повинна початися або скінчитися. На рис. 3 вершин непарної ступеня дві: в одній лінія починається, в іншій - кінчається. Однак на рис. 4 є чотири вершини ступеня три, але в однієї лінії не може бути чотири кінця. Якщо ж потрібно прокреслити фігуру однією замкненою лінією, то всі її вершини повинні мати парну ступінь.

Вірно і зворотне твердження: якщо всі вершини мають парну ступінь, то постать можна намалювати однієї незамкненою лінією. Дійсно, процес проведення лінії може скінчитися, тільки якщо лінія прийде в вершину, звідки вже виходу немає: всі ребра, приєднані до цієї вершини (зазвичай кажуть: інцідентние цій вершині), вже прокреслені. Якщо при цьому намальована вся постать, то потрібне твердження доведено; якщо ні, видалимо вже намальовану частина G '. Після цього від графа залишиться одна або кілька зв'язкових компонент; нехай G '- одна з таких компонент. В силу зв'язності вихідного графа G, G 'і G' 'мають хоч одну загальну вершину, скажімо, v. Якщо в G '' видалені якісь ребра, то по парним числом від кожної вершини. Тому G '' - зв'язний і всі його вершини мають парну ступінь. Побудуємо цикл в G '' (можливо, не намалювавши всього G '') і через v додамо промальовувала частина G '' до G '. Збільшуючи таким чином промальовувала частина G ', ми доб'ємося того, що G' охопить весь G.

Це завдання колись вирішив Ейлер, і замкнуту лінію, яка покриває всі ребра графа, тепер називаю ейлеровим циклом. По суті була доведена наступна теорема.

Ейлером цикл в графі існує тоді і тільки тоді, коли (1) граф зв'язний і (2) всі його вершини мають парні ступеня.