ОБНОВЛЕНО
После большего чтения решение может быть дано со следующим рекуррентным соотношением:
(a) When i = 1 and j = 2, l(i; j) = dist(pi; pj )
(b) When i < j - 1; l(i; j) = l(i; j - 1) + dist(pj-1; pj)
(c) When i = j - 1 and j > 2, min 1<=k<i (l(k; i) + dist(pk; pj ))
Теперь это начинает иметь смысл, за исключением части C. Как я могу определить минимальное значение k? Я полагаю, это означает, что вы можете перебирать все возможные значения k и просто хранить минимальный результат (l (k, i) + dist (pk, pj)?
Да, определенно проблема, которую я учил в школе. Мы изучаем битонные туры для проблемы коммивояжера.
В любом случае, скажем, у меня есть 5 вершин {0,1,2,3,4}. Я знаю, что мой первый шаг - сортировать их по порядку увеличения x-координат. Оттуда я немного смущен тем, как это будет сделано при динамическом программировании.
Я читаю, что я должен проверять список отсортированных узлов и поддерживать оптимальные пути для обеих частей (начальный путь и путь возврата). Я смущен тем, как я буду рассчитывать эти оптимальные пути. Например, как я узнаю, должен ли я включать данный node в исходный путь или путь возврата, поскольку он не может быть в обоих (кроме конечных точек). Возвращаясь к Фибоначчи в динамическом программировании, вы в основном начинаете свой базовый случай и прокладываете себе путь вперед. Я предполагаю, что я спрашиваю, как я начну с проблемы с битоническим коммивояжером?
Для чего-то вроде чисел Фибоначчи, приближенное динамическое программирование совершенно ясно. Тем не менее, я не знаю, насколько я просто плотный или что, но я довольно запутан, пытаясь обернуть голову этой проблемой.
Спасибо, что посмотрели!
ПРИМЕЧАНИЕ. Я не ищу полные решения, но, по крайней мере, некоторые полезные советы, чтобы начать работу. Например, если бы это была проблема Фибоначчи, можно было бы проиллюстрировать, как вычисляются первые несколько чисел. Пожалуйста, дайте мне знать, как я могу улучшить этот вопрос.