Prim algoritması

Prim Algoritması ağırlıklandırılmış ve bağlı bir çizge üzerinde minimum örten ağaç (minimum spanning tree) problemine çözüm bulma algoritmalardan birisidir.

Çözüm ve sözdekod

Ayrıtların bir alt kümesini, tüm düğümleri kapsayacak ve ayrıtların toplam ağırlığını minimum yapacak şekilde bulur. Bağlı olmayan bir çizgeye uygulandığında sonucu bağlı bileşenlerden yalnız birisi için bulur. Bu algoritma 1930 yılında matematikçi Vojtech Jarnik tarafından bulunmuştur. Daha sonra bağımsız olarak 1957'de bilgisayar bilimcisi Robert C. Prim ve 1959'da Dijkstra tarafından tekrar bulunmuştur. Bu nedenle bu algoritmaya DJP veya Jarnik algoritması da denir.

Sözdekod'u aşağıdaki gibi verilebilir:

  function Prim(çizge N)
  T: kapsayan ağaç
  B: eklenmiş düğümler
  B <- rastgele bir düğüm
  while B<>N do
    e = (u, v) şeklinde en hafif ayrıtı bul oyle ki u B'nin elemanı olsun ve v N\B 'nin elemanı olsun
    T <- T U {e}
    B <- B U {v}
  endwhile
  return T

 Örnek 

200pxBu çizgenin orijinal hali. Ayrıtların üzerindeki sayılar ağırlıkları. Ayrıtlardan hiçbiri henüz seçili değil ve D düğümü başlangıç düğümü olarak rastgele seçildi.200pxİkinci olarak seçilecek düğüm D'ye en yakın olanı. A 5, B 9, E 15 ve F 6 uzaklıkta. Bunlardan en küçüğü 5 dolayısıyla A düğümünü ve DA ayrıtını işaretliyoruz.200pxSeçilecek bir sonraki düğüm D veya A'ya en yakın olanı. B 7 uzakta (A dan), E 15 ve F 6. En yakın 6 o yüzden F düğümünü ve DF ayrıtını işaretliyoruz.200pxAlgoritma aynı şekilde devam ediyor. B düğümü A'dan 7 uzakta ve işaretli. Burada DB ayrıtı kırmızı olarak işaretlendi çünkü daha önce hem B hem de D düğümleri işaretlenmişti. Bu yüzden bu ayrıt kullanılamaz.200pxBu durumda C, E ve G'den birini seçebiliriz. C, B'den 8 uzakta, E, B'den 7 uzakta ve G, F'den 11 uzakta. En yakın E olduğu için onu ve EB ayrıtını işaretliyoruz. Diğer iki ayrıt kırmızı çünkü onları bağlayan düğümler kullanıldı.200pxBurada sadece C ve G düğümlerini inceleyebiliriz. C, E'den 5 uzakta ve G ise 9 uzakta. C'yi ve EC ayrıtını seçiyoruz. Ayrıca BC'yi de kırmızı olarak işaretliyoruz.200pxG düğümü kalan son düğüm. F'den 11 uzakta ve E'den 9 uzakta. Bu nedenle E'yi ve EG'yi işaretliyoruz. Tüm düğümleri eklediğimize göre en hafif kapsayan ağaç yeşil olarak gözüküyor. Toplam ağırlığı ise burada 39 oldu.

Kaynakça

 Ingilizce Wikepedia "Prim's algorithm" maddesi  

Ayrıca bakınız

 Minimum örten ağaç problemi

Dış bağlantılar

 Prim algoritması için animasyonlu çözüm 
 Prim Algoritmasi icin Java Apple)
  Pythom programi kullanarak "Minimum örten ağaç" problemi gosterimi, Ronald L. Rivest 
 Prim Algoritmasi uygulanmasi icin Open Source Java Grafik paketi 

Kategori:Yöneylem araştırması
Kategori:Çizge algoritmaları
Kategori:Örten ağaç