ОК, это больше последующий вопрос: How to compute optimal paths for traveling salesman bitonic tour?Как реализовать это уравнение в Java?
Прежде всего, для 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
Это может показаться глупый вопрос (и, вероятно, это, я сильно не хватает сна), но я надеюсь, кто-то может помочь.
+1 для вытягивания DIST расчет вне цикла. компилятор Java не сможет сделать это сам по себе, если он не сможет доказать, что функция dist не может измениться. Поскольку dist предположительно ищет расстояние в массиве (который является изменяемым), я не думаю, что любой текущий компилятор сможет это доказать. – mikera