Jump to content

Алгоритм Хелда – Карпа

(Перенаправлено из алгоритма Хелда-Карпа )

Алгоритм Хелда-Карпа , также называемый алгоритмом Беллмана-Хелда-Карпа , представляет собой алгоритм динамического программирования, предложенный в 1962 году независимо Беллманом. [1] и Хелд и Карп [2] решить задачу коммивояжера (TSP), в которой входными данными является матрица расстояний между набором городов, а цель — найти тур минимальной длины, который посещает каждый город ровно один раз, прежде чем вернуться в исходную точку. Он находит точное решение этой проблемы и нескольких связанных с ней проблем, включая проблему гамильтонова цикла , за экспоненциальное время .

Описание алгоритма и мотивация

[ редактировать ]

Пронумеровать города , с обозначен произвольно как «стартовый» город (поскольку решением TSP является гамильтонов цикл, выбор стартового города не имеет значения). Алгоритм Хелда – Карпа начинается с расчета для каждого набора городов и каждый город не содержится в , кратчайший путь в одну сторону из к который проходит через каждый город в в каком-то порядке (но не через другие города). Обозначим это расстояние , и напиши на длину прямого края от к . Мы рассчитаем значения начиная с самых маленьких наборов и заканчивая самым большим.

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

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

В более общем плане, предположим представляет собой набор города. Для каждого целого числа , писать для набора, созданного путем удаления от . Тогда если кратчайший путь из через к имеет как предпоследний город, то удаление последнего ребра этого пути должно дать кратчайший путь из к через . Это означает, что существуют только возможные кратчайшие пути из к через , по одному на каждый предпоследний город с длиной , и .

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

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

Алгоритмическая сложность

[ редактировать ]

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

Вычисление одного значения для -подмножество элементов из требуется найти кратчайший из возможные пути, каждый из которых находится путем добавления известного значения и длина ребра исходного графа; то есть требуется время, пропорциональное . Есть -элементные подмножества ; и каждое подмножество дает возможные значения . Вычисление всех значений где поэтому требуется время , за общее время для всех размеров подмножества . Второй этап алгоритма, нахождение полного цикла из кандидатов, занимает время и не влияет на асимптотические характеристики.

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

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

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

Псевдокод

[ редактировать ]

Источник: [3]

function algorithm TSP (G, n) is
    for k := 2 to n do
        g({k}, k) := d(1, k)
    end for

    for s := 2 to n−1 do
        for all S ⊆ {2, ..., n}, |S| = s do
            for all k ∈ S do
                g(S, k) := minm≠k,m∈S [g(S\{k}, m) + d(m, k)]
            end for
        end for
    end for

    opt := mink≠1 [g({2, 3, ..., n}, k) + d(k, 1)]
    return (opt)
end function
[ редактировать ]

Точные алгоритмы решения ЗК.

[ редактировать ]

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

Термин «ветвь и граница» впервые был использован в 1963 году в статье, опубликованной Little et al. о TSP, описывающем метод объединения меньших пространств поиска и установления нижних границ для расширения практического диапазона применения точного решения. Этот метод полезен для увеличения количества городов, которые можно учитывать с помощью вычислений, но все же не работает в крупномасштабных наборах данных.

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

Приближенные алгоритмы решения ЗК

[ редактировать ]

Поскольку применение точного алгоритма для решения проблемы очень ограничено, мы часто используем приблизительный алгоритм или эвристический алгоритм. Результат работы алгоритма можно оценить по C/C* ≤ ε. C — общее расстояние путешествия, полученное с помощью приближенного алгоритма; C* – оптимальное расстояние путешествия; ε — верхний предел отношения общего расстояния приближенного решения к оптимальному решению в наихудших условиях. Значение ε >1,0. Чем больше оно приближается к 1,0, тем лучше алгоритм. К этим алгоритмам относятся: алгоритм интерполяции, алгоритм ближайшего соседа , алгоритм Кларка и Райта, алгоритм двойного остовного дерева, алгоритм Кристофидеса , гибридный алгоритм, вероятностный алгоритм (например, имитация отжига ).

  1. ^ «Динамическое программирование задачи коммивояжера», Ричард Беллман, Journal of Assoc. Вычисление Маха. 9. 1962.
  2. ^ «Подход динамического программирования к задачам последовательности», Майкл Хелд и Ричард М. Карп, Журнал Общества промышленной и прикладной математики 1:10. 1962 год
  3. ^ «Динамическое программирование» (PDF) . Январь 2020 г. Архивировано из оригинала (PDF) 8 февраля 2015 г.
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 2972975bc2af963a86ee5ee8df01f956__1718217000
URL1:https://arc.ask3.ru/arc/aa/29/56/2972975bc2af963a86ee5ee8df01f956.html
Заголовок, (Title) документа по адресу, URL1:
Held–Karp algorithm - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)