2014-10-24 3 views
31

В соответствии с моим пониманием, я вычислил временную сложность алгоритма Дейкстры как обозначение большой O, используя приведенный ниже список смежности. Это не получилось так, как предполагалось, и это заставило меня понять это шаг за шагом.Понимание расчета сложности времени для алгоритма Дейкстры

  1. Каждая вершина может быть подключен к (V-1) вершин, следовательно, число смежных ребер в каждой вершине V - 1. Допустим, Е представляет собой V-1 ребер, соединенных с каждой вершиной.
  2. Поиск & Обновление веса каждой соседней вершины в куче min равно O (log (V)) + O (1) или O(log(V)).
  3. Следовательно, из шагов 1 и 2 выше сложность времени для обновления всех смежных вершин вершины равна E * (logV). или E*logV.
  4. Следовательно, временная сложность для всех V-вершин V * (E * logV) i.e O(VElogV).

Но сложность времени для алгоритма Дейкстры равна O (ElogV). Зачем?

ответ

47

кратчайшее алгоритм пути Дейкстры является O(ElogV) где:

  • V это число вершин
  • E общее число ребер

Ваш анализ правилен, но ваши символы имеют разные значения! Вы говорите, что алгоритм O(VElogV) где:

  • V это число вершин
  • E является максимальным числом ребер, прикрепленных к одному узлу.

Давайте переименуем ваш E в N. Поэтому один анализ говорит O(ElogV), а другой говорит O(VNlogV). Оба правильные и фактически E = O(VN). Разница в том, что ElogV - это более плотная оценка.

+2

спасибо, получил вашу точку, смежныеДеги * totalVertices = totalEdges (E). но вы можете немного рассказать о том, что на самом деле означает более жесткая привязка/оценка. –

+4

@MeenaChaudhary, точнее 'maxAdjacentEdgesOfAVertex * totalVertices> = totalEdges', и именно это дает более жесткую привязку. Более жесткая привязка означает приближение к истине. Например, если алгоритм выполняет операции «n + 10», вы можете сказать, что это «O (n^2)», который является истинным, или «O (nlogn)», который также является истинным. Но это также «O (n)», которая является более жесткой, чем две другие. Наименьшая возможная граница называется 'Θ', поэтому в приведенном выше примере« n + 1 = Θ (n) ». (Определение 'Θ' - это как верхняя, так и нижняя граница) – Shahbaz

+0

@Shahbaz. Чтобы быть понятным, вы имеете в виду' E * log [2] (V) ', (log with base 2) правильно? Что происходит от принятия двоичной кучи, чтобы помочь отслеживать вещи? – SeldomNeedy

Смежные вопросы