OK,這更是一個後續問題:How to compute optimal paths for traveling salesman bitonic tour?如何在Java中實現這個公式?
首先,針對旅行商問題的雙調之旅,我有以下遞推關係:
(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)
和,我將如何在Java中實現C部分?我最初的想法是,我重複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 2012-03-05 01:29:14