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şeniiç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
iağı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?