Yaklaşık bir yıl önce, bir arkadaşım ve ben, yoğun grafikler için Kruskal'ın algoritmasını, normal den daha iyi bir şekilde (önceden sıralanmış kenarlar varsaymadan ) uygulamanın bir yolunu düşündük . Özellikle, her durumda, bitişik matrisler kullanılarak uygulandığında Prim'lere benzer şekilde Θ ( n 2 ) elde ederiz .
Blogumda C ++ kodu ve karşılaştırmalar da dahil olmak üzere algoritma hakkında biraz yayın yaptım , ancak genel fikir:
Bağlı her bileşen için bir temsili düğüm bulundurun. Başlangıçta, tüm düğümler kendilerini temsil eder.
dist[i]
Her bileşeni
için en hafif bileşen geçiş kenarına sahip olacak şekilde bir vektör bulunduruni
.Bölümleri geçen en hafif kenarı bulduğunuzda , doğrusal zamanda
i
ağırlığını en aza indirgeyindist[i]
.İki bileşeni birleştirirken ve C j , komşuluk matrisi değiştirme A artık örneğin, bir i , k = dk { A i , k , bir j , k } tüm bileşenler için k ve işaretlemek i artık temsili olarak onun bağlı bileşen ( artık sadece j kalacak).
Kruskal'ın bu versiyonu literatürde iyi biliniyor mu?