Я пытаюсь вычислить время работы алгоритма Дейкстры. Все источники, которые я прочитал, говорят, что время выполнения составляет O (E * log (E)) для ленивой реализации.
Но когда мы делаем математику, мы получаем O (E * (Log (E) + E * Log (E))).
Поскольку E не является константой, я не понимаю, как кто-то может уменьшить это до O (E * log (E).
Мы неправильно анализируем или возможно уменьшить?
while (!minPQ.isEmpty()) { <=== O(E)
Node min = minPQ.poll(); <=== O(log(e)
for (Edge edge : graph.adj(min)) { <=== O(E)
if (min.getId() == target.getId()) {
// Source and Target = Same edge
if (edgeTo.size() == 0) edgeTo.put(target, edge);
return;
}
relax(edge, min, vehicle); <=== log(e) (because of add method on PQ)
}
}