BMB204. Veri Yapıları Ders 11. Çizgeler (Graph) Erdinç Uzun NKÜ Çorlu Mühendislik Fakültesi Bilgisayar Mühendisliği Bölümü

Benzer belgeler
10.Hafta Minimum kapsayan ağaçlar Minimum spanning trees (MST)

Çizgeler (Graphs) Doç. Dr. Aybars UĞUR

VERİ YAPILARI. GRAPH LAR Düzce Üniversitesi Teknoloji Fakültesi ÖĞR.GÖR.GÜNAY TEMÜR 1

GRAPH LAR Düzce Üniversitesi Teknoloji Fakültesi VERİ YAPILARI. Bilgisayar Mühendisliği ÖĞR.GÖR.GÜNAY TEMÜR 1

Algoritma Geliştirme ve Veri Yapıları 10 Graf Veri Modeli. Mustafa Kemal Üniversitesi

YZM 2116 Veri Yapıları

BMT 206 Ayrık Matematik. Yük. Müh. Köksal GÜNDOĞDU 1

YZM ALGORİTMA ANALİZİ VE TASARIM DERS#6: AZALT VE FETHET YÖNTEMİ

BÖLÜM III: Şebeke Modelleri. Şebeke Kavramları. Şebeke Kavramları. Şebeke Kavramları. Yönlü Şebeke (Directed Network) Dal / ok

11.Hafta En kısa yollar I-II-III Devam. Negatif Ağırlıklı En Kısa Yollar Doğruluk Çözümleme

Graflar bilgi parçaları arasındaki ilişkileri gösterirler.

YZM ALGORİTMA ANALİZİ VE TASARIM DERS#9: AÇGÖZLÜ ALGORİTMALAR

Graf Veri Modeli. Düğümler kümesi. Kenarlar kümesi

köşe (vertex) kenar (edg d e)

Azalt ve Fethet Algoritmaları

Ağaç (Tree) Veri Modeli

ÇİZGE KURAMI KESİKLİ MATEMATİKSEL YAPILAR GÜZ

Algoritmalar. Çizge Algoritmaları. Bahar 2017 Doç. Dr. Suat Özdemir 1

MAT223 AYRIK MATEMATİK

Manisa Celal Bayar Üniversitesi Yazılım Mühendisliği Bölümü YZM Veri Yapıları Dersi. Proje#2

BMB204. Veri Yapıları Ders 9. B+ Ağacı, Hash, Heap. Erdinç Uzun NKÜ Çorlu Mühendislik Fakültesi Bilgisayar Mühendisliği Bölümü

Graflar - Çizgeler. Ders 9. Graflar ve Tanımlar

BLM-431 YAPAY ZEKA. Ders-4 Bilgisiz Arama Yöntemleri. Yrd. Doç. Dr. Ümit ATİLA

HACETTEPE ÜNİVERSİTESİ BAHAR DÖNEMİ

Genel Graf Üzerinde Mutlak 1-merkez

YZM YAPAY ZEKA DERS#4: BİLGİSİZ ARAMA YÖNTEMLERİ

İçerik: Graflar. Tanım. Gösterim. Dolaşma Algoritmaları. Yönlü ve yönsüz graflar Ağırlıklı graflar. Komşuluk Matrisi Komşuluk Listesi

9.Hafta Veri sıkıştırma ve Aç gözlü algoritmalar

HACETTEPE ÜNİVERSİTESİ BAHAR DÖNEMİ

BIP116-H14-1 BTP104-H014-1

Çizge teorisi. 1736, Euler, Königsberg Köprüleri problemini çözdü

Max - Min Heap Tree (Max ve Min Yığıt Ağaçları) Veri Yapıları ve Algoritmalar 2 - Mustafa EGE Ders Notları

YZM 2116 Veri Yapıları

BLM-431 YAPAY ZEKA. Ders-5 Bilgili Arama Yöntemleri. Yrd. Doç. Dr. Ümit ATİLA

BLM-431 YAPAY ZEKA. Ders-3 Durum Uzayında Arama. Yrd. Doç. Dr. Ümit ATİLA

Algoritma Geliştirme ve Veri Yapıları 9 Ağaç Veri Modeli ve Uygulaması. Mustafa Kemal Üniversitesi

MAT223 AYRIK MATEMATİK

Kümeler arası. Küme içi. uzaklıklar. maksimize edilir. minimize edilir

A GRUBU Noktaları adlandırılmış K 6 tam çizgesinin tam olarak 3 noktalı kaç tane alt çizgesi vardır? A) 9 B) 20 C) 24 D) 60 E) 160

Algoritmalar. Ders 14 En Kısa Yollar II Bellman-Ford algoritması Floyd-Warshall algoritması

VERİ YAPILARI VE PROGRAMLAMA

MAT223 AYRIK MATEMATİK

Yrd. Doç. Dr. Caner ÖZCAN

YZM 2116 Veri Yapıları

Algoritma Geliştirme ve Veri Yapıları 2 Veri Modelleri. Mustafa Kemal Üniversitesi

YZM 2116 Veri Yapıları

VERİ YAPILARI DERS NOTLARI BÖLÜM 1 GİRİŞ. Yard. Doç. Dr. Deniz KILINÇ

AĞAÇLAR. Doç. Dr. Aybars UĞUR

Lisans. Ayrık Matematik Çizgeler. Konular. Tanım çizge: G = (V, E) Tanım. c T. Uyar, A. Yayımlı, E. Harmancı

Temel Kavramlar. (r) Sıfırdan farklı kompleks sayılar kümesi: C. (i) Rasyonel sayılar kümesi: Q = { a b

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

DGridSim Gerçek Zamanlı Veri Grid Simülatörü. Gerçek-Zamanlı Veri Dağıtımı Dokümanı v

Algoritmalara Giriş 6.046J/18.401J

Algoritmalara Giriş. Prof. Erik Demaine. November 16, 2005 Copyright by Erik D. Demaine and Charles E. Leiserson L18.1

SORULAR. 2. Noktaları adlandırılmamış 6 noktalı kaç ağaç vardır? Çizerek cevaplayınız.

MAT223 AYRIK MATEMATİK

Yapay Zekada Problem Çözme

SINAV YÖNERGESİ. Numarası : CEVAP. Adı Soyadı : ANAHTARI A) 512 B) 513 C) 256 D) 1024 E) 1025 A) 252 B) 256 C) 3024 D) 126 E) =?

VERİ MADENCİLİĞİ (Karar Ağaçları ile Sınıflandırma) Yrd.Doç.Dr. Kadriye ERGÜN

ENDÜSTRİ MÜHENDİSLİĞİ BÖLÜM BAŞKANLIĞI DERS TANITIM BİLGİLERİ

DOSYA ORGANİZASYONU. Ağaç Yapıları ÖZLEM AYDIN TRAKYA ÜNİVERSİTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ

Arama Algoritmaları ile Gerçek Dünya Örnekleri

YZM YAPAY ZEKA DERS#6: REKABET ORTAMINDA ARAMA

YZM VERİ YAPILARI DERS#9: HASH FONKSİYONLARI

YZM 2116 Veri Yapıları

BBM Discrete Structures: Final Exam Date: , Time: 15:00-17:00

Veri Yapıları Laboratuvarı

Mühendislik Mekaniği Statik. Yrd.Doç.Dr. Akın Ataş

Şimdi de [ ] vektörünün ile gösterilen boyu veya büyüklüğü Pisagor. teoreminini iki kere kullanarak

Bölüm 7: Kilitlenme (Deadlocks)

Veri Yapıları. Ağaçlar

Algoritmalar. Arama Problemi ve Analizi. Bahar 2016 Doç. Dr. Suat Özdemir 1

ÇİZGİ KÜMELERİ (GRAPHS)

Veri Yapıları. Amaçlar: Temel Veri Yapılarını Tanımlamalı Veri Yapılarını Veri Modeli ve Türlerini Öğreneceksiniz. İçindekiler:

Algoritma Geliştirme ve Veri Yapıları 1 Temel Algoritma Kavramları. Mustafa Kemal Üniversitesi

ALGORİTMA VE PROGRAMLAMA I DERS NOTU#8

ARAÇ ROTALARININ EN KISA YOL ALGORİTMALARI KULLANILARAK BELİRLENMESİ VE.NET ORTAMINDA SİMÜLASYONU

AĞAÇLAR TREES. Doç. Dr. Aybars UĞUR

BIL222 Veri Yapıları ve Algoritmalar

Ders 4: Diziler (Arrays( Arrays) barisgokce.com

VERİ YAPILARI LİSTELER. Yrd. Doç. Dr. Murat GÖK Bilgisayar Mühendisliği Bölümü YALOVA ÜNİVERSİTESİ

Olimpiyat Soruları. sonuçları tekrar fonksiyonda yerine koyup çıkan tüm sonuçları toplayan program (iterasyon sayısı girilecek)

Sevdiğim Birkaç Soru

BİLGİSAYAR PROGRAMLAMA. Algoritma ve Akış Şemaları

ALGORİTMA VE PROGRAMLAMA I

A GRUBU Her bir yüzü düzgün beşgen olan düzgün 12-yüzlünün kaç ayrıtı vardır? A) 30 B) 24 C) 12 D) 36 E) 48

ÜNİTE 1: TEMEL KAVRAMLAR

Anadolu Üniversitesi Endüstri Mühendisliği Bölümü İST328 Yöneylem Araştırması 2 Dersi Bahar Dönemi. Hazırlayan: Doç. Dr.

Yrd. Doç. Dr. A. Burak İNNER Bilgisayar Mühendisliği

EŞİTLİK KISITLI TÜREVLİ YÖNTEMLER

KARAKTER DİZGİLERİ, BAĞINTILAR, FONKSİYONLAR KESİKLİ MATEMATİKSEL YAPILAR

ELN1002 BİLGİSAYAR PROGRAMLAMA 2

Algoritmalar ve Karmaşıklık

BULANIK MANTIK VE SİSTEMLERİ BAHAR DÖNEMİ ÖDEV 1. Müslüm ÖZTÜRK Bilişim Teknolojileri Mühendisliği ABD Doktora Programı

Week 9: Trees 1. TREE KAVRAMI 3. İKİLİ AĞAÇ DİZİLİMİ 4. İKİLİ ARAMA AĞACI 2. İKİLİ AĞAÇ VE SUNUMU > =

Algoritmalar. Heap Sort. Bahar 2017 Doç. Dr. Suat Özdemir 1

Çanakkale Onsekiz Mart Üniversitesi. Bilgisayar Mühendisliği Bölümü

Algoritma ve Akış Diyagramları

Algoritma ve Akış Diyagramları

EM302 Yöneylem Araştırması 2. Dr. Özgür Kabak

Transkript:

BMB204. Veri Yapıları Ders 11. Çizgeler (Graph) Erdinç Uzun NKÜ Çorlu Mühendislik Fakültesi Bilgisayar Mühendisliği Bölümü

Dersin Planı Çizgeler Çizge Tanım Çeşitleri Çizge Üzerinde Arama Önce derinliğine arama (depth first search) Önce genişliğine arama (breadth first search) En Kısa Yol Problemi (Shortest Path) Dijkstra Algoritması Bellman Ford Algoritması Floyd-Warshall Algoritması En Küçük Yol Ağacı (Minimum Spanning Tree) Kruskal ın Algoritması Prim in Algoritması

Çizgeler Graphs Çizge kuramının başlangıcı Königsberg in 7 köprüsü (Kaliningrad / Rusya) problemine dayanır. 1736 da Leonhard Euler ın söz konusu probleme ilişkin kullandığı sembol ve çizimler çizge kuramına ilişkin başlangıç olarak kabul edilir.

Çizgeler Problem Pregel nehri üzerinde iki ada birbirine bir köprü ile, adalardan biri her iki kıyıya ikişer köprü, diğeri de her iki kıyıya birer köprü ile bağlıdır. Her hangi bir kara parçasında başlayan ve her köprüden bir kez geçerek başlangıç noktasına dönülen bir yürüyüş (walking) var mıdır?

Çizgeler Problem Euler kara parçalarını düğüm, köprüleri de kenar kabul eden bir çizge elde etti (Notasyon/çizim farklılığı). Söz konusu yürüyüşün ancak her düğümün derecesinin çift olması durumunda yapılabileceğini gösterdi.

Çizge Tanım G çizgesi boş olmayan iki sonlu (finite) kümeden meydana gelir. G = (V,E) biçiminde sembolize edilir. V, düğümler (vertex-node); E, kenarlar (edge-arc) kümesidir. Yönsüz çizgede kenarları temsil eden düğüm ikilileri sınırsızdır. Alışageldiğimiz parantez kullanılarak (v0, v1) (v1,v0) aynı kenarı gösterir. Yönlü çizgede ise (directed graph - digraph) ise <v0, v1> ve <v1,v0> iki ayrı kenarı gösterir (<tail,head>: tail, okun başladığı; head ise sivri ucunun bulunduğu taraftır). 6 düğüm ve 7 kenardan oluşan bir graph

Çizge Örnekler

Nerelerde kulllanılır. Çizgelerin çok geniş bir alanda kullanımı söz konusudur. Elektrik devrelerinin analizi, proje planlama, kimyasal bileşenleri tanıma Bilgisayar bilimlerinde; shortest path (en kısa yol), connected graph (birleşik çizge), minimum spanning tree, activity network, trees (ağaçlar), sorting (sıralama), finite automoto (sonlu özdevinirler), networks (ağla ilgili birçok problem), flows in transport network (akış, taşıma), max flow ( kaynaktan hedefe en fazla petrol/su taşıma problemi).

Terminoloji Komşu düğümler: (v0,v1) kenarı yönsüz çizgede bir kenar ise v0 ve v1 düğümlerine komşu düğümler (adjacent) adı verilir. Alt çizge: G çizgesi, G çizgesinin alt çizgesi ise V(G ) V(G) ve E(G ) E(G) olur.

Terminoloji Yol: Yönsüz bir çizgede vp den vq ya olan bir yol (path) (vp, vi1), (vi1, vi2),, (vin, vq) nun kenar olduğu vp, vi1, vi2,, vin, vq düğümler dizisidir. Eğer yönsüz bir G çizgesinde v0 dan v1 e bir yol var ise v0 ve v1 düğümleri bitişik (connected) olarak isimlendirilir. G çizgesinde tüm farklı düğüm ikilileri (vi, vj) (i j) arasında bir yol var ise G çizgesinin bitişik olduğu söylenebilir. Bir düğümü uç kabul eden düğümlerin sayısı söz konusu düğümün derecesini meydana getirir. G2 çizgesinde 0 düğümünün derecesi 2 dir. G1 de d(v1)=3, G2 de d(v4)=1 dir. Yönlü çizgede ise düğümün derecesi giriş (in-degree) ve çıkış (out-degree) değerlerinin toplamıdır. G3 çizgesinde d=1+1=2 bulunur.

Teorem Teorem: Eğer bir G çizgesinde n adet düğüm, e adet kenar var ise düğümlerin derecesi toplamı, kenarların sayısının iki katına eşittir: İspatı: Her kenarın, kendi uçlarında bulunan düğümlerin toplam derecelerine yaptığı katkı 2 dir. Hem basit olan, hem de basit olmayan çizgelerde bu geçerlidir. Basit çizge: İki düğümü birleştiren en fazla bir kenar olabilen ve düğümleri kendine döngü (self-loop) içermeyen çizgedir.

Çizge Tanımı Çizge iki farklı şekilde bilgisayarda gösterim işlemi tanımlanabilir. Komşuluk Matrisi (Adjacency Matrix) * Komşuluk Listesi (Adjacency List) * Dizi ile Sıralı (Sequential) Gösterim Yönlü Çizgelerin Komşuluk Listesi (Orthogonal) Gösterimi Komşuluğun Çok Bağlaçlı Listeler ile Gösterimi (Adjacency Multilist)

Komşuluk Matrisi Adjacency Matrix G(V, E), n düğümlü bir çizge olsun. n x n boyutunda bir matris ile bir G çizgesi bellek ortamında gerçekleştirilebilir. Yönsüz bir çizgede matris simetrik olacağından dolayı bellek tasarrufu amacıyla alt yarı üçgen ya da üst yarı üçgen kullanmak yerinde olur. Her iki durumda da gerçekleştirimin bellek karmaşıklığı O(n2) olur.

Komşuluk Matrisi Adjacency Matrix

Komşuluk Matrisi Adjacency Matrix

Komşuluk Matrisi Adjacency Matrix Derece bulma: Matrisler gerçekleştirimde bir düğümün derecesini bulmak için ilgili satır ya da sütundaki1 ler sayılmalıdır (O(n)). Eğer çizge yönlüyse satırdaki 1 ler out-degree, sütundakiler ise indegree değerini verir. Bu ikisinin toplamı düğümün derecesidir (O(2n)). Kenar sayısı bulma: Kenar sayısını bulmak için tüm matristeki 1 leri sayıp 2 ye böleriz (O(n2)). Yönsüz çizgede matris simetrik olacağı için yarısına bakmamız yeterli olur, yine de karmaşıklık n2 düzeyindedir (O(n2/2) = O(n2)).

Komşuluk Matrisi Adjacency Matrix Ağırlık Çizge Ağırlıklı Çizge Her bir kenarın sisteme bir ağırlığın olduğu çizge şekline nedir. Mesela yol uzunlukları, ağ genişliği... 10 A B 20 30 5 D 15 C 50 E F A B C D E F A 10 5 B 20 C 30 50 D 15 E F

Komşuluk Listesi Adjacency List Çizgeyi matris olarak gerçekleştirmek yerine matristeki her satır için liste veri yapısı tercih edilir. Bu yapının dezavantajı her kenar için 2 tane öğe kullanıyor olmamızdır.

Komşuluk Listesi Adjacency List

Komşuluk Listesi Adjacency List Kenar sayısı bulma: Bu yapıda (n düğüm, e kenar varsa) toplam kenarların sayısı bulmanın karmaşığı O(n+e) olacaktır. (Çizge kuramında karmaşıklık genellikle e ye bağlı verilir.) Listedeki tüm kenarları sayıp 2 ye bölünce toplam kenar sayısını bulacağımızı Teorem 1 garanti eder.

Komşuluk Listesi Adjacency List Kenar sayısı bulma Yönsüz bir çizgede (Ör. G1) kenar sayısını daha hızlı bulmak için yapının sıralı olması avantajını kullanabiliriz. Listelerin başlarından itibaren kuyruk değeri baş değerinden küçük olan ((0, 1), (1, 2) gibi) kenarlara kadar sayıp, bu kenarları saymadan bir sonraki düğüme geçebiliriz. Böylece düğümlerin yarısını dolaşarak kenar sayısını bulabiliriz. Ama karmaşıklık yine de O(n+e) düzeyinde kalacaktır.

Komşuluk Listesi Adjacency List Kenar sayısı bulma Yönlü çizgelerde ise (Ör. G3) Anlatılan sıralı olma avantajı kullanılamaz. Çünkü <0,1> ve <1,0> kenarları birbirinden farklıdır. Bu yüzden tüm kenarlar sayılmalıdır.

Komşuluk Listesi Adjacency List Derece bulma: Yönsüz çizgede (Ör. G4) bir düğümün derecesini bulmak için ilgili başlıktaki (i. başlık) öğeleri saymak yeterli olacaktır. Yönlü çizgede ise (Ör. G3) düğümün derecesi, gelen ve çıkan kenarların toplamıdır. Bu yapı, söz gelimi, 1 düğümünden kaç düğüme gidildiğini (outdegree) saymamıza olanak sağlar. Fakat 1 düğümüne kaç düğümden gelinebildiğini (in-degree) bulabilmek için listelerin tamamını dolaşmamız gerekecektir.öyleyse yönlü çizge için bu yapıyla beraber bu listenin tersini de tutmalıyız ki, hem gelen hem de çıkan dereceleri hızlıca bulabilelim. Eğer tutmazsak, dereceleri bulmak için listelerin hepsini dolaşmamız gerekecektir.

Komşuluk Listesi Adjacency List

Dizi ile Sıralı (Sequential) Gösterim Her düğümün komşuları bir liste gibi düşünülebilir. Dügüm[i], 0<=i<n değerleri i düğümüne komşu olan listelerin başlangıç adresini tutmak için kullanılır. Her kenarın düğüm dereceleri toplamına yaptığı katkının 2 olduğu hatırlanırsa toplam listeler için 2e adet düğümün yer alması gerekir. Düğüm[n] <- n+2e+1 olacaktır. i. düğüme komşu olan düğümler listesi düğüm[i],, düğüm[i+1], 0<=i<n indisli düğüm elemanlarıdır.

Dizi ile Sıralı (Sequential) Gösterim G4 çizgesinin örnek bir gerçekleştirimi şu şekildedir: tanımlanacak dizi: int dugum[n + 2*e +1] Ör 1: 0 nolu düğümün komşuları [0] da bulunan 9 dan (9 dâhil) [1] de bulunan 11 e (11 hariç) kadar, yani [9] ve [10] indislerinde bulunan düğümlerdir: 1, 2. Ör 2: 1 in komşuları [1]=11 ve [2]=[13] olduğu için [11]-[12] indislerinde yer alan 0 ve 3 tür. Ör 3: 7 nin tek komşusu ise [7] = 22 ve [8] = 23 olduğundan [22]-[22] indislerinde bulunan 6 nolu düğümdür.

Dizi ile Sıralı (Sequential) Gösterim Elbette bu dizinin içeriği, gerek verilerin geliş sırasına gerekse de programcının diziyi oluşturan yordamı yazış biçimine bağlı olarak farklı şekillerde oluşabilir. Listelerde bulunan 2e adet öğe alma dezavantajı bu yapıda yoktur. Fakat bu yapı da, komşuluk listesinin sağladığı avantajı, esnekliği sağlamaz.

Hangi gösterim şeklini kullanmalıyım!!! Depolamak ayrı konudur, o veri üzerinde çalışacak algoritmaların etkinliği ayrı konudur. Bu yapı için konuşacak olursak; aramada sorun yok, ama ekleme ve silme işlemlerinde esneklik sağlıyor mu? Hayır! Çok sayıda ekleme-silme işlemi için bu yapı verimli değildir. Arka plandaki problemi bilemediğimiz için Bu yapılar arasından şunu tercih ederiz. diyemiyoruz. Bu şekilde de gerçekleştirebiliriz. Örneğin bir ağdaki bilgisayarlar sabittir. Problem, onları tutmaksa bu yapı uygun olabilir.

Yönlü Çizgelerin Komşuluk Listesi (Orthogonal) Gösterimi Yönlü çizgeler için alternatif düğüm yapısı şu şekilde de olabilir.

Yönlü Çizgelerin Komşuluk Listesi (Orthogonal) Gösterimi Satır başlıkları ile sütun başlıkları aynı öğelerdir. Çizimi basitleştirmek için başlıklar ikişer kez çizildi. Baş için kolon bağı diye isimlendirdiğimiz gösterge, bir düğüme nereden geliş olduğunu gösteriyor. Kuyruk için satır bağı diye isimlendirdiğimiz gösterge ise bir düğümden nereye çıkış bulunduğunu gösteriyor. Görüldüğü gibi her bir kenar öğesi, iki ayrı listede yer alıyor. Aynı kenar için iki öğe almamız gerekmiyor, tek öğe almak yeterli oluyor.

Komşuluğun Çok Bağlaçlı Listeler ile Gösterimi (Adjacency Multilist) Bu gerçekleştirim türünde kenarları temel öğe olarak ele alıyoruz. Yani; (vi, vj) kenarı temel öğedir, bir kenar için yalnızca bir öğemiz olacaktır. Fakat bu öğe, kendisini meydana getiren ve uçları olan her iki düğümün (hem vi nin ve hem de vj nin) komşuluk listesinde yer almalıdır. Bir de herhangi bir kenar işlenmişse, üzerinden geçilmişse bu kenarın tekrar ele alınmasını önleyecek bir işarete gereksinim vardır. Dolayısıyla komşuluğun çok bağlaçlı liste ile gösteriminde kullanılacak veri yapısı işaret adı verilen ek bir veri alanını içermelidir.

Kenar Ekleme / Silme Komşu Matris ile Tanımlı Çizgeye Ağırlık 1 ise ekleme 0 ise silme geçerli.

Kenar Ekleme Komşu Liste ile tanımlı bir çizgeye Listeye Ekle ve Listeden sil için bağlı liste konusuna bakınız.

Çizge Üzerinde Temel İşlemler Ağaçlar üzerinde ağaç dolaşımları (kök önde, kök sonda, kök ortada, düzey düzey) sıkça kullanılan işlemler olduğu gibi çizgelerde de benzer bir durum vardır. Yönsüz bir çizge G=(V,E) verildiğinde bir V düğümünden olası tüm düğümlere [V(G)] uğramak (ziyaret etmek) isteyebiliriz. Bu işlemi iki farklı biçimde yapabiliriz. Önce derinliğine arama (depth first search) Önce genişliğine arama (breadth first search) Önce derinliğine arama kök önde dolaşıma, önce genişliğine arama ise ağaçta düzey düzey dolaşıma benzer. Her iki arama için çizgenin komşuluk listesi ile gerçekleştirildiğini kabul edeceğiz.

Önce Derinliğine Arama Depth First Search Başlangıç düğümü v ziyaret edilerek arama başlar. Ziyaret etme, ilgili düğümün veri alanının yazdırılması anlamındadır. Daha sonra v düğümünün komşuluk listesinden ziyaret edilmemiş bir w düğümü seçilir. Önce derinliğine arama, w düğümü üzerinde devam eder.

Önce Derinliğine Arama Depth First Search Dolaşma sırası: 0, 1, 3, 7, 4, 5, 2, 6. Dikkat edin! Dolaşım sonucunda bir ağaç oluştu. Bu ağaca bir kenar daha eklersek döngü oluşur ve ağaç, ağaç olmaktan çıkar.

Önce Derinliğine Arama Depth First Search Başlangıç düğümü: Bu çizgede eğer 0 düğümünden başlayarak önce derinliğine arama yaparsak sırasıyla 0, 1, 3, 7, 4, 5, 2, 6 düğümleri ziyaret edilecektir. Başlangıç düğümü 0 olmak zorunda değildir, elbette. Her hangi başka bir düğüm, 6, 4 vs. de olabilirdi. Biz olayı daha iyi görebilmek için 0 düğümünden başladık. Başka bir düğümden başlasaydık aynı öğeler farklı bir dizilişte karşımıza çıkacaktı.

Önce Derinliğine Arama Depth First Search Listenin sıraya etkisi: Çizgeyi bu şekilde komşuluk listesiyle gerçekleştirdiğimizi kabul ettik. Verilerin kullanılacak kuyruğun önüne mi, yoksa sonuna mı ekleneceği; listenin sıralı olup olmayacağı size kalmış Fakat bu listenin kurulma biçimi, dolaşma biçimini etkileyeceği için önemlidir. Farklı biçimde kurarsak farklı sırada dolaşırız. Örneğin 0 ın komşuluk listesi {1, 2} sırasında değil de {2, 1} sırasında olsaydı dolaşım sırası da değişecekti. Analiz: Önce derinliğine arama yordamı her düğüm için en fazla 1 kez işletilir. Eğer çizgede n tane düğüm, e tane kenar var ise algoritma karmaşıklığı O(e+n) olur. Kenar sayısının en fazla n*(n 1) / 2 olabileceğini belirtelim. Eğer G çizgesi komşuluk listesiyle değil de komşuluk matrisiyle gösterilseydi, v düğümüne komşu olan tüm düğümleri belirlemenin karmaşıklığı O(n) olacağından, arama yordamı n adet düğüm için O(n2) lik bir zamana gereksinim duyacaktı. Bu şekilde ise lineer zamanda dolaşabiliyoruz.

Önce Genişliğine Arama Breadth First Search Önce genişliğine arama v düğümünden başlar, bu düğüm ziyaret edilmiş olarak işaretlenir. Daha sonra v düğümünün komşuluk listesinde yer alan düğümlerin hepsi ziyaret edilir. Söz konusu listedekiler ziyaret edildikten sonra v nin komşuluk listesinde yer alan ilk düğüme komşu olan düğümlerden ziyaret edilmemiş olanların hepsi ziyaret edilir. Bu mantığı gerçekleştirmek için her bir düğümü ziyaret ettiğimizde düğümü kuyruğa, ilk atılanın ilk alınması gerektiğini söyleyen kuyruk yapısına, atarız. Bir düğüme ilişkin komşuluk listesinin sonuna gelindiğinde kuyruktan bir düğüm alır ve bu düğümün komşuluk listesinde ilerleriz. Bu şekilde devam edilerek ziyaret edilmemiş düğümler ziyaret edilir ve kuyruğa eklenir. Kuyruk boşaldığında aramaya son verilir. Nasıl ki, önce derinliğine aramada problemin doğası gereği yığıt kullanma zorunluluğu vardı; bunda da kuyruk kullanma zorunluluğu vardır. Anlatım tarzından kuyruk veri yapısı kullanılması gerektiği çıkıyor.

Önce Genişliğine Arama Breadth First Search

Önce Genişliğine Arama Breadth First Search Analiz: Her düğüm kuyruğa 1 kez ekleneceğinden dolayı while döngüsü n (düğüm sayısı) kez işletilir. Komşuluk listesi gösteriminde 2e adet kenar bilgisi olduğundan ötürü algoritma karmaşıklığı d0 + d1 + d2 + dn = 2e = O(e) olur. O(n+e) olur. Komşuluk matrisi kullanılsaydı O(n2) olacaktı. İlerisi: Önce derinliğine/genişliğine arama kavramları uzayı ağaca benzetip dolaşma terminolojisinde; Kesikli Matematik te min-max, b* search algorithm, branch and bound konularında geçer. Oyun problemlerinde de eğer Hamlelerin şunlar olabilir. diyorsan, genişliğine açıyorsun demektir.

En Kısa Yol Problemi (Shortest Path) En kısa yol problemi, elimizdeki bir çizgede belirtilen bir noktadan varılması gereken noktaya en kısa yolun bulunması problemi olarak özetlenebilir.

En Kısa Yol Problemi (Shortest Path) Şekildeki çizgede kenarlar bir ağ ortamında iki düğüm arasındaki trafik sıkışıklığını ifade etsin. Yapılan istatistikler sonucunda her hangi iki bilgisayar arası paket gönderiminin ne kadar geciktiği ayrı ayrı tespit edilmiştir. Bu verilere göre bir router nasıl yazılmalıdır?

En Kısa Yol Problemi (Shortest Path) Yol Uzunluğu: Yoldaki kenar sayısı Yol Maliyeti: Her kenardaki ağırlıkların/maliyetin toplamı. Not: ağırlıksız çizgelerde yol uzunluğu yol maliyetine eşittir. 2 A 3 4 7 D B 6 E 5 8 1 C y = {B, A, E, C, D} Uzunluk(y) = 4 Maliyet(y) = 2+3+1+5=11

En Kısa Yol Problemi (Shortest Path) Problem: G = (D, K) ağırlıksız grafında s başlangıç düğümü veriliyor ve s den diğer düğümlere giden en kısa yol nasıl bulunur. B A C D F Başlangıç H G E C den diğer düğümlere giden en kısa yolu bulun?

En Kısa Yol Problemi (Shortest Path) Önce Genişliğine Arama Tabanlı Çözüm C B A F H A C D Source E G B D E G F 46H

En Kısa Yol Problemi (Shortest Path) Ağırlıklı Çizgelerde En Kısa Yol Problemi Önce Genişliğine Arama algoritması bu çizge içinde çalışır mı? Hayır!!! 2 A 3 1 C->A (uzunluk: 1, maliyet: 9) Önce Genişliğine Arama ile hesaplandı 1 9 C 8 D C den A ya en kısa yol: B 3 2 E C den A ya en az maliyetli yol: C->E->D->A (uzunluk: 3, maliyet: 8) Peki nasıl hesaplayacağız?

En Kısa Yol Problemi (Shortest Path) İki düğüm arasında en az maliyetle gidilebilen bir yolun belirlenmesi için birçok algoritma geliştirilmiştir. Bunlardan en ünlüleri Dijkstra Bellman ve Ford Ağırlıklı ve yönlü graflar için geliştirilmiştir. Graf üzerindeki kenarların ağırlıkları 0 veya sıfırdan büyük sayılar olmalıdır. Negatif ağırlıklar için çalışmaz. Negatif ağırlıklı graflar için geliştirilmiştir. Floyd-Warshall Tüm olasılıkları hesaplamak için matrisli çözüm

Dijkstra nın Algoritması A 2 9 3 1 9 C 0 8 D 8 3 B 1 2 1. O anki en iyi düğümü seç C 2. Bilinen düğümler kümesine ekle 3. Seçilen düğümün tüm komşularının maliyetini güncelle. 2 E 1. Komşu A: 0 + 9 < maliyet(a) = 9 2. Komşu D: 0 + 8 < maliyet(d) = 8 3. Komşu E: 0 + 2 < maliyet(e) = 2

Dijkstra nın Algoritması A 2 9 3 1 9 C 0 8 D 8 5 3 B 1 2 2 E 1. O anki en iyi düğümü seç E 2. Bilinen düğümler kümesine ekle 3. Seçilen düğümün tüm komşularının maliyetini güncelle. 1. Komşu D: 2 + 3 = 5 < 8 maliyet(d) = 5

Dijkstra nın Algoritması A 2 8 9 3 1 9 C 0 8 D 5 3 B 1 2 2 1. O anki en iyi düğümü seç D 2. Bilinen düğümler kümesine ekle 3. Seçilen düğümün tüm komşularının maliyetini güncelle. E 1. Komşu A: 5 + 3 = 8 < 9 maliyet(a) = 8

Dijkstra nın Algoritması A 2 8 3 1 9 C 0 8 D 5 10 3 B 1 2 2 1. O anki en iyi düğümü seç A 2. Bilinen düğümler kümesine ekle 3. Seçilen düğümün tüm komşularının maliyetini güncelle. E 1. Komşu B: 8 + 2 = 10 < maliyet(b) = 10

Dijkstra nın Algoritması A 2 8 3 1 9 C 0 8 D 5 10 3 B 1 2 2 E 1. O anki en iyi düğümü seç B 2. Bilinen düğümler kümesine ekle 3. Seçilen düğümün tüm komşularının maliyetini güncelle.

Dijkstra nın Algoritması Negatif Ağırlıklı Eğer kenarların ağırlıkları negatif ise Dijkstra algoritması en az maliyetli yolu bulmada başarısız oluyor. A 3 2 B -2 C A dan C ye en az maliyetli yol Dijkstra : A->C, maliyet: 2 Gerçek yol A->B->C, maliyet: 1 Her kenara pozitif sabit eklersek ne olur?

Dijkstra nın Algoritması Negatif Ağırlıklı Her kenara pozitif sabit eklersek ne olur? A 3 2 B -2 C Her kenara 2 ekle A 5 4 B 0 C A dan C ye en az maliyetli yol Dijkstra: A->C Gerçek Yol: A->B->C

Dijkstra nın Algoritması Negatif Maliyetli Çember Eğer graf negatif maliyetli çember içeriyorsa, en az maliyetli yol tanımlanamaz. A 1 B 2-8 C 4 D A dan D ye en az maliyetli yol nedir? Veya B den C ye?

Bellman-Ford Algoritması Ana mantık: Her düğüm için bir uzaklık tahmini oluşturulur. Başlangıç olarak maliyet(s)=0 diğer düğümler için maliyet(u)= olarak atanır. En az maliyetli yol hesaplanana kadar tüm kenarlar üzerinden güncelleme yapılır. Algoritma ayrıca grafın negatif maliyetli kenarının olup olmadığını da bulur. Dijkstra nın algoritmasına göre daha yavaş çalışır.

Bellman-Ford Algoritması Ana mantık: Her düğüm için bir uzaklık tahmini oluşturulur. Başlangıç olarak maliyet(s)=0 diğer düğümler için maliyet(u)= olarak atanır. En az maliyetli yol hesaplanana kadar tüm kenarlar üzerinden güncelleme yapılır. Algoritma ayrıca grafın negatif maliyetli kenarının olup olmadığını da bulur. Dijkstra nın algoritmasına göre daha yavaş çalışır.

Bellman-Ford Algoritması A 0-2 3 C 4 2 3 (C, D) 4 B Pred A 0 - B 4 A - C 3 2 A B - D 6 B E 1 B - 1 E 6 D (A, B) Ma. -3 2 1 Düğüm -1 (A, C) (B, C) (B, D) İlk Yineleme (B, E) (D, E)

Bellman-Ford Algoritması A 0-2 3 C 4 2 (C, D) 4 B 1 6 3 D (A, B) Ma Pred A 0 - B 4 A C 2 B D 3 6 C B E 1 B -3 2 1 Düğüm E -1 (A, C) (B, C) (B, D) İkinci Yineleme (B, E) (D, E)

Bellman-Ford Algoritması A 0 4-2 3 C 4 2 (C, D) B 3 (A, B) Ma Pred A 0 - B 4 A C 2 B D 3 C E 1 B -3 1 2 1 Düğüm D E -1 (A, C) (B, C) (B, D) (B, E) (D, E) Üçüncü & Dördüncü Yineleme

Bellman-Ford Algoritması A 4 0-2 3 C 4 3 A 0-3 1 2 1 2 B D -1 4 E B 4-2 2 C Düğüm Ma Pred A 0 - B 4 A C 2 B D 3 C E 1 B 1 D 3-3 1 E

Floyd Warshall Bellmann-Ford ve Dijkstra algoritmaları belirli bir noktadan tüm noktalara çalışabilir. Bazı problemler sadece bir noktadan değil her noktadan her noktaya asgari uzaklık bulmamız gerekebilir. Aslında Bellmann-Ford ve Dijkstra algoritmaları her nokta için ayrı ayrı çalıştırılabileceğimiz gibi Floyd Warshall algoritmasını da kullanabiliriz.

Floyd Warshall İlk Dört Aşaması

Floyd Warshall 5 noktalı bir çizge ve Floyd Warshall algoritmasının ilk matrisi.

Floyd Warshall Birinci Aşama

Floyd Warshall İkinci Aşama

Floyd Warshall Üçüncü Aşama

Floyd Warshall Dördüncü Aşama

Floyd Warshall İlk Dört Aşaması

En Küçük Yol Ağacı (Minimum Spanning Tree) Yol ağacı, bir graf üzerinde tüm düğümleri kapsayan ağaç şeklinde bir yoldur. Ağaç özelliği olduğu için kapalı çevrim(çember) içermez. Bir graf üzerinde birden çok yol ağacı olabilir. En az maliyetli olan en küçük yol ağacı (minimum spanning tree) olarak adlandırılır.

En Küçük Yol Ağacı (Minimum Spanning Tree) 3 B 2 C 3 3 A 7 9 D 3 B 2 14 D 6 3 A E D 15 C 3 A C 3 A E 6 B 2 B 7 E 2 C 9 20 D 6 E

En Küçük Yol Ağacı (Minimum Spanning Tree - MST) Graf ağırlıksızsa veya tüm kenarların ağırlıkları eşit ise MST nasıl bulunur? Önce Genişliğine Arama (ÖGA) veya Önce Derinliğine Arama (ÖDA) çalıştırın oluşan ağaç MST dir A A B D ÖGA(A) E C B C D A E ÖDA(A) B D E C

En Küçük Yol Ağacı (Minimum Spanning Tree) En küçük yol ağacını belirlemek için birçok algoritma geliştirilmiştir. Kruskal ın Algoritması: Daha az maliyetli kenarları tek tek değerlendirerek yol ağacını bulmaya çalışır. Ara işlemler birden çok ağaç oluşturabilir. Prim in Algoritması: En az maliyetli kenardan başlayıp onun uçlarından en az maliyetle genişleyecek kenarın seçilmesine dayanır. Bir tane ağaç oluşur.

En Küçük Yol Ağacı Greedy Yaklaşımı/Yöntemi Dolaşma yapılırken bir sonraki düğümü belirlemek için kullanılan bir karar verme/seçme yöntemidir. O andaki seçenekler içerisinden en iyi olarak gözükeni seçer. Bölgesel/yerel değerlendirmeler yapar. Yerel optimum daima global optimum anlamına gelmez dolayısıyla en iyi sonuca götürmeyebilir. Fakat bazı durumlarda en iyi sonuca götürür. (MST, en kısa yol alg., Huffman coding)

En Küçük Yol Ağacı Kruskal ın Algoritması Çizge üzerindeki düğümler, aralarında bağlantı olmayan N tane bağımsız küme gibi düşünülür. Daha sonra bu kümeler tek tek maliyeti en az olan kenarlarla birleştirilir (çevrim oluşturmayacak şekilde ). Düğümler arasında bağlantı olan tek bir küme oluşturulmaya çalışılır. Küme birleştirme işleminde en az maliyetli olan kenardan başlanılır; daha sonra kalan kenarlar arasından en az maliyetli olanlar seçilir.

En Küçük Yol Ağacı Kruskal ın Algoritması Kaba Kodu

En Küçük Yol Ağacı Kruskal ın Algoritması

En Küçük Yol Ağacı Kruskal ın Algoritması

En Küçük Yol Ağacı Prim in Algoritması En küçük yol ağacını belirlemede kullanılan diğer bir algoritmadır. Greedy algoritmalarından biridir. Kruskal ın algoritmasından tek farkı bir sonraki kenarı nasıl seçtiğidir.

En Küçük Yol Ağacı Prim in Algoritması Adım-1: Adım-2: Oluşturulan ağaca eklemek için, şu ana kadar oluşturulmuş ağaç üzerinden erişilebilen ve daha önceden ağaca katılmamış olan en küçük ağırlıklı kenarı seç. Adım-3: Başlangıçta, herhangi bir noktayı ağacı oluşturmaya başlamak için seç. Eğer bu kenarın ağaca katılması, bir çember oluşmasına sebep olmuyorsa, ağaca ekle. Adım-4: Ağaçtaki kenar sayısı (N-1)'e ulaşana kadar ikinci adıma geri dön.

En Küçük Yol Ağacı Prim in Algoritması

En Küçük Yol Ağacı Prim in Algoritması

Kaynaklar C && Java ile Veri Yapılarına Giriş, Olcay Taner Yıldız, Boğaziçi Üniversitesi Yayınevi http://yzgrafik.ege.edu.tr/~ugur/05_06_fall/ds/data_structures_3e_aybars_ugur http://www.asafvarol.com/ Animasyonlu gösterim http://www.cs.usfca.edu/~galles/visualization/algorithms.html