MST: Kompleksitas algoritma Prim, mengapa tidak ?


8

Menurut CLRS, algoritma Prim diimplementasikan seperti di bawah ini -

MST-PRIM(G,w,r)

  • untuk setiap lakukanuV[G]
    • key[u]
    • π[u]NIL
  • key[r]0
  • QV[G]
  • sementara lakukan // ...QO(V)
    • u EXTRACT-MIN(u) // ...O(lgV)
      • untuk setiap do // ...vadj[u]O(E)
        • jika danvQw(u,v)>key[v]
          • laluπ[v]kamu
            • kunciw(kamu,v) // ...PENURUNAN-KUNCIHAI(lgV)

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(VlgV+ElgV)HAI(ElgV)forDECREASE-KEYHAI(ElgV)whileEXTRACT-MINforHAI(V(lgV+ElgV))=HAI(VlgV+EVlgV)HAI(EVlgV)

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(catatanV),TDECRESEBUAHSE-KEY=HAI(catatanV)HAI(EcatatanV)|E||V|-1EV2

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


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(lgv+Elgv)V(lgv+Vlgv)Vlgv+V2lgvV2EVlgv+Elgv=(V+E)lgvVEElgv


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.