OK, ce qui est plus d'une question de suivi: How to compute optimal paths for traveling salesman bitonic tour?Comment puis-je implémenter cette équation en Java?
Tout d'abord, pour la tournée Bitonic du problème du voyageur de commerce J'ai la relation de récurrence suivante:
(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
est une table des résultats précédents. Ma question est avec la partie C: En supposant que l(k,i)
et dist(pk,pj)
sont définis, comment pourrais-je implémenter la partie C en Java? Ma pensée initiale était que je crois sur k
de 1
à i
et de stocker le résultat minimum de (l(k,i) + dist(pk,pj))
, mais je ne pense pas que ce soit juste.
par exemple:
for (int k = 1; k < i; ++k) {
tmp = l(k,i) + dist(pk,pj);
if (tmp < min) {
min = tmp;
}
}
// min is the result
Cela peut sembler une question stupide (et est probablement, je suis sérieusement le sommeil manquais), mais j'espère que quelqu'un peut aider.
+1 pour tirer le calcul dist en dehors de la boucle. le compilateur Java ne sera pas en mesure de le faire pour lui-même, sauf s'il peut prouver que la fonction dist ne peut pas changer. Puisque dist cherche probablement une distance dans un tableau (qui est mutable), je ne pense pas qu'un compilateur actuel puisse le prouver. – mikera