作者rnbjacky (浪漫A大調)
看板Grad-ProbAsk
標題Re: [理工] [軟設]-中正資工考古\
時間Tue Mar 8 01:34:39 2011
6.(T/F)The worst case time complexity of Dijstra's shortest path algorithm
is O(n^3)
我猜 false
講義上只有寫
Dijkstra's Algo Time Complexity 是 O(n^2)
所以我也不清楚
worst case下 time complexity 長怎樣@@"
以Cormen書上的pseudo code來說(一般來說也是)
Dijkstra's algo可以分成兩個部分:
1.初始化各點資訊( 含最短距離及老爸 )
=> "Build" 一個資料結構
2.While loop 含以下兩個動作 :
(1)取出d值最小的點(i.e.取最近的點)
=>"ExtractMin" (|V|次)
(2)Relax (i.e.改變最短距離的值)
=>"DecreasingKey" (至多|E|次)
以Array實作(i.e.Adjacency matrix):
1.Build : O(V)
2.ExtractMin : O(V) (需Search整個list) 需|V|次
3.DecreasingKey : O(1) 至多需|E|次
TOTAL: O(V) + O(V˙V) + O(E˙1)
=O(V^2)
以Adjacency List搭配BinaryHeap實作 :
1.Build : O(V)
2.ExtractMin : O(logV) 需|V|次
3.DecreasingKey : O(logV) 至多需|E|次
TOTAL: O(V) + O(VlogV) + O(ElogV)
=O(VlogV + ElogV)
( 若要背的話, 背這個 , 不要背O(ElogV)簡化過的 )
以Adjacency List搭配FibonacciHeap實作 :
1.Build : O(V)
2.ExtractMin : O(logV) 需|V|次
3.DecreasingKey : O(1) (這個時間非常漂亮!) 至多需|E|次
TOTAL: O(V) + O(VlogV) + O(E˙1)
=O(VlogV + E) (100交大考這個!)
觀察可以發現建立資料結構 (i.e.初始化) 所需時間皆是由頂點數決定
但最後會被WHILE LOOP內的時間dominate
而不同的實作方式 可以得到不一樣的時間分析
中正這題要考的應該是array的分析 (因為只有出現n)
不然就三種方式都成立了 畢竟O(n^3) 不是這麼tightly
後兩者是很重要的分析(而且很美啊!)
如果可以就記一下吧!
希望有幫上您的忙!!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 221.120.64.23
推 wadekobe324:謝謝講解~~~ 03/08 01:48
※ 編輯: rnbjacky 來自: 221.120.64.23 (03/08 01:55)
推 privatewind:交大的資結一向是背多分 0.0+ 不然就考生天生神力, 03/08 07:45
→ privatewind:當場推出來 03/08 07:45
→ rnbjacky:第三個當場推的出來我就要跪了...= = 03/08 10:28
→ privatewind:要全推 很難啦 有一些基礎去推 還ok 當然了,你要有 03/08 10:30
→ privatewind:過人的勇氣跟他賭 你推的是否正確 03/08 10:30