MIT503 Veri Yapıları ve algoritmalar En önemli graf problemleri

Slides:



Advertisements
Benzer bir sunumlar
8. SINIF 3. ÜNİTE BİLGİ YARIŞMASI
Advertisements

Ders İçeriği Ağaç Veri Modeli Tanım ve Gerçekleştirim İkili Ağaç
Yrd. Doç. Dr. Mustafa Akkol
MIT503 Veri Yapıları ve algoritmalar
Prof.Dr.Şaban EREN Yasar Üniversitesi Fen-Edebiyat Fakültesi
IT503 Veri Yapıları ve algoritmalar
ERÜNAL SOSYAL BİLİMLER LİSESİ
1 . ÜNİTE : GEOMETRİK ŞEKİLLER
MIT503 Veri Yapıları ve algoritmalar Algoritma Oluşturma – Açgözlü algoritmalar ve buluşsallar Y. Doç. Yuriy Mishchenko.
MIT563 Yapay Zeka ve Makine Öğrenmesi
MIT504 İnternet ve Web Programlama: Javascript programlama devam Yrd. Doç. Dr. Yuriy Mishchenko.
MIT505 İnternet ve Web Programlama: Web Şablonları ve Web düzenleme
Ders İçeriği Bağlantılı Liste İki Yönlü Bağlantılı Liste
4 Kare Problemi 4 Kare Problemi Hazır mısın? B A Bu şekle iyi bak
TAM SAYILAR.
JEODEZİ I Doç.Dr. Ersoy ARSLAN.
AVL-Ağaçları (Trees).
Algoritmalar En kısa yollar I En kısa yolların özellikleri
4 Kare Problemi 4 Kare Problemi Hazır mısın? B A Bu şekle iyi bak
MIT503 Veri Yapıları ve algoritmalar Algoritmalara giriş
İçerik Ön Tanımlar En Kısa Yol Problemi Yol, Cevrim(çember)
Birinci Dereceden Denklemler
İkili Arama Ağaçları (Binary Search Trees) BST
SOME-Bus Mimarisi Üzerinde Mesaj Geçişi Protokolünün Başarımını Artırmaya Yönelik Bir Algoritma Çiğdem İNAN, M. Fatih AKAY Çukurova Üniversitesi Bilgisayar.
Algoritmalar DERS 3 Böl ve Fethet(Divide and Conquer) İkili arama
Algoritmalar Ders 14 En Kısa Yollar II Bellman-Ford algoritması
Doğruların doğrultuları
4 KARE.
En Küçük Yol Ağacı (Minimum Spanning Tree)
BİRİNCİ DERECEDEN BİR BİLİNMEYENLİ DENKLEMLER
Çizge Teorisi, Dağıtık Algoritmalar ve Telsiz Duyarga Ağları
İçerik: Graflar Tanım Gösterim Dolaşma Algoritmaları
MIT503 Veri Yapıları ve algoritmalar Sıralama algoritmaları
Problem Çözme Ve Problem Çözme Stratejileri Ödevi Cihan GÖÇ
PARAMETRİK VE HEDEF PROGRAMLAMA
MIT503 Veri Yapıları ve algoritmalar Veri ağaçları
1.Dereceden 1 Bilinmeyenli Denklemler
Tam sayılarda bölme ve çarpma işlemi
GRAF TEORİSİ Ders 1 TEMEL KAVRAMLAR.
8 ? E K S İ L E N EKSİLEN _ 5 5 ÇIKAN FARK(KALAN) 8.
Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi
İKİNCİ DERECEDEN FONKSİYONLAR ve GRAFİKLER
DERS 3 DETERMİNANTLAR ve CRAMER YÖNTEMİ
DENKLEMLER. DENKLEMLER ÜNİTE BAŞLIĞI X kimdir neye denir,neden gereksinim duyulmuştur.Bilinmeyeni denklem kurmada kullanırız.Bilinmeyen problemlerde.
DOĞAL SAYILAR VE TAM SAYILAR
Problem Yaklaşım Temelleri, Algoritma ve Akış Şeması
SÜLEYMAN DEMİREL ÜNİVERSİTESİ TEKNOLOJİ FAKÜLTESİ
KAREKÖKLÜ SAYILAR KAREKÖKLÜ SAYILAR √.
Toplama Yapalım Hikmet Sırma 1-A sınıfı.
TAM SAYILAR Pınar AKGÖZ.
T M SAYI AR Z.
SONLU ELEMANLARA GİRİŞ DERSİ
Çizge Algoritmaları Ders 2.
Problem Yaklaşım Temelleri, Algoritma ve Akış Şeması
Floyd Algoritması Floyd Algoritması Dijkstra algoritmasının daha genel halidir. Çünkü şebekedeki herhangi iki düğüm arasındaki en kısa yolu belirler. Algoritma,
AB-2016 / Kablosuz Duyarga Ağlarında Yönlendirme Algoritmalarının Performans Analizi Yard. Doc Coşkun Atay Sinem Seçgin.
Bölüm10 İteratif İyileştirme Copyright © 2007 Pearson Addison-Wesley. All rights reserved.
Dinamik programlama ve Açgözlü algoritma
GrafTeorisine İlişkin Bazı Tanımlar
Tanım: ( Temel Çevreler Kümesi)
1-a) Şekildeki devrede 5 Gauss yüzeyi belirleyin ve KAY yazın.
Lineer cebrin temel teoremi-kısım 1
Algoritmalar II Ders 8 Açgözlü Algoritmalar.
Algoritmalar II Ders 7 Açgözlü Algoritmalar.
1-a) Şekildeki devrede 5 Gauss yüzeyi belirleyin ve KAY yazın.
GrafTeorisine İlişkin Bazı Tanımlar
MAKSİMUM AKİŞ PROBLEMİ
Algoritmalar II Ders 17 İteratif İyileştirme Yöntemi.
G grafının aşağıdaki özellikleri sağlayan Ga alt grafına çevre denir:
İleri Algoritma Analizi
Sunum transkripti:

MIT503 Veri Yapıları ve algoritmalar En önemli graf problemleri Y. Doç. Yuriy Mishchenko

En önemli graf problemleri Ders planı En kısa patika problemi Minimum yayılan ağaç problemi Maximal akım problemi

Graf Temelleri Graflar, genel ilişkileri temsil etmek için kullanılır Birkaç nesne (düğüm) ve onlar arasında ilişkiler (bağlantılar) var İlişkilere sayısal değerler atanabilir (ilişkilerin ağırlıkları) ve yönler atanabilir (ilişkilerin yönleri) 0.5 0.25 0.33 0.77 0.15 0.17 1.0

Graf Arama Problemi Temel graf problemi – graf arama/incelenmesi: Bağlantıları takip ederek belirli bir düğüm bulmak Belirli bir düğümden diğer düğümlerin uzaklıklarını bulmak Grafın yapısını incelemek (örneğin bağlı parçaları) Derinlikte ve enine graf arama algoritmalar veya stratejileri

Graflar İleri Sorunları En kısa patika problemi Bağlantı ağırlıklarına göre (örneğin bağlantıların masraflarına göre) iki düğüm arasında asgari ağırlıkta olan (örneğin en üçüz) patikayı bulmak Minimum yayılan ağaç problemi Bağlantı ağırlıklarına göre (örneğin masraflar) grafın tüm elemanlarını içeren ve asgari ağırlıkta olan yayılan ağaç bulmak Maximal akış problemi Bağlantı ağırlıklarına göre (bağlantı aktarımlarına göre) bir ağı geçen azami akış sistemi bulmak Maximal kesim Bağlantı ağırlıklarına göre (bağlantı güçlerine göre) grafın iki parçaya optimal bölme bulmak

En kısa patika problemi En kısa patika, ileri graf problemlerinden en yaygın karşılaşılananlardan biridir: Bir ağırlıklı graf var, örneğin bir üretim sürecinin mümkün adımları belirten ve ağırlıklar ilişkili masraflarını belirten bir graf Bir başlangıç ve sonuç noktasını bağlayan asgari ağırlıkta olan, yani en ücüz, patikayı bulmak lazım (patikanın ağırlığı, içeren bağlantı ağırlıkların toplamı demektir)

En kısa patika problemi Uygulamaları: İki konum arasında en uygun yol bulmak (harita ve yol tarifleri) Bir süreç için en verimli işlem sırası bulmak Üretim tesisinin en uygun yerleşimi bulmak Bir projede en verimli adım sırası bulmak İnternet trafiği yönlendirmek Birçok örnek kolayca bulunabilir

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 “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 “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 “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 yol daha “kısa” 1.0 0.33 0.15

En kısa patika problemi Note: Ağırlıksız grafta enine arama bu işi zaten yapar Ağırlıklı graflarda çok zor problemdir Bütün mümkün yolları incelersek, 4 olanaklı 10 adım için 410=1,000,000 olanak incelenmesi gerekiyor Naif adımlar da zararlı olabilir

En kısa patika problemi Naif ilk adım 3 0.5 1.5 1 Doğru adım En kısa yol

En kısa patika algoritması En kısa patika problemi çözmek için “Dijkstra” algoritması kullanılır Dijkstra algoritması, matematikçi Edsger Dijkstra tarafında 1959 da keşfedilmiştir

En kısa patika algoritması Ana fikri: Başlangıç düğümünde başlayın Düğümün komşularını inceleyip başlangıçtan onların mesafelerini hesaplayın Komşuların mesafelerini hesaplamak için bu formulü kullanın: önceki düğümün başlangıçtan uzaklığı D ve o düğüm ve komşu arasında ağırlık d ise, komşunun başlangıçtan uzaklığı en çok (D+d) dir

En kısa patika algoritması x 0.5 0.2 0.3 0.8 0.1 1.0

En kısa patika algoritması 0.2 1.0 x 0.5 0.3 0.8 0.1 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.2 1.0 x 0.5 2.0 0.3 0.8 0.1 Bu nesneyi geçtik 2. Birinci “komşu” nesnesinin komşuları incelenir

En kısa patika algoritması 0.2 1.0 0.5 x 2.0 0.4 0.3 0.8 0.1 Bu nesneyi geçtik şimdi 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.2 1.0 0.5 2.0 0.4 0.3 0.8 0.1 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.2 1.0 0.5 2.0 0.4 0.3 0.8 0.1 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.2 1.0 0.5 2.0 0.4 0.3 0.8 0.1 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.2 1.0 0.5 2.0 0.4 0.3 0.8 0.1 7. Son nesne için onun komşusu incelenir

En kısa patika algoritması 0.2 1.0 0.5 2.0 0.4 0.3 0.8 0.1 En kısa patikayi GERİ giderken buluruz

Dıjkstra algoritmasının sözde kodu 1 function Dijkstra(Graf, başlangıç): 2 for v, Graf’ın bütün elemanları için // başlama 3 uzaklık(v):= nan ; 4 önce_eleman(v) := nan ; 5 end for ; 6 Q := (Graf’ın eleman kümesi) ; 7 uzaklık(başlangıç):= 0 ; 8 while Q boş değil 9 u := Q’nun en küçük uzaklığa sahip olan elemanı ; 10 Q’dan u çıkartın ; 11 if u’nun uzaklığı = nan 12 devam edin ; // bu eleman başlangıçtan sağlanamaz, faklı bağlı parçası 13 else 14 for v , u’nun bütün komşuları için 15 d := u’nun uzaklığı + u’den→v’ye ağırlığı; 16 if d < uzaklık(v): // min (u,v,a) bulma 17 uzaklık(v):= d ; 18 önce_eleman(v):= u ; 19 end if ; 20 end for ; 21 end if ; 21 end while ; 22 end Dijkstra ;

Algoritma analizi En kısa yol bulma ne kadar zaman gerekir? Bütün adımlarda bütün grafın elemanlarının incelenmesi gerekebilir, demek ki grafın N elemanı varsa, en kısa yol bulma O(N2)’a kadar zaman gerekebilir Dijkstra algoritması, O(N2) algoritmadır

Minimum yayılan ağaç problemi Bir ağırlıklı graf var, örneğin bağlantılar birkaç konum arasında mümkün yollar belirtir ve ağırlıklar yolların fiyatlarını belirtir Yayılan ağaç, bütün grafın elemanları bağlayan grafın altağacıtır Bu ağacın toplam ağırlığı içindeki bağlantıların toplam ağırlığıdır; örneğin yolların toplam fiyatı Asgari toplam ağırlıkta olan yayılan ağaca minimum yayılan ağaç denir

Minimum yayılan ağaç problemi Uygulamalar: Bir bölgenin elektrik şebeke, yanı santralları ve tüketicileri bağlayan en düşük masraflı elektrik şebeke Üreticinin veya ticari şirketin tedarik ağı Bir şirketin şübeler ağı

Minimum yayılan ağaç problemi Yayılan ağaçlar çok olabilir: Derinlikte arama yayılan agacı Enine arama yayılan agacı Minimum yayılan ağaçların birkaç tanesi de olabilir, yani tek çözüm yok Minimum yayılan ağaç bulmak için Kruskal ve Prim algoritmaları kullanılır

Minimum yayılan ağaç algoritması Prim algoritması, Vojteç Jarnik (1930) ve sonra Robert Prim (1957) tarafından keşfedilmiştir

Minimum yayılan ağaç algoritması Prim algoritmasının ana fikri: Herhangi bir eleman ile başlıyoruz; bu noktada tek elemanlı yayılan agacı kuruyoruz Bütün adımlarda önce oluşturulan yayılan ağaca asgari ağırlıkta bitişik bağlantı ekleniyor Sonuna kadar

Minimum yayılan ağaç algoritması Prim algoritması açgözlü algoritmanın örneği, yani tüm adımlarda şimdilik en iyi görünen bağlantı eklenir

Minimum yayılan ağaç algoritması 0.5 0.2 0.3 0.8 0.1 1.0 1. Başlangıç nesnesi

Minimum yayılan ağaç algoritması 0.5 0.2 0.3 0.8 0.1 1.0 2. Asgari ağırlıkta bitişik kenarı eklenir

Minimum yayılan ağaç algoritması 0.5 0.2 0.3 0.8 0.1 1.0 3. Asgari ağırlıkta bitişik kenarı eklenir

Minimum yayılan ağaç algoritması 0.5 0.2 0.3 0.8 0.1 1.0 4. Asgari ağırlıkta bitişik kenarı eklenir

Minimum yayılan ağaç algoritması 0.5 0.2 0.3 0.8 0.1 1.0 5. Asgari ağırlıkta bitişik kenarı eklenir

Minimum yayılan ağaç algoritması 0.5 0.2 0.3 0.8 0.1 1.0 6. Asgari ağırlıkta bitişik kenarı eklenir

Minimum yayılan ağaç algoritması 0.5 0.2 0.3 0.8 0.1 1.0 7. Asgari ağırlıkta bitişik kenarı eklenir

Minimum yayılan ağaç algoritması 0.5 0.2 0.3 0.8 0.1 1.0 8. Asgari ağırlıkta bitişik kenarı eklenir

Minimum yayılan ağaç algoritması 0.5 0.2 0.3 0.8 0.1 1.0 Asgari yayılan ağaç

Minimum yayılan ağaç algoritması 0.5 0.2 0.3 0.8 0.1 1.0 Birkaç minimum yayılan ağaç da olmayabilir

Minimum yayılan ağaç algoritması 0.5 0.2 0.3 0.8 0.1 1.0 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 O(N2) algoritması

Maximum akış problemi Maximum akış problemi; Bir ağırlıklı akış ağı var, örneğin şehir yol ağı, elektrik şebeke ağı, bilgisayar ağı, vb Ağırlıklar, bağlantının azami akışı belirler Akışın başlangıç (ilk) ve sonuç (son) noktaları var Başlangıçtan sonuca giden toplam akışı olarak en yüksek akış sistemi bulmak gerekmektedir

Maximum akış problemi Uygulamalar: Bir üretim süreci için maximum çıktısını sağlayan yöntemi Yok sisteminin iyileştirilmesi Elektrik devrelerinin tasarımı Bütün graf elemanlarını içeren asgari fiyatta olan yolların kümesini bulma Bir başlangıç noktasından bir sonuç noktasına giden azami bağımsız yolların kümesi bulma VB

Akış grafının temelleri Bağlantının kapasitesi c(u,v) Başlangıç “b” 0.5 0.3 Gerçekleştirilmiş bağlantının akışı f(u,v) Sonuç “s”

Akış graflarının temelleri Bağlantının kapasitesi c(u,v) Başlangıç “b” 0.5 0.5 0.2 0.3 0.8 0.1 1.0 0.2 0.3 Gerçekleştirilmiş bağlantının akışı f(u,v) Koşullar: Mümkün akış f(u,v)≤c(u,v) Tüm düğümlerin gelen ve çıkan akışları eşittir Sonuç “s”

Akış graflarının temelleri Bütün bağlantılar için iki özellik var; c(u,v), u elemandan v elemana azami kapasitesi veya akış f(u,v), u elemandan v elemana gerçek akış

Akış graflarının temelleri Akışın uygun olması, gerçek akışların ilişkili bağlantıların kapasitelerinden küçük olması demektir, f(u,v)≤c(u,v) Bütün düğümlere gelen ve çıkan akışlar eşit olmalıdır, (gelen)∑f(u,v)=(çıkan)∑f(u,v)

Akış graflarının temelleri Maximum akış matematiksel problemi Başlangıçtan yada sonuca azami akışı Gerçek akışlar kapasitelerden küçükler Gelen ve çıkan akışlar eş

Akış graflarının temelleri Maximum akış matematiksel problemi Bu problemin şekli standart “lineer program” optimizasyon probleminin şekli ve standart genel lineer optimizasyon yöntemleri kullanarak çözülebilir

Maximum akış algoritması Maximum akış özel (daha verimli) algoritması Ford-Fulkerson algoritmasıdır (1956) (bağlantıların kapasiteleri tamsayısal olmalı)

Maximum akış algoritması Ana fikri: İlk önce akışların hepsi sıfıra konulur, f(u,v)=0 Matematiksel olarak f(u,v)=-f(v,u) olarak kullanıyoruz (yani ters yönde negatif akış var) Bir gerçek akışların düzenlenmesi için kalan kapasiteler niceliği öyle tanımlarız: kalan(u,v)=c(u,v)-f(u,v) Başlangıçtan sonuca giden pozitif kalan kapasitede olan patika bulunabilirse, bu patikanın min kalan akışı patikadaki akışlara ekleniyor VB

Maximum akış algoritması Ana fikri, matematiksel formülleştirilmesi: başlangıçtan sonuca giden sadece pozitif kalan kapasiteleri içeren (yani “kalan(u,v)>0”) herhangi patika için Bu patika için kalan kapasitesi kalan=min(cf(u,v)) Bu patikadaki bağlantılar bu şekilde güncelleştiriliyor (bağlantının patikada yönüne göre) f(u,v):=f(u,v)+kalan f(v,u):=f(v,u)-kalan

Maximum akış algoritması {kapasite=5|akış=0(kalan=5;ters kalan=5)} 2|0(2;2) 3|0(3;3) 5|0(5;5) 8|0(8;8) 1|0(1;1) 10|0(10;10)

Maximum akış algoritması Pozitif akış patikası, min kalan kapasite: cp=2 5|0(5;5) 2|0(2;2) 3|0(3;3) 8|0 (8;8) 1|0 (1;1) 3|0 (3;3) 10|0(10;10) 10|0 (10;10) 2|0;(2;2) En düşük kapasite

Maximum akış algoritması Bu bağlantıları güncelleştirilir 5|2(3;7) 2|0(2;2) 3|0(3;3) 5|0(5;5) 8|0(8;8) 1|0(1;1) 3|2(1;5) 10|0(10;10) 2|2(0;4) Akışları güncelleştiriyoruz f(u,v):=f(u,v)+cp f(v,u):=f(v,u)-cp Önce: 3|0(3;3)

Maximum akış algoritması Yeni pozitif akış patikası, cp=1 5|2(3;7) 2|0(2;2) 3|0(3;3) 5|0(5;5) 8|0(8;8) 1|0(1;1) 3|2(1;5) 10|0(10;10) 2|2(0;4) Asgari kapasite Geri geçilen bağlantılarda ters kapasite kullanılır

Maximum akış algoritması 5|2(3;7) 2|0(2;2) 3|0(3;3) 5|0(5;5) 8|1(7;9) 1|1(0;2) 3|2(1;5) 10|1(9;11) 2|2(0;4) 3|1(2;4) Akışları güncelleştiriyoruz f(u,v):=f(u,v)+cp ... Önce: 3|2(1;5) Geri giden bağlantılar ters yönde değiştirilir

Maximum akış algoritması Yeni pozitif akış patikası, cp=1 5|2(3;7) 2|0(2;2) 3|0(3;3) 5|0(5;5) 8|1(7;9) 1|1(0;2) 3|2(1;5) 10|1(9;11) 2|2(0;4) 3|1(2;4) Asgari kapasite

Maximum akış algoritması 5|3(2;8) 2|0(2;2) 3|0(3;3) 5|1(4;6) 8|0(8;8) 1|1(0;2) 3|3(0;6) 10|1(9;11) 2|2(0;4) 3|2(2;4) Akışları güncelleştiriyoruz f(u,v):=f(u,v)+cp ...

Maximum akış algoritması Yeni pozitif akış patikası, cp=2 5|3(2;8) 2|0(2;2) 3|0(3;3) 5|1(4;6) 8|0(8;8) 1|1(0;2) 3|3(0;6) 10|1(9;11) 2|2(0;4) 3|2(2;4) Asgari kapasite

Maximum akış algoritması 5|3(2;8) 2|2(0;4) 3|0(3;3) 5|1(4;6) 8|0(8;8) 1|1(0;2) 3|3(0;6) 10|1(9;11) 3|2(2;4) Akışları güncelleştiriyoruz f(u,v):=f(u,v)+cp ...

Maximum akış algoritması 5|3(2;8) 2|2(0;4) 3|0(3;3) 5|1(4;6) 8|0(8;8) 1|1(0;2) 3|3(0;6) 10|1(9;11) 3|2(2;4) Kalan pozitif akış patikası yok – Bütün bağlantılar sıfır kalan kapasitededir (dolu)

Maximum akış algoritması {kapasite=5|gerçek akış=3} 2|2 3|0 5|1 8|0 1|1 3|3 10|1 3|2 Maximum akış = 6

Maximum akış algoritması Farklı maximum akışlar olabilir

Maximum akış algoritması 5/1 2/2 3/0 8/0 1/1 3/3 10/3 2/0 Farklı bir maximum akış

Maximum akış algoritması Ford-Fulkerson algoritması O(Nf) zaman algoritması, burada f –bağlantıların maximum akış kapasitesi ve N grafdaki elemanların sayısıdır