Difference between Dijkstra Algorithm: Priority Queue vs. Runtime Doubly Linked List

What is the difference in complexity of execution between the following and why ?:

(1) DIJKSTRA algorithm using a regular priority queue (heap)

(2) DIJKSTRA algorithm using a doubly linked list

(If there is no difference)

+4
source share
1 answer

The most common version of Dijkstra's algorithm assumes that you have access to some kind of priority queue structure that supports the following operations:

  • make-heap (s, n): n & infin;, node s, 0.
  • dequeue-min(): .
  • reduce-key (obj, key): obj , .

Dijkstra make-heap, O (n) dequeue-min, O (m) , n - , m - . O (T mh + nT deq + mT dk), T mh, T deq, T dk - () make-heap, dequeue .

, . : . .

- O (n): node, n - 1 . dequeue-min - O (1): . - O (n), node, , , , , ( case), . , O (n + n + nm) = O (mn).

O (n), n . dequeue-min O (n), , . O (1), node . , O (n + n 2 + m) = O (n 2 + m) = O (n 2), O (n 2). .

O (n), heapify . - O (log n), - O (log n) ( ). , O (n + n log n + m log n) = O (m log n), , m & ge; .

. , . make- O (n), dequeue-min O (log n) - () O (1) . O (n + n log n + m) = O (m + n log n), , .

, ! . , " " , , .

+1

Source: https://habr.com/ru/post/1619995/


All Articles