720 likes | 1.23k Views
MIT503 Veri Yapıları ve algoritmalar İleri graf sorunları. Y. Doç. Yuriy Mishchenko. İleri graf sorunları. Ders planı En kısa patika problemi Minimum yayılan ağaç problemi Maximal akım problemi. Temel Graf Kavramları. Graflar, genel ilişkileri temsil etmek için kullanılır
E N D
MIT503 Veri Yapıları ve algoritmalarİlerigraf sorunları Y. Doç. Yuriy Mishchenko
İleri graf sorunları Ders planı • En kısa patika problemi • Minimum yayılan ağaç problemi • Maximal akım problemi
Temel Graf Kavramları • Graflar, genel ilişkileri temsil etmek için kullanılır • Birkaç nesne (düğüm) var ve onların arasında ilişkiler (bağlantılar) var • İlişkiler için sayısal değeri (ağırlık) atanabilir (ilişkinin güçlüğü) ve yön atanabilir (ilişkinin yönü) 0.5 0.25 0.77 0.33 1.0 0.5 0.17 1.0 0.33 0.15
Graflar Temel Sorunları • Temel graf soruları – graf araması: • Bağlantıları takip ederek belirli bir nesne bulmak lazım • Belirli bir nesneden diğer bütün nesnelerin uzaklığı bulmak lazım • Grafın yapısını incelemek lazım • Derinlikte ve enine arama algoritmaları graf inceleme için kullanılır
Graflar İleri Sorunları • En kısa patika problemi • Bağlantı ağırlıklarına göre (yanı adımların masraflarına göre), iki nesnelerin arasında asgari ağırlıkta (en üçüz) yolu bulmak lazım • Minimum yayılan ağaç problemi • Bağlantı ağırlıklarına göre (yanı bağlantıların masraflarına göre), bütün nesneleri içeren asgari ağırlıkta ağaç grafı bulmak lazım (ağaç=döngüsüz graf) • Maximal akım problemi • Bağlantı ağırlıklarına göre (yanı bağlantıların aktarımlarına göre), bir ağda mümkünse azami akışı bulmak lazım • Maximal kesim • Bağlantı ağırlıklarına göre (yani bağlantıların güçlerine göre), bir anlamda optimal bölümleri bulmak lazım
En kısa patika problemi • En kısa patika, ileri graf problemlerinden en yaygın karşılaşılanıdır: • Bir ağırlıklı graf var; • örneğin, bağlantılar nesneden nesneye mümkün adımları belirtir ve ağırlıklar böyle mümkün adımların masraflarını belirtir • Grafda, bir başlangıç ve bir sonuç nokta seçilir • Başlangıç ve sonuç arasındaki asgari ağırlıkta, yani en ücüz, en verimli yol bulmak lazım • Yolun ağırlığı, içerdiği bağlantıların ağırlığına eşittir
En kısa patika problemi • En kısa patika probleminin uygulamaları: • İki konum arasında en uygun yolu bulma • Bir süreç için en verimli sırası bulma • Bir üretme tesisinin en verimli yerleşimi bulma • Bir projenin en verimli adımşarın sırası bulma • İnternet ağlarında internet trafiği yönlendirme • Daha çok örneği kolayca bulunabilir
En kısa patika problemi • En kısa patika problemi sonuç 1.5 0.25 0.77 0.33 1.0 başlangıç 0.5 0.17 1.0 0.33 0.15
En kısa patika problemi • En kısa patika problemi “A” yol masrafı = 1.0+0.33+0.5+0.77=2.5 sonuç 1.5 0.25 0.77 0.33 1.0 başlangıç 0.5 0.17 1.0 0.33 0.15
En kısa patika problemi • En kısa patika problemi “A” yol masrafı = 1.0+0.33+0.5+0.77=2.5 sonuç 1.5 0.25 “B” yol masrafı= 1.0+0.25+1.5=2.75 0.77 0.33 1.0 başlangıç 0.5 0.17 1.0 0.33 0.15
En kısa patika problemi • En kısa patika problemi “A” yol masrafı= 1.0+0.33+0.5+0.77=2.5 sonuç 1.5 0.25 “B” yol masrafı= 1.0+0.25+1.5=2.75 0.77 0.33 1.0 başlangıç 0.5 0.17 A yolu en “kısa” yoludur 1.0 0.33 0.15
En kısa patika problemi • Ağırlıklar yoksaydı, enine arama algoritması kullanılabilirdi • Ağırlıklar varsa, çok zor bir problemdir • Genellikle, bütün mümkün yolları incelemek gerekiyor ve böyle mümkün yol çok fazla olabilir–2 olanaklı 10 adım varsa 210=1000 yol incelemek gerekebilir • Naif adımlar, gerçek en uygun adımları olmayabilir
En kısa patika problemi Naif birinci adım 3 0.5 1.5 1 Doğru birinci adım En kısa yolu
En kısa patika algoritması • En kısa patika için, “Dijkstra” algoritmasını en çoğu kullanırlar • Dijkstra algoritması, Edsger Dijkstra tarafında 1959 bulundu
En kısa patika algoritması • Ana fikri: • Başlangıçla başlar • Komşularını inceler • Şu ifade kullanılır: ana nesnesinin başlangıçtan uzaklığı D ve ana nesnesi ve bir komşu arasındaki ağırlık d ise, bu yeni komşunun başlangıçtan uzaklığı en çok (D+d) değerinde olmalıdır • Böyle bütün komşular için, bütün onların “ana-nesneleri” kullanarak şöyle “D+d” minimumu bulunur
En kısa patika algoritması 0.5 x 0 0.2 0.2 0.5 0.3 x 1.0 x x 0.2 0.8 x 1.0 0.3 0.1 x x 0.3
En kısa patika algoritması 0.5 0.5 0 0.2 0.2 0.5 0.3 0.2 1.0 x x 0.2 0.8 1.0 1.0 0.3 0.1 x x 0.3 1. Başlangıcın komşularını incelenir; uzaklıklarını doğrudan atanır (önceki D=0, başlangıç zaten)
En kısa patika algoritması 0.5 0.5 0 0.2 0.2 0.5 0.3 0.2 1.0 x x Bu nesneyi geçtik 0.2 0.8 1.0 1.0 0.3 0.1 2.0 x 0.3 2. Birinci “komşu” nesnesinin komşuları incelenir
En kısa patika algoritması Bu nesneyi geçtik şimdi 0.5 0.5 0 0.2 0.2 0.5 0.3 0.2 1.0 0.5 x 0.2 0.8 1.0 1.0 0.3 0.1 2.0 0.4 0.3 3. İkinci “komşu” nesnesinin komşuları incelenir
En kısa patika algoritması Burada, yeni uzaklık (0.7) önce uzaklık (0.5)’tan daha büyük; değiştirmiyoruz 0.5 0.5 0 0.2 0.2 0.3 0.2 1.0 0.5 1.0 0.2 0.8 1.0 1.0 0.3 0.1 2.0 0.4 0.3 4. Üçüncu “komşu” nesnesinin komşuları incelenir
En kısa patika algoritması Tekrar, yeni uzaklık (2.3) önce uzaklık (0.5)’tan daha büyük; değiştirmiyoruz 0.5 0.5 0 0.2 0.2 0.3 0.2 1.0 0.5 1.0 0.2 0.8 1.0 1.0 0.3 0.1 2.0 0.4 0.3 5. Sonraki “komşu” nesnesinin komşuları incelenir
En kısa patika algoritması Burada yeni 1.3 uzaklık önce uzaklıktan daha büyük; değiştirmiyoruz 0.5 0.5 0 0.2 0.2 0.5 0.3 0.2 1.0 0.5 1.0 0.2 0.8 1.0 1.0 0.3 0.1 2.0 0.4 0.3 6. Sonraki “komşu” nesnesinin komşuları incelenir
En kısa patika algoritması Burada yeni uzaklık (0.5) önce uzaklık (1.0)’tan daha küçük; şimdi değiştiriyoruz 0.5 0.5 0 0.2 0.2 0.5 0.3 0.2 1.0 0.5 0.5 0.2 0.8 1.0 1.0 0.3 0.1 2.0 0.4 0.3 7. Son nesne için onun komşusu incelenir
En kısa patika algoritması 0.5 En kısa patika Geri ilerlerken bulunur 0.5 0 0.2 0.2 0.5 0.3 0.2 1.0 0.5 0.5 0.2 0.8 1.0 1.0 0.3 0.1 2.0 0.4 0.3
Dıjkstra algoritmasının sözde kodu 1 functionDijkstra(Graf, başlangıç): 2 forv,bütün Graf’daki nesneleriçin// başlama 3 v’nin uzaklığı:= yok ; // uzaklık değerleri, dizi 4 v’nin öncesi := yok ; // nesne “v” için optimum önceki nesnesi, dizi 5 end for ; 6 başlangıç’ınuzaklığı:= 0 ; // Başlangıcın başlangıçtan uzaklığı sıfırdır 7 Q := (grafın nesnelerinin kümesi) ; // komşular kümesi 8 whileQboş değil iken: 9 u := Q’daki en küçük uzaklıkta olan nesnesi; 10 Ifu’nun uzaklığı = yok : 11 break ; // bu nesneler başlangıçtan sağlanamaz 12 end if ; 13 Q’dan uçıkartın ; 14 for v , u’nun bütün komşular için// u’nun komşu v, Q’da olmalı 15 alt := u’nunuzaklığı + u’den→v’yeağırlığı; 16 ifalt < v’nin uzaklığı: // min (u,v,a)bulma 17 v’ninuzaklığı:= alt ; 18 v’nin öncesi := u ; 19end if ; 20end for ; 21end while ; 22endDijkstra.
Algoritma analizi • En kısa yol bulma ne kadar zamandır gerekir? • Bütün adımlarda bütün grafdaki nesneleri incelemek gerekebilir; bu demek ki, • Grafın N nesnesi varsa, en kısa yol bulma O(N2)’a kadar zamandır gerekir • Naif bütün mümkün patika inceleme O(NN) vakit genellikle zamandır gerekir • Dijkstra algoritması, O(N2) algoritmadır
Minimum yayılan ağaç problemi • Minimum yayılan ağaç problemi • Bir ağırlıklı graf var • Örneğin, bağlantılar birkaç konum arasındaki bağlantıları belirtir, ve ağırlıklar bağlantıların fiyatlarını belirtir • Yayılan ağaç, bütün grafdaki nesneler içeren bir ağaçtır • Bu ağacın toplam ağırlığı, toplam içeren bağlantıların ağırlığına eşittir (bağlantıların toplam fiyatı, mesela) • Asgari toplam ağırlıkta (fiyatta) böyle bir ağaç bulmak gerekir
Minimum yayılan ağaç problemi • Uygulamalar: • Bir bölgenin elektrik şebeke ağı tasarımı, yanı bütün santralden bütün tüketicileri sağlayan en az fiyatlı bir elektrik şebeke ağı yapmak lazım • Büyük üreticinin tedarik ağı tasarımı • Büyük magazanın şübe ağı tasarımı • Minimum yayılan altgraf her zaman bir ağaçtır, çünkü döngüler varsa, böyle bir graf asgari ağırlıkta olamaz–döngünün bağlantıları çıkartılabilir
Minimum yayılan ağaç problemi • Yayılan ağaçlar çok var, tek yayılan ağaç yok; • Derinlikte arama bir yayılan agaç oluşturyordu • Enine arama bir yayılan agacı oluşturuyordu • Asğari ağırlıkta (fiyatta) yayılan ağacı bulma zor problem olabilir • Minimum yayılan ağaç birkaç tane de olabilir • Minimum yayılan ağaç bulmak için Kruskal veya Prim algoritmalarını kullanılır
Minimum yayılan ağaç algoritması • Prim algoritması daha basittir • Vojteç Jarnik (1930) ve sonra Robert Prim (1957) tarafından bulundu
Minimum yayılan ağaç algoritması • Prim algoritmasının ana fikri: • Herhangi bir nesne ile başlıyor; bu noktada tek nesneyli yayılan agacı ile başlıyor • Bütün adımlarda önce oluşturulan yayılan ağaca asgari ağırlıkta bitişik bağlantıyı ekliyor • Sonuna kadar devam ediyor • Prim algoritması açgözlü algoritmanın örneğidir–bütün adımlarda lokal, yanı şimdi en iyi görünün, karar edilir, en az “fiyatlı” bağlantı eklenir
Minimum yayılan ağaç algoritması 0.5 0.2 0.2 0.5 0.3 1.0 0.2 0.8 1.0 0.3 0.1 0.3 1. Başlangıç nesnesi
Minimum yayılan ağaç algoritması 0.5 0.2 0.2 0.5 0.3 1.0 0.2 0.8 1.0 0.3 0.1 0.3 2. Asgari ağırlıkta bitişik kenarı eklenir
Minimum yayılan ağaç algoritması 0.5 0.2 0.2 0.5 0.3 1.0 0.2 0.8 1.0 0.3 0.1 0.3 3. Asgari ağırlıkta bitişik kenarı eklenir
Minimum yayılan ağaç algoritması 0.5 0.2 0.2 0.5 0.3 1.0 0.2 0.8 1.0 0.3 0.1 0.3 4. Asgari ağırlıkta bitişik kenarı eklenir
Minimum yayılan ağaç algoritması 0.5 0.2 0.2 0.5 0.3 1.0 0.2 0.8 1.0 0.3 0.1 0.3 5. Asgari ağırlıkta bitişik kenarı eklenir
Minimum yayılan ağaç algoritması 0.5 0.2 0.2 0.5 0.3 1.0 0.2 0.8 1.0 0.3 0.1 0.3 6. Asgari ağırlıkta bitişik kenarı eklenir
Minimum yayılan ağaç algoritması 0.5 0.2 0.2 0.5 0.3 1.0 0.2 0.8 1.0 0.3 0.1 0.3 7. Asgari ağırlıkta bitişik kenarı eklenir
Minimum yayılan ağaç algoritması 0.5 0.2 0.2 0.5 0.3 1.0 0.2 0.8 1.0 0.3 0.1 0.3 8. Asgari ağırlıkta bitişik kenarı eklenir
Minimum yayılan ağaç algoritması 0.5 0.2 0.2 0.5 0.3 1.0 0.2 0.8 1.0 0.3 0.1 0.3 Asgari yayılan ağaç
Minimum yayılan ağaç algoritması 0.5 0.2 0.2 0.5 0.3 1.0 0.2 0.8 1.0 0.3 0.1 0.3 Birkaç minimum yayılan ağaç da olmayabilir
Minimum yayılan ağaç algoritması 0.5 0.2 0.2 0.5 0.3 1.0 0.2 0.8 1.0 0.3 0.1 0.3 Aynı ağırlıkta olan başka bir minimum yayılan ağaç →
Algoritma analizi • Prim algoritması; • minimum yayılan ağaç oluşturur • açgözlü algoritmadır • Basit • O(N2) zamandır gerekir
Maximum akım problemi • Maximum akım problemi; • Bir ağırlıklı akım ağını temsil eden bir graf var (mesela – şehirdeki yol ağı, elektrik şebeke ağı, vb) • Ağırlıklar, nesneden nesneye azami akımları belirtiyor • Tasarlanacak akım için başlangıç (ilk) ve sonuç (son) noktalar var • Başlangıçtan sonuca kadar azami toplam akımı bulmak gerekir
Maximum akım problemi • Uygulamalar • Sürecin maximum verimliliği bulma • Ulaşım ağılarının verimliliği arttma • Elektrik devreleri tasarımı • Birkaç başlangıçlı akım problemi için bir başlangıç bir sonuçlu maximum akım problemi hala çözümü verir • Bütün grafdaki nesneleri içeren asgari fiyatlı yol kümesi bulma • Bir başlangıç noktasından bir sonuç noktasına azami bağımsız yol kümesi bulma • Vb
Akım grafının kavramları U ve V nesne arasındaki bağlantının kapasitesi c(u,v) Başlangıç, “b” 0.5 0.3 Bağlantının akımı f(u,v) Sonuç, “s”
Akım graflarının kavramları U ve V nesne arasındaki bağlantının kapasitesi c(u,v) 0.5 Başlangıç, “b” 0.5 0.2 0.2 0.2 0.5 0.3 0.3 1.0 Bağlantı akımı f(u,v) 0.2 0.8 1.0 Koşulları: 0.1 0.3 Akım yetenekten daha küçük f(u,v)≤c(u,v) 0.3 Gelen akım, ∑f(u,v), ve çıkan akım, ∑ f(u,v), eşittir Sonuç, “s”
Akım graflarının kavramları • Bütün bağlantılar için iki tane özellik var; • c(u,v), u nesnesinden v nesnesine kapasitesi yada azami akımı belirtir • f(u,v), u nesnesinden v nesnesine gerçekleştirilen akımı belirtir
Akım graflarının kavramları • Akım uygun olması için, gerçekleştirilen akımlar bağlantıların kağasitelerinden daha küçük olmalıdır – f(u,v)≤c(u,v) • Bütün düğümler için gelen akımlar çıkan akımlara eşit olmalı, (gelen)∑f(u,v)=(çıkan)∑f(u,v)
Akım grafı kavramları Maximum akım matematiksel problemi Başlangıçtan yada sonuca azami akımı bulun bulmak Gerçekleştirilen akımlar kapasitelerden daha küçükler Gelen ve çıkan akımlar eşit olmalı