Bellman Ford Algoritması

UAYRI!: Bu yazıda hatalar bulunmaktadır (Uğur Bey’e teşekkürler). Bu yazıda anlatılan algoritma verilen örnekteki özel olarak sıralanmış kenarlar için doğru çalışmakta ancak farklı durumlarda hata yapabilmektedir. Bellman-Ford algoritmasının tam ve doğru anlatımı için http://www.bilgisayarkavramlari.com/2010/08/05/bellman-ford-algoritmasi-2/ adresindeki yazıyı okuyabilirsiniz.

Yazan : Şadi Evren ŞEKER

Bu algoritmanın amacı, bir şekil (graph) üzerindeki, bir kaynaktan (source) bir hedefe(target veya sink) giden en kısa yolu bulmaktır. Algoritma ağırlıklı şekiller (weighted graph) üzerinde çalışır ve bir anlamda Dijkstra algoritmasının iyileştirilmişi olarak düşünülebilir.

Algoritma aslında Dijkstra algoritmasından daha kötü bir performansa sahiptir ancak graftaki ağırlıkların eksi olması durumunda Dijkstra’nın tersine başarılı çalışır.

Algoritma Dijkstra algoritmasında olduğu gibi en küçük değere sahip olan kenardan gitmek yerine bütün graf üzerindeki kenarları test eder. Bu sayede aç gözlü yaklaşımının (greedy approach) handikabına düşmez ve her düğüme sadece bir kere bakarak en kısa yolu bulmuş olur.

Get the Flash Player to see this content.

Algoritmanın çalışmasını yukarıdaki gibi eksi değerlere sahip bir şekil üzerinden anlamaya çalışalım.

Öncelikle düğümlere değer ataması yapılıyor. Başlangıç düğümüne 0, doğrudan erişilen düğümlere erişim değerleri ve erişilemeyen düğümlere ¥ sonsuz değeri atanıyor. Hedef düğüm olarak da E düğümünü tanımlayalım.

Yukarıdaki örnekte A düğümünden başlayacağımız düşünelim:

Şimdi şekilde kenarları sıralayalım:

AB 2

AC 1

BE -2

BF 5

CF 2

CD -1

DF 5

DE 7

Bellman ford algoritması işte bu kenarları teker teker dolaşması itibariyle dijkstradan ayrılır. Sırayla yukarıdaki kenarları (Edges) dolaşır ve graftaki değerleri günceller.

Yukarıda, rastgele sıra ile dizilen bu kenarları sırasıyla dolaşalım ve bu dolaşma sırasında şu işlemi yapalım.

Örneğin AB kenarı , A ve B düğümleri arasında. Bu düğümlerden düşük değere sahip olan düğüm üzerine kenar değeri eklenip yüksek değere sahip olan düğüm üzerine yazılıyor.

Sırayla gidecek olursak:

AB 2, min(A,B) = 0 à 0+ 2 = 2

AC 1, min(A,C) = 0 => 0+1 = 1

BE 2, min (B,E ) 2, => 2 + 2 = 4

BF 5, min(B,F) = 2 => 2+5 = 7

CF 2, min (C,F) = 1 => 1+2 = 3, bu değer 7′den küçük olduğu için güncelliyoruz:

CD -1, min(C,D) = 1=> 1+(-1) = 0

DF 5, min (D,F) = 0 => 0+5 = 5 F’nin değerinden daha büyük o yüzden güncellemiyoruz.

DE 7, min(D,E) = 0 => 0+7 = 7, yine E’nin değerinden büyük olduğu için güncellenmiyor.

Sonuçta graf aşağıdaki şekilde bitmiştir:

Bu graftaki bütün düğümlerde, A düğümünden ne kadar maliyetle gidildiği bulunmuştur. Örnek hedef E düğümü ise, ulaşım maliyeti 4′dür.

Görüldüğü üzere eksi değere sahip düğümler olmasına rağmen herhangi bir problem yaşanmamıştır.

Bu yazıyı beğendiyseniz, başkalarının da ilgisini çekebilirsiniz:


2,296 views

6 responses to “Bellman Ford Algoritması”
  1. Neşe Sarıkaya says:

    hocam elinize dilinize sağlık çok iyi olmuş videolu anlatım

  2. can guler says:

    hocam elinize saglık canlı canlı daha iyi olmuş

  3. Uğur Dönmez says:

    Algoritmada bir kaç ciddi hata var. Bu şekilde kodlanırsa ciddi problemlere yol açabilir. Ayrıca okuyan kişilerin algoritmayı yanlış öğrenmesine yol açar.

    1. Algoritma Dijkstra nın kısa yol algoritmasından çok farklı. Benzer yönleri sadece kısa yolu bulmaları.

    2. Algoritmanın doğru sonuçlar vermesi için graph da negatif cycle olmaması gereklidir.

    3. Kenarların köşe sayısının bir eksiği kadar olan bir döngüne dolaşılması gereklidir. Sizin yaptığınız gibi tek döngüde olmaz. Tabi kenerları bakıp sıralayınca bazı graph lar tek döngüde çözülür.

    Ayrıntılı bilgi isteyenler algoritmanın doğru şeklini wikipedia dan öğrenebilirler.

    http://en.wikipedia.org/wiki/Bellman%E2%80%93Ford_algorithm

    http://www.ugurdonmez.com

  4. Şadi Evren ŞEKER says:

    konuyu tekrar inceleyip hata varsa düzelteceğim. Uyarınız için çok teşekkür ederim.

  5. Uğur Dönmez says:

    İlginiz için ben teşekkür ederim. Kaliteli emek dolu bir siteniz var.

    http://www.ugurdonmez.com

  6. Şadi Evren ŞEKER says:

    Evet döngü sayısı konusunda haklısınız, düğüm sayısı kadar bir dış döngü gerekiyor. Yazıyı yeniden yazıp http://www.bilgisayarkavramlari.com/2010/08/05/bellman-ford-algoritmasi-2/ adresinde yayınladım, bu yazının başına da uyarı ekledim. Tekrar teşekkürler

Leave a Reply


+ yedi = 11

Benzer Yazılar:

Bilgisayar Kavramları üzerinde şu anda okumakta olduğunuz 'Bellman Ford Algoritması' isimli yazı 26 May 2010 tarihinde, saat: 22:32 'de Şadi Evren ŞEKER tarafından gönderilmiş, toplam2,296 defa okunmuştur.

Benzer yazıları algoritma analizi (teory of algorithms), graf teorisi (graph theory, çizge kuramı), veri yapıları kategorilerinden okuyabilirsiniz. Yazar ile irtibat kurmak için email gönderebilirsiniz. Yazıya yorum yapabilir ya da yapılan yorumları RSS 2.0 ile takibe alabilirsiniz.


Category: algoritma analizi (teory of algorithms), graf teorisi (graph theory, çizge kuramı), veri yapıları
Tags: , , ,