MST: Kompleksitas algoritma Prim, mengapa tidak ?


8

Menurut CLRS, algoritma Prim diimplementasikan seperti di bawah ini -

MST-PRIM(G,w,r)

  • untuk setiap lakukanu∈V[G]
    • key[u]←∞
    • π[u]←NIL
  • key[r]←0
  • Q←V[G]
  • sementara lakukan // ...Q≠∅O(V)
    • u ← EXTRACT-MIN(u) // ...O(lg⁡V)
      • untuk setiap do // ...v∈adj[u]O(E)
        • jika danv∈Qw(u,v)>key[v]
          • laluπ[v]←kamu
            • kunci←w(kamu,v) // ...PENURUNAN-KUNCIHAI(lg⁡V)

Buku itu mengatakan kompleksitas totalnya adalah . Namun, apa yang saya pahami adalah bahwa loop dalam dengan operasi akan dikenakan biaya , dan loop luar mencakup baik loop dan dalam , sehingga kompleksitas total harus .HAI(Vlg⁡V+Elg⁡V)≈HAI(Elg⁡V)forDECREASE-KEYHAI(Elg⁡V)whileEXTRACT-MINforHAI(V(lg⁡V+Elg⁡V))=HAI(Vlg⁡V+EVlg⁡V)≈HAI(EVlg⁡V)

Mengapa analisis kompleksitas tidak dilakukan seperti itu? dan Apa yang salah dengan formulasi saya?

Jawaban:


9

Kompleksitas diturunkan sebagai berikut. Fase inisialisasi menghabiskan . The loop dieksekusiwaktu. The lingkaran bersarang dalam loop dieksekusi kali. Akhirnya, lemma handshaking menyiratkan bahwa ada implisit DECREASE-KEY. Karenanya, kerumitannya adalah: .HAI(V)while|V|fHairwhsayaledegree(kamu)Θ(E)Θ(V)∗TEXTRSEBUAHCT-M.sayaN+Θ(E)∗TDECRESEBUAHSE-KEY

Kompleksitas aktual tergantung pada struktur data yang sebenarnya digunakan dalam algoritma. Menggunakan array, , kompleksitas adalah dalam kasus terburuk.TEXTRSEBUAHCT-M.sayaN=HAI(V),TDECRESEBUAHSE-KEY=HAI(1)HAI(V2)

Menggunakan tumpukan biner, , kompleksitasnya adalah dalam kasus terburuk. Inilah sebabnya: karena grafik terhubung, maka , dan paling banyak (kasus terburuk, untuk grafik padat). Mungkin, Anda melewatkan poin ini.TEXTRSEBUAHCT-M.sayaN=HAI(catatan⁡V),TDECRESEBUAHSE-KEY=HAI(catatan⁡V)HAI(Ecatatan⁡V)|E|≥|V|-1EV2

Menggunakan Fibonacci Heap, diamortisasi, diamortisasi, kompleksitasnya adalah dalam kasus terburuk.TEXTRSEBUAHCT-M.sayaN=HAI(catatan⁡V)TDECRESEBUAHSE-KEY=HAI(1)HAI(E+Vcatatan⁡V)


1

Ide Anda sepertinya benar. Mari kita ambil kompleksitas sebagai . Kemudian perhatikan bahwa di bagian dalam untuk loop, kita benar-benar melewati semua simpul, dan bukan tepi, jadi mari kita modifikasi sedikit ke , yang berarti . Tetapi untuk analisis kasus terburuk (grafik padat), kira-kira sama dengan jumlah sisi, , memberikan tetapi karena , maka .V(lg⁡v+Elg⁡v)V(lg⁡v+Vlg⁡v)Vlg⁡v+V2lg⁡vV2EVlg⁡v+Elg⁡v=(V+E)lg⁡vV≪EElg⁡v


Apa v? Kesalahan ketik untukV?
— David Richerby

Sebenarnya, saya tidak mengerti ini sama sekali. Apa artinya mengatakan "Mari kita ambil kompleksitas sebagai [ekspresi 1]" dan kemudian "modifikasi sedikit ke [ekspresi 2]"? Anda tidak bisa hanya menganggap waktu berjalan adalah satu hal dan kemudian mengubahnya ke hal lain.
— David Richerby
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.