Одной из очевидных оптимизаций является предварительное вычисление ваших dist(pk,pj)
значений перед циклом
например
dist_pk_pj = dist(pk,pj);
/* then do as you did before */
for (int k = 1; k < i; ++k) {
tmp = l(k,i) + dist_pk_pj;
if (tmp < min) {
min = tmp;
}
}
Примечание. Я не проводил подобную оптимизацию для l (как в случае предварительного вычисления таблицы l), потому что вы заявили, что это уже была предварительно вычисленная таблица. Если бы не было, я бы выполнил ту же оптимизацию:)
Но, как говорилось в предыдущем комментарии, компилятор Java вполне может выполнить эту оптимизацию для вас. Я не специалист по оптимизации, которую выполняет компилятор Java, поэтому возьмите этот последний комментарий с небольшим количеством соли:)
Наконец, есть ли какие-нибудь специальные свойства, которые есть у таблицы l(k,i)
? Например, некоторая симметрия l(i,k) = l(k,i)
(я просто догадываюсь здесь, потому что я не знаю много о проблеме, поэтому игнорируйте этот комментарий, если он звучит странно). Если есть какие-либо специальные свойства, опубликуйте их, и мы могли бы предложить дальнейшую оптимизацию.