Kimler Sitede
Şu anda 4 ziyaretçi çevrimiçiBağış
| En Kısa Yol Algoritması |
| Makale - Algoritma | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Yazar ugokhan | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Cumartesi, 19 Mayıs 2007 02:12 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
En Kısa Yol probleminde, ulaştırma şebekesindeki Kaynak ile Varış Noktası arasındaki en kısa bulunmaya çalışılır. Amaç, şebeke üzerindeki iki düğüm noktası arasındaki en kısa uzunluğu ve rotayı bulmaktır.
Mesela karayolları haritası üzerinde seçilen iki şehir arasındaki en kısa gidiş rotasını bulmak gibi. Günlük hayatta ve özellikle Mühendislik Uygulamalarında sıkça karşılaşılan bir problemdir.
Öncelikle problemde geçen bazı tanımları yapalım. "Düğüm Noktası", gidilecek hedef, bulunulan nokta, geçilen bölüm ..gibi ÅŸebeke üzerindeki tanımlanmış bölgeleri gösterir. Mesela Karayolları haritası için ÅŸehir, ilçe, köy gibi yerleÅŸim birimleri düğüm noktasıdır. "BaÄŸlantı", iki düğüm noktası arasındaki direkt iliÅŸkiyi gösterir. Mesela iki ÅŸehir direkt birbirine baÄŸlı mıdır? BaÄŸlantıların iki türü vardır. Yönlü ve Yönsüz BaÄŸlantılar. Yönlü baÄŸlantılar, ÅŸebeke üzerinde ilerlerken bizi etkiler. GidiÅŸin tek tarafa olduÄŸu birleÅŸmeleri gösterir. Mesela aÅŸağıdaki ÅŸebekede 2'den 1'e gidiÅŸ vardır. ama 1'den 2'ye gidiÅŸ yoktur. Buna yönlü baÄŸlantı denir. Yönsüz baÄŸlantı ise her iki yönde de birleÅŸmenin söz konusu olduÄŸu durumlarda kullanılır. Her baÄŸlantının bir deÄŸeri vardır. Mesela iki ÅŸehir arasındaki (km) uzaklık. BaÄŸlantılar bağıntı ifadesi olarak tanımlanırlar. Bunu, "( KaynakDüğüm , HedefDüğüm ) = BaÄŸlantıDeÄŸeri" olarak belirtiriz. Â
 "Rota", şebeke üzerindeki gidiş yolunu veren bilgidir. Mesela örnekte 1'den 2'ye gidebilmek için 1 -> 3 -> 5 -> 2 rotası 1 ile 2 arasındaki en kısa yoldur. Bu rotanın değeri ( 6+2+23 = 31) 'dir.  İki tür En Kısa Yol Algoritması vardır. Dijksta ve Floyd Yöntemi.  1. DIJKSTRA ALGORİTMASI : Bu algoritmada her düğüm için etiket verilir. Bu etiketler "Geçici" ve "Kalıcı" olarak değer alırlar. Daha iyi bir yol bulunana kadar etiket değeri "Geçici"dir. Eğer en iyi yol bulunmuşsa etiket "Kalıcı"ya dönüştürülür. Bu algoritma sadece, seçilen iki düğüm noktası arasındaki en kısa yolu verir. Algoritmanın adımları aşağıdaki gibidir. 0. Adım : Kaynak Düğümünü "Kalıcı" olarak etiketle. Adım Sayısı "i" 'yi 1 yap.
 0. yineleme : "Kalıcı" etiket [ 0, - ]'yi 1. düğüme ata. 1. yineleme : 2. ve 3. düğümlere ( en son "Kalıcı" olarak etiketlenen) 1. düğümden ulaşılabilir. Böylece etiketlenen düğümlerin "Geçici" ve "Kalıcı" listesi aÅŸağıdaki gibi olur. Â
 2. ve 3. düğümün etiketleri olan iki geçici etiketten [ 100 , 1 ] ve [ 30 , 1 ]'e bakıldığında, 3. düğümün daha kısa uzaklığı verdiÄŸi görülür. Dolayısıyla 3. düğümün etiketi "Kalıcı" olarak deÄŸiÅŸtirilir. Â
 2. yineleme : 4. ve 5. düğümlere 3. düğümden ulaşılabilir ve etiketlenen düğümlerin listesi aÅŸağıdaki gibi oluÅŸur. Â
 3. düğümdeki [ 40, 3 ] geçici etiketinin durumu "Kalıcı" olarak deÄŸiÅŸtirilir. Â
 3. yineleme : 2. ve 5. düğümlere 4. düğümden ulaşılabilir. Böylece etiketlenmiÅŸ düğümlerin listesi aÅŸağıdaki gibi olur. Â
 2. yinelemede 2. düğümün geçici etiketi [ 100 , 1 ], 3, yinelemede 4. düğüm için daha kısa bir yol bulunduÄŸunu gösterdiÄŸinden [ 55 , 4 ] olarak deÄŸiÅŸtirilir. Ayrıca 3. yinelemede 5. düğümün aynı uzaklığa sahip iki alternatifi vardır.  4. yineleme : 2. düğümden sadece 3. düğüme ulaşılabilir. Bununla birlikte 3. düğüm "Kalıcı" olarak etiketlendiÄŸinden yeniden etiketlenmez. Etiketlerin yeni listesi 3. yinelemede 2. düğümdeki etiketin kalıcı olması dışında aynı kalır. Bu da 5. düğümü tek "Geçici" etiket olarak bırakır. 5. düğüm diÄŸer düğümlere gitmediÄŸinden statüsü "Kalıcı"ya dönüştürülür ve süreç tamamlanır. Â
 1. düğüm ile şebekedeki başka bir düğüm arasındaki en kısa yolu belirlemek için, istenilen varış düğümünden başlanır ve "Kalıcı" etiketlerin verdiği bilgi kullanılarak düğümlerden geriye doğru gidilir. Örneğin 1. düğümden 2. düğüme en kısa yolu aşağıdaki sıra belirler.  2. FLOYD ALGORİTMASI : Floyd Algoritması Dijkstra algoritmasının daha genel halidir. Çünkü şebekedeki herhangi iki düğüm arasındaki en kısa yolu belirler. Algoritma, N düğümlü şebekeyi N satırlı ve N sütunlu kare matris olarak gösterir. Matrisin ( i , j ) elemanı, i. düğümden j. düğüme olan uzaklığı verir. i doğrudan j'ye bağlıysa bağlantı değeri, değilse sonsuz değeri alır.
 Floyd Algoritmasında Uzaklıklar Matrisi ( D ) ve Düğüm Sırası Matrisi ( S ) bulunur. D matrisi baÄŸlantıları birer matematiksel bağıntı olarak ele alır ve ( i, j ) elemanını i. düğümden j. düğüme olan uzaklık olarak seçer. S matrisi düğümlerin baÄŸlanma sırasını tutar. Her i farklı j olmak üzere ( i , j ) = j yapılır. Åžebekenin baÄŸlantıları, D ve S matrisleri aÅŸağıda gösterilmiÅŸtir. Â
 Şebeke üzerindeki iliÅŸkilerin bağıntı deÄŸerlerini yazalım. BaÄŸlantı olmaması sonsuz uzaklık demektir. ( 1 , 2 ) = 3 ( 3 , 4 ) = 6  Genel kural; D ( i , j ) karesi için, D ( i, k ) + D ( k , j ) < D ( i , j ) var ise D ( i , j ) = D ( i , k ) + D ( k , j ) yapılır.  0. Yineleme : D ve S matrisleri yukarıda ÅŸebekenin baÅŸlangıç durumunu vermektedir. D matrisindeki sonsuz ifadesi ilgili i ve j düğüm noktalarının baÄŸlı olmadığı anlamına gelir. Ayrıca "-" ile gösterilen veriler de bir düğüm noktasının kendisi ile baÄŸlı olamayacağını belirtir. Â
 1. Yineleme : Anahtar satır ve sütun, yukarıda da görüldüğü gibi "MAVİ" renkle gösterilmektedir. K = 1'dir. Buna göre mavi kareler haricindeki bütün kareler taranırsa görülecektir ki D ( 2 , 1 ) + D ( 1 , 3 ) < D ( 2 , 3 ) ve D ( 3 , 1 ) + D ( 1 , 2 ) < D ( 3 , 2 ) olduÄŸundan D ( 2 , 3 ) ve D ( 3 , 2 ) karelerinin deÄŸerleri (kırmızı kareler) genel kuralda olduÄŸu gibi deÄŸiÅŸtirilir. Â
 2. Yineleme : K = 2'dir. Genel kural yine tüm beyaz karelere uygulandığunda yukarıdaki gibi D ( 1 , 4 ) ve D ( 4 , 1 ) kareleri deÄŸiÅŸikliÄŸe uÄŸrar. Â
 3. Yineleme : K = 3'tür. Genel kural yine tüm beyaz karelere uygulandığunda yukarıdaki gibi D ( 1 , 5 ) ve D ( 2 , 5 ) kareleri deÄŸiÅŸikliÄŸe uÄŸrar. Â
Â
 Algoritma bu şekilde N. adıma kadara gider. Tüm adımları yukarıdaki tablolardan görebilirsiniz. Artık şebeke üzerindeki herhangi iki düğüm noktası için gereken tüm bilgiler D ve S tablosunda mevcuttur. Tek yapılması gereken iki tablodan da bilgileri belli bir sistematikle okumaktır.  Örnek 2 : 3.düğüm noktası ile 2. düğüm noktası arasındaki en kısa uzaklığı bulalım. S ( 3 , 2 ) = 4'tür.
Â
|










Yorumlar
Ahmet Bey, sonsuz ifadesi teorik bir ifade. Eğer bir bilgisayar programı yazıyorsanız bunu verilebilecek en uzak değer olarak tanımlayabilirs iniz. Mesela Türkiye haritası üzerinde işlem yapıyorsak ve uzaklık kilometre cinsinden tanımlanıyorsa sonsuz ifadesini 9999 km yapmanız yeterli. Çünkü harita üzerindeki en büyük uzaklık asla 9999 dan büyük değil. Burada 9999 sonsuz bir uzaklıkmış gibi işleme alınır ve sürekli olarak elenir.
Kırmızı seçme hususunda da sanırım floyd algoritmasındak i işlemi soruyorsunuz. Genel kural işlemden önce tanımlanmıştır. 1.yinelemeyi tüm kareler için kontrol ederseniz sonucu daha iyi görürsünüz. Sonsuz kavramını sayısal olarak tanımladıktan sonra sanırım işlem daha anlamlı gelecektir.
İsmail Bey, resimleri ve içeriği kullanabilirsin iz.
tekrar teşekkürler.
Cihan Bey, bu istediğiniz problem literatürde Gezgin Satıcı Problemi (traveling salesman problem) olarak geçer. Burada tarif ettiğimden farklıdır. Sitede bu konuda bir anlatımım yok. Bir fırsatım olduğunda ekleyebilirim. Siz beni beklemeyin. İnternette bu konuda bir çok kaynak mevcut.
Eyyüp Bey, eğer henüz yola çıkmamışsanız belki yardımcı olabilirim.
Ben de Endüstri Mühendisiyim ve 2002 mezunuyum. İstemiş olduğunuz karayolu en kısa yoluyla ilgili bir çok bilgisayar programı var. Mesela en bilineni Route Manager adlı programdır ve gayet başarılıdır. Mersin'den Artvin'e kadar en kısa yolu ve kaç saatte hangi noktaya ulaşacağınızı hesaplar. Bir de son zamanlarda Google Maps'in böyle bir hizmetini duydum. Seçilen iki nokta arasındaki en kısa yolu hesaplıyor ve harita üzerinde gösteriyor.
saygılarımla..........
RSS beslemesi, bu iletideki yorumlar için.