Kruskal'ın algoritmasının bu yoğun versiyonu iyi biliniyor mu?


15

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 .Ö(mgünlükm)Θ(n2)

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şen iiçin en hafif bileşen geçiş kenarına sahip olacak şekilde bir vektör bulundurun i.

  • Bölümleri geçen en hafif kenarı bulduğunuzda , doğrusal zamanda iağırlığını en aza indirgeyin dist[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).cbencjbirbirben,k=min{birben,k,birj,k}kbenj

n-1Θ(n2)

Kruskal'ın bu versiyonu literatürde iyi biliniyor mu?

Yanıtlar:


19

Ö(n2)Ö(n2)

  1. Bunun yerine Prim – Dijkstra – Jarník kullanın ve ardından Kruskal'ın vereceği ekleme sırasını elde etmek için kenarları sıralayın veya

  2. Kruskal'ı standart bir aglomerasyon kümeleme prosedürü olarak gördüğümüz ve her bir adımda en yakın iki kümeyi bir üstkümeye birleştirdiğimiz, iki kümeyi birbirine bağlayan en kısa kenarın uzunluğu olarak tanımlanan en yakın çift veri yapısını kullanın. .

Çözüm 2, ruhsal olarak tanımladığınız şeye benzer, ancak kümeler arasındaki mesafeleri nasıl takip edeceğinizin detayları biraz farklıdır. Küme mesafe matrisinin satır-bilge minimasyonunu koruyarak, küresel minimumu bulmak için bu satır-minima listesini doğrusal zamanda taramanıza izin verirken, makalem aynı matriste dörtlü bir katmana bindirir ve her birindeki minimum değeri izler dörtlü kare. Metodunuz daha basit, ancak diğer en yakın dinamik çift problemleri için daha az esnektir (iki kümenin birleştirilmesinin diğer kümelere olan mesafelerinin azalmasına neden olması, bu sorun için doğru olması, ancak diğerleri için olması gerekmez).

Ö(n2)Ö(n2)Ö(n)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.