418
 правок
Изменения
Нет описания правки
Псевдокод:
  procedure CalcKey(s)  {    return [min(g(s); rhs(s)) + h(s;sgoals_{goal});min(g(s); rhs(s))];  }
  procedure Main()  {    Initialize();    while (s_start != s_goal)    {      ComputeShortestPath();      Wait for changes in edge costs;      for all directed edges (u;v) with changed edge costs      {        Update the edge cost c(u;v);        UpdateVertex(v);      }    }  } Таким образом мы описали алгоритм LPA*. Он неоднократно определяет путь между вершинами <tex>s_start</tex> и <tex>s_goal</tex>, используя при этом данные из предыдущих итераций. Очевидно, что в худшем случае (а именно когда все ребра вокруг текущей вершины изменили свой вес) алгоритм будет работать как последовательные вызовы алгоритма А* за O(n^2*log(n)). Улучшим эту оценку с помощью алгоритма D* lite.'''Примечание''': на практике же такой подход тоже имеет место на плотных графах (или матрицах), так как в среднем дает оценку О(n*log(n)).
