Minimum yayılma ağacı vs En kısa yol


44

Minimum yayılma ağacı algoritması ile en kısa yol algoritması arasındaki fark nedir?

Veri yapılarım sınıfında iki minimum yayılma ağacı algoritması (Prim ve Kruskal's) ve en kısa yol algoritması (Dijkstra's) ele alınmıştır.

Minimum yayılma ağacı, tüm köşeleri kapsayan grafikte bir ağaçtır ve ağacın toplam ağırlığı minimumdur. En kısa yol açıktır, bir tepe noktasından diğerine en kısa yoldur.

Anlamadığım şey, minimum yayılan ağacın minimum toplam ağırlığa sahip olması, ağaçtaki yollar en kısa yol olmaz mıydı? Ne kaçırdığımı kimse açıklayabilir mi?

Herhangi bir yardım takdir edilmektedir.


İşte minimum yayılan ağacın en kısa yolla aynı olmadığını kanıtlayan benzer bir soruya benim örneğim. cs.stackexchange.com/a/43327/34363
atayenel

Ayrıca, bu ilginç olabilir. En fazla yayılan ağaç, her bir yolun bir darboğaz yolu olduğu düğümler arasındaki yollara sahiptir; yani, toplam ağırlığı en aza indirgemek yerine, minimum ağırlığı maksimuma çıkarırsınız. Belki minimum yayılan ağaç arasında benzer bir ilişki vardır.
Eugene

Yanıtlar:


37

Birim ağırlıkları olan üçgen grafiği göz önünde bulundurun - üç köşeleri vardır ve üç kenarın da her birinin ağırlığı . İki köşe arasındaki en kısa yol doğrudan yoldur, ancak hepsini bir araya getirirseniz bir ağaç yerine bir üçgen elde edersiniz. İki kenardan oluşan her koleksiyon bu grafikte minimum yayılan bir ağaç oluşturur, ancak (örneğin) seçerseniz, en kısa yolu kaçırırsanız .x,y,z{x,y},{x,z},{y,z}1{x,y},{y,z}{x,z}

Sonuç olarak, en kısa yolları bir araya getirirseniz, mutlaka bir ağaç almazsınız.


32

İki Dijkstra algoritmasının (tek bir başlangıç ​​düğümünden en kısa yollar) ve Prim'in (belirli bir düğümden başlayan asgari ağırlık ağacı) çok benzer bir yapıya sahip olduğu konusunda haklısınız . Her ikisi de açgözlüdür (mevcut bakış açısından en iyi kenarı alır) ve grafiği kapsayan bir ağaç oluşturur.

Ancak en aza indirdikleri değer farklıdır. Dijkstra, bir sonraki kenar olarak ağaçtan henüz başlangıç ​​düğümüne en yakın seçilmemiş bir düğüme giden ucu seçer. (Daha sonra bu seçim ile mesafeler yeniden hesaplanır.) Prim, şu ana kadar yapılan ağaçtan çıkan en kısa kenarı kenara seçer. Bu nedenle, her iki algoritma da "minimal kenar" seçti. Asıl fark, minimal olarak seçilen değerdir. Dijkstra için başlangıç ​​düğümünden aday düğüme giden tam yolun uzunluğu, Prim için ise bu tek kenarın ağırlığıdır.

Aradaki farkı görmek için ne olduğunu görmek için birkaç örnek oluşturmaya çalışmalısınız, Bu gerçekten öğretici. En basit örnekte gösterildiği farklı bir davranış bir üçgen olduğu kenarlı ve ise ve uzunluğu 2, içinde uzunluğunun başlangıç 1. sahip Dijkstra, ve (iki uzunluktaki iki yolu vererek) seçerken, Prim ve (yayılma ağacını verir) ağırlık 3).x,y,z{x,y}{x,z}{y,z}x{x,y}{x,z}{x,y}{y,z}

ağaçlar: Dijkstra vs Kruskal

Kruskal'a gelince , bu biraz farklı. Minimal yayılma ağacını çözer, ancak uygulama sırasında bir ağaç oluşturmayacak kenarı seçer, sadece döngüden kaçınırlar. Bu nedenle kısmi çözümler bağlantısı kesilebilir. Sonunda bir ağaç olsun.


12

Minimum Yayılma Ağacı ve En Kısa Yol algoritmalarının hesaplanması benzer gözükse de, 2 farklı gereksinime odaklanırlar.

MST'de şart, her köşeye bir kez ulaşmak (grafik ağacı oluşturmak) ve her köşeye ulaşmanın toplam (toplu) maliyetinin, tüm olası kombinasyonlar arasında minimum olması gerekir.

En Kısa Yol'da, gereksinim en düşük maliyetle (en kısa ağırlık) kaynak tepe noktasından hedef tepe noktasına ulaşmaktır. Bu yüzden burada her bir köşeye ulaşmaktan endişe etmiyoruz, bunun yerine sadece kaynak ve hedef köşelerine ve farkın olduğu noktalara odaklanacağız.

İşte MST'nin neden iki köşe arasında en kısa yolu vermediğini açıklamaya örnek.

(A)----5---(B)----5---(C)
 |                     |
 |----------7----------| 

MST durumunda, AB kenarları. BC, toplam ağırlığı 10 olan MST'de olacaktır. Dolayısıyla MST'de A'dan C'ye ulaşmanın maliyeti 10'dur.

Ancak En Kısa Yol durumunda, A'dan C'ye en kısa yol AC'dir. 7'dir. AC hiçbir zaman MST'de değildir.


4

Fark, bu algoritmaların nihai amacı nedir?

Dijkstra's - Burada amaç baştan sona ulaşmak. Sadece bu 2 noktadan endişe duyuyorsunuz ve yolunuzu buna göre optimize ediyorsunuz.

Krusal's - Burada herhangi bir noktadan başlayabilir ve grafikteki diğer tüm noktaları ziyaret etmeniz gerekebilir. Bu nedenle, iki nokta için her zaman en kısa yolu seçemeyebilirsiniz. Bunun yerine odak noktası, diğer tüm noktalar için sizi daha kısa bir yola götürecek yolu seçmektir.


1

Bence bir örnek daha net hale getirecek ..

görüntü tanımını buraya girin

Yayılan ağaç aşağıdakine benzer. Bunun nedeni, eğer bu yapılandırmada kenarları toplarsak, mümkün olan en düşük toplam maliyeti elde ederiz : 2 + 5 + 14 + 4 = 25.

(1)   (4)
  \   /
   (2)
  /   \
(3)   (5)

Yayılan ağaç göz küresi tarafından yanlış bir şekilde size en kısa yollar verdiğini düşünebilirsiniz, ancak pratikte yapmaz. Biz düğümden girmek istese Örnek olarak (1)için (4)bize orijinal grafik üzerinde Dijkstra'nın algoritması kullanılır Ancak eğer 7. mal olacak, biz düğümden doğrudan gidebilirsiniz bulur (1)için (4)bir maliyetle 5.


-1

Farkı göstermek için pratik bir örnek>

Bir kasabaya trenle vardığınızı ve otelinize ulaşmak istediğinizi varsayalım.

Seçenek 1: Bir taksi alın: Taksi, otelden istasyona giden en kısa yolu kullanacaktır. Sürücü istasyonda merkezlenmiş en kısa yol ağacı boyunca bir yol izlemesi gerekiyorsa.

Seçenek 2: Bir otobüse binin. Otobüs şirketi sadece siz değil, mayıslı insanlara da hizmet vermek istiyor. İdeal yol, şehirdeki tüm kilit noktaları ele geçirecektir. Böylece minimum yayılma ağacı boyunca bir yol izleyecektir (*). Bu nedenle otobüs yavaştır, ancak maliyetler paylaşıldıkça daha ucuzdur.

(*) Aslında insanlar asgari yayılma ağacının kullanılmasından şikayet ederlerdi (otobüs yolculuğu çok uzun olacaktı). Bu yüzden pratikte karma bir çözüm olurdu ve bir Alfa Ağacı (minimum yayılan ağaç ile en kısa yol ağacı arasında yarı yolda) kullanacaktı.


1
Siteye Hoşgeldiniz. Analojinizin iyi olduğunu sanmıyorum, çünkü bir otobüsün kullandığı yolun yayılan ağaçlarla pek ilgisi yok gibi görünüyor. Özellikle, yayılmıyor (şehirdeki her yeri ziyaret etmiyor) ve bir ağaç değil. Aksine, makul olduğu kadar önemli noktalara yakın olanları ziyaret eden ya da geçen bir tür yol (ya da döngü), böylece rota oldukça fazla sayıda insan için makul derecede faydalıdır.
David Richerby

-1

İki farklı özelliğe dayanırlar. Minimum yayılma ağacı kesim özelliğine, en kısa yol ise kenar dinlendirici özelliğe dayanır.

Bir kesim, grafiği iki bileşene böler. Birden fazla kenar içerebilir. MST'de en az ağırlığa sahip kenarı seçiyoruz.

Kenar gevşetici, A (B): Dist (a, b) ve A ile C (C) arasındaki mesafeyi bildiğimden emin olun ki, eğer dist (a, b) + edge (b, c) 'den küçükse dist (a, c), sonra kenarı gevşetebilirim (ac). Tüm kenarları gevşettikten sonra en kısa yoldan geçiyoruz.

Çok üzerinde video izlerken tavsiye grafik profesörü Robert Sedgewick'e gelen algoritmaları.

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.