Хорошо, это скорее дополнительный вопрос: Как вычислить оптимальные пути для тура коммивояжера Bitonic?
Прежде всего, для битонического тура задачи коммивояжера у меня есть следующее рекуррентное соотношение:
(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 ))
l
— это таблица предыдущих результатов. Мой вопрос касается части C: если l(k,i)
и dist(pk,pj)
определены, как мне реализовать часть C в Java? Моя первоначальная мысль заключалась в том, что я перебираю k
от 1
до i
и сохраняю минимальный результат (l(k,i) + dist(pk,pj))
, но я не думаю, что это правильно.
Например:
for (int k = 1; k < i; ++k) {
tmp = l(k,i) + dist(pk,pj);
if (tmp < min) {
min = tmp;
}
}
// min is the result
Это может показаться глупым вопросом (и, вероятно, так оно и есть, мне очень не хватает сна), но я надеюсь, что кто-то может помочь.