Алгоритм Дійскри застосований до проблеми продавця подорожей


13

Я новачок (загальна новачка в теорії складності обчислювальної техніки) і у мене є питання.

Скажімо, у нас є "Проблема продавця подорожей", чи вирішить її наступне застосування алгоритмів Дейкстри?

З початкової точки ми обчислюємо найменшу відстань між двома точками. Переходимо до справи. Видаляємо вихідну точку. Тоді ми обчислюємо наступну найкоротшу точку відстані від поточної точки і так далі ...

З кожним кроком ми робимо графік меншим, коли рухаємо наступну найкоротшу точку відстані. Поки ми не відвідаємо всі пункти.

Чи вирішить це проблему мандрівного продавця.


3
Зауважимо, що TSP не є повним NP, а алгоритм Дейкстри має поліноміальне виконання. Що ви пропонуєте, було б наступним тривіальним рішенням P = NP? питання, тому навряд чи ваш підхід працює. Цей вид міркувань є лише евристичним, розум!
Рафаель

Відповіді:


24

Алгоритм Дейкстри повертає дерево найкоротшого шляху, що містить найкоротший шлях від стартової вершини до іншої вершини, але не обов'язково найкоротший шлях між іншими вершинами або найкоротший маршрут, який відвідує всі вершини.

Ось приклад лічильника, коли жадний алгоритм, який ви описуєте, не працюватиме:

зустрічний приклад

a[a,b,c,d,a]a[a,b,d,c,a]a,b,c,dd,a


8

Як уже з'ясувалося в інших відповідях, ваша пропозиція не ефективно вирішує проблему продавця подорожей, дозвольте мені вказати найкращий спосіб, відомий у галузі евристичного пошуку (оскільки я бачу алгоритм Діккстри, що дещо пов'язаний з цією сферою Штучного інтелекту) .

(u,v)(v,u)

Найкращий підхід (який я знаю) полягає у застосуванні евристичного алгоритму пошуку глибинних перших відгалужень і зв'язків , де евристика - це вартість мінімального обертового дерева (MST). Оскільки MST можна обчислити в поліномійному часі або алгоритмом Прима, або алгоритмом Крускала , тоді можна очікувати повернення рішень у розумний проміжок часу. Щоб чудово обговорити ці два алгоритми, я настійно пропоную вам ознайомитись з Посібником з розробки алгоритмів

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

Сподіваюся, це допомагає,


2

Я не маю уявлення, як хтось тут не помітив, що застосування алгоритму Дейкстри в цьому випадку буде абсолютно непотрібним? Ви могли реалізувати цей жадібний алгоритм, просто вибравши найближчий вузол, який відомий apriori. Алгоритм Dijkstra використовується для виявлення шляхів, але ви робите лише один крок кожен раз. Це, очевидно, не знаходить оптимального рішення для TSP, але багато дуже хороших підходів теж не знаходять його. Всі оптимальні пошукові рішення для TSP дуже обчислювальні.


1

Відповідь - ні, це не гарний спосіб вирішення проблеми TSP. Хорошим прикладом зустрічного лічильника є те, де всі точки розташовані на лінії, як-от у наступному:

--5 ------------------ 3 ----- 1--0 --- 2 ---------- 4

використовуючи алгоритм Dijsktra, змушує поганого продавця, починаючи з точки 0, спершу перейти до 1, потім до 2, а потім до 3 ект. що не є оптимальним.

Сподіваюся, що це допомагає. Погляньте на першу главу чудової книги Стівена С. Скіени під назвою "Дизайн алгоритму", і пояснюється цей приклад більш докладно.

Проблема TSP полягає не в тому, щоб знайти найкоротший шлях між двома точками, а прокласти маршрут між усіма точками, які є оптимальними. Коли у вас є оптимальний маршрут, ви можете скористатися Dijsktra, щоб знайти найкоротший шлях між кожною точкою маршруту.


2
Dijkstra - це єдиний алгоритм найкоротшого шляху, але він не "змушує" продавця починати з 0, а також не повертати маршрут. Він просто повертає найкоротший дерево шляху, що містить найкоротший шлях до кожної вершини із заданої вершини джерела.
Джо

Традиційно проблемою TSP [ en.wikipedia.org/wiki/… ] є "З огляду на перелік міст та їх парні відстані, завдання полягає в тому, щоб знайти найкоротший можливий маршрут, який відвідує кожне місто рівно один раз і повертається в місто-вихід. " Технічно неможливо задовольнити ці вимоги на шляху - ви або не повинні повертатися до початкового міста, або повторювати міста.
Джо

Однак на шляху, якщо ми послабимо будь-яке з цих обмежень, то проблема є тривіальною.
Джо

Звичайно, Dijkstra не змусив би продавця стартувати на 0. Але алгоритм, запропонований в оригінальному запитанні, не визначав вершину початку; тому запропонований алгоритм може змусити бідного продавця починати з 0. Отже, ця відповідь правильна.
JeffE
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.