Çizgeler Çizge G=(V,E), ikilisine denir, burada V sonlu bir kümedir, E ise bu kümenin elemanları arasında ikili bir bağıntıdır. V kümesine G çizgesinin köşeler(vertex) kümesi denir. E kümesine ise G çizgesinin kirişler kümesi (edge set) denir. Çizgelerin 2 çeşidi vardır: yönlü ve yönsüz
Yönlü çizge örneği Öz-döngüler(Self-loops)-yani bir köşenin kendisinden kendisine kirişler olabilir. 1 4 3 2 5 6
Yönsüz çizgelere örnek 1 5 3 2 4
Tanımlar Yönlü ve yönsüz çizgeler için bir çok tanım aynıdır. Sadece bazı kavramlar az da olsa farklılık göstermektedir. Eğer (u,v) yönlü G=(V,E) çizgesinin bir kirişi ise, (u,v) kirişi u köşesinden çıkıyor ve v köşesine giriyor denir. Eğer (u,v) yönsüz G=(V,E) çizgesinin bir kirişi ise, (u,v) kirişi u ve v köşelerini bağlıyor denir. Eğer (u,v) G=(V,E) çizgesinin bir kirişi ise v köşesi u köşesinin komşusudur (adjacent) denir.
Tanımlar Yönsüz bir çizgede bir köşesinin derecesi bu köşeye bağlı kirişlerin sayısına eşittir. 0 dereceli köşeye tecrit olunmuş(isolated) köşe denir. Yönlü çizgelerde, bir köşenin dış-derecesi bu köşeden çıkan kirişlerin sayısına eşittir. Yönlü çizgelerde, bir köşenin iç-derecesi bu köşeye giren kirişlerin sayısına eşittir. Yönlü çizgelerde, bir köşenin derecesi bu köşenin dış-derecesi ile iç-derecesinin toplamına eşittir.
Tanımlar Bir G=(V,E) çizgesinde u köşesinden w köşesine olan k uzunluklu yol, köşelerin (v0,v1,…,vk) dizisine denir, burada u=v0,w=vk ve {(v0,v1),(v1,v2),…(vk-1),vk)} kümesi E nin bir altkümesidir. Bir yolun uzunluğu bu yoldaki kiriş sayısına eşittir. Eğer u köşesinden w köşesine bir p yolu varsa w köşesi u köşesinden p yolu ile ulaşılabilirdir(reachable) denir. Bir yoldaki tüm köşeler birbirinden farklı ise bu yola basit (simple) yol denir.
Tanımlar Eğer yönlü bir çizgenin (v0,v1,…vk) yolunda v0=vk ve yolda en az bir kiriş varsa bu yola devir(cycle) denir. Eğer bir devirde başlangıç ve son köşe dışında diğer tüm köşeler farklı ise bu devire basit devir. Yönlü çizgede basit devirde öz-döngü olamaz.A directed graph with no self-loops is simple. Yönsüz bir çizgede (v0,v1,…vk) yolunda k>=3, v0=vk ve başlangıç ve son köşeler dışında tüm köşeler farklı ise bu yola devir denir. Bir çizgede devir yoksa bu çizgeye devirsiz çizge denir.
Tanımlar Yönsüz bir çizgede her hangi 2 köşenin birinden diğerine yol varsa bu çizgeye bağlantılı (connected ) çizge denir. Bir çizgenin köşelerinin “ulaşılabilir” bağıntısının oluşturduğu denklik sınıflarına bağlantılı bileşenleri (connected components) denir. Yönlü bir çizgede eğer her hangi 2 köşe birbirinden ulaşılabilirse bu çizgeye kuvvetli bağlantılı (strongly connected) çizge denir. Yönlü bir çizgenin köşelerinin “karşılıklı ulaşılabilir” bağıntısının oluşturduğu denklik sınıflarına kuvvetli bağlantılı bileşenleri (strongly connected components) denir.
Tanımlar G1=(V1,E1) ve G=(V,E) çizgeleri için eğer V1 kümesi V nin ve E1 kümesi E nin altkümesi ise G1=(V1,E1) çizgesine G=(V,E) çizgesinin altçizgesi (subgraph) denir. Her hangi 2 köşesi bir birine komşe olan yönsüz bir çizgeye tam çizge(complete graph) denir. Yönsüz bir G=(V,E) çizgesinde V kümesi V1 ve V2 gibi 2 kümeye ayrılabiliyorsa ve bir (u,v) ikilisinin E nin elemanı olmasından ya u nun V1 de ve v nin V2 de olması ya da tam tersı u nun V2 de ve v nin V1 de oması çıkarsa bu çizgeye iki kümeli (biparite graph) çizge denir.
Çizgelerin gösterimi Komşuluk listesi: (V+E) Seyrek(sparce) çizgeler için tercih edilir, yani |E| << |V|2 Adj[u] listesi (u, v) E koşulunu sağlayan tüm v köşelerinin listesidir. Ağırlıklı çizgelerde (weighted graphs): ağırlık w(u, v) sayısı Adj[u] listesinde v ile birlikte tutulur. Bu yöntemin eksik yönü, verilen ikilinin çizgenin köşesi olduğunu hızlı bulamıyoruz. Komşuluk matrisi: (V2) Yoğun(dense) çizgeler için tercih edilir. Yönsüz çizgelerde simetriktir Ağırlıklı çizgelerde (u,v) yerinde w(u, v) tutulur. (u,v) nin giriş olup olmadığı anında bulunur.
Yönsüz çizge gösterimi
Yönlü çizge gösterimi 1 bit per entry
Ağaçlar ve örten ağaçlar ağaç: devir içermeyen bağlantılı çizgeye denir orman: devir içermeyen (bağlantılı veya bağlantısız) çizgeye denir. Örten ağaç(spanning tree) köşeleri G çizgesinin köşeleri ile aynı olan ve ağaç olan bir altçizgedir.
G nin bazı örten ağaçları : Örten ağaç örnekleri G G nin bazı örten ağaçları : T1 T3 T2
Bir çok çizge algoritmasında çizgenin tüm köşelerinde gezinme gereksinimi bulunur. Çizgede arama için 2 yöntem vardır: a) Derinlik öncelikli arama (depth-first search (DFS)) b) Genişlik öncelikli arama ( bread-first search (BFS))
GENİŞLİK ÖNCELİKLİ ARAMA (BREADTH FIRST SEARCH (BFS)) Giriş: Yönlü veya yönsüz G=(V, E) çizgesi ve s başlangıç köşesi Amaç: G çizgesinde • s den ulaşılabilir tüm köşeleri bulmak •s den ulaşılabilir tüm köşeler olan en kısa uzaklıkları bulmak •Kökü s de olan genişlik öncelikli ağacı(BFT) üretmek −BFT ağacında s den ulaşılabilir tüm köşeler vardır −her v köşesi için s den v ye tek yol vardır ve bu yol G de en kısadır Ana Fikir: Bulunduğumuz köşenin tüm komşularını öncelikle ziyaret etmek ve bunun için FIFO kuyruğu kullanmak
Algoritmada her u∈V köşesi için aşağıdakiler kullanılır: •color[u]: u nun rengi−WHITE : yani henüz keşfedilmemiş −GRAY : kendisi keşfedildi ama keşfedilmemiş komşuları vardır −BLACK: kendisi ve tüm komşuları keşfedildi •Π[u]: u nun velisi(u=s ise veya u henüz keşfedilmemişse NIL olur) u yu hangi köşenin komşusu olarak keşfettiğimizi gösterir •d[u]: s den u ya olan uzaklık
Copyright © The McGraw-Hill Companies, Inc Copyright © The McGraw-Hill Companies, Inc. Permission required for reproduction or display.
Breadth First Search - A B C D E F G H I front FIFO Queue
Breadth First Search A - enqueue source node FIFO Queue front A B C D G H I enqueue source node A front FIFO Queue
Breadth First Search A - dequeue next vertex FIFO Queue front A B C D G H I dequeue next vertex A front FIFO Queue
Breadth First Search - visit neighbors of A FIFO Queue front A B C D E
Breadth First Search - visit neighbors of A FIFO Queue front A B C D E
Breadth First Search B - A B discovered FIFO Queue front A B C D E F G
Breadth First Search B - A visit neighbors of A FIFO Queue front A B C
Breadth First Search B I - A A I discovered FIFO Queue front A B C D E G H I A I discovered B I front FIFO Queue
Breadth First Search B I - A A finished with A FIFO Queue front A B C G H I A finished with A B I front FIFO Queue
Breadth First Search B I - A A dequeue next vertex FIFO Queue front A G H I A dequeue next vertex B I front FIFO Queue
Breadth First Search I - A A visit neighbors of B FIFO Queue front A B
Breadth First Search I - A A visit neighbors of B FIFO Queue front A B
Breadth First Search I F - A B A F discovered FIFO Queue front A B C D G H B I A F discovered I F front FIFO Queue
Breadth First Search I F - A B A visit neighbors of B FIFO Queue front
Breadth First Search I F - A B A A already discovered FIFO Queue front G H B I A A already discovered I F front FIFO Queue
Breadth First Search I F - A B A finished with B FIFO Queue front A B G H B I A finished with B I F front FIFO Queue
Breadth First Search I F - A B A dequeue next vertex FIFO Queue front G H B I A dequeue next vertex I F front FIFO Queue
Breadth First Search F - A B A visit neighbors of I FIFO Queue front A
Breadth First Search F - A B A visit neighbors of I FIFO Queue front A
Breadth First Search F - A B A A already discovered FIFO Queue front A G H B I A A already discovered F front FIFO Queue
Breadth First Search F - A B A visit neighbors of I FIFO Queue front A
Breadth First Search F E - A I B A E discovered FIFO Queue front A B C G H I B I A E discovered F E front FIFO Queue
Breadth First Search F E - A I B A visit neighbors of I FIFO Queue front FIFO Queue
Breadth First Search F E - A I B A F already discovered FIFO Queue G H I B I A F already discovered F E front FIFO Queue
Breadth First Search F E - A I B A I finished FIFO Queue front A B C D G H I B I A I finished F E front FIFO Queue
Breadth First Search F E - A I B A dequeue next vertex FIFO Queue G H I B I A dequeue next vertex F E front FIFO Queue
Breadth First Search E - A I B A visit neighbors of F FIFO Queue front
Breadth First Search E - A I B F A G discovered FIFO Queue front A B C
Breadth First Search E G - A I B F A F finished FIFO Queue front A B C
Breadth First Search E G - A I B F A dequeue next vertex FIFO Queue front FIFO Queue
Breadth First Search G - A I B F A visit neighbors of E FIFO Queue front FIFO Queue
Breadth First Search G - A I B F A E finished FIFO Queue front A B C D
Breadth First Search G - A I B A dequeue next vertex FIFO Queue front
Breadth First Search - A I B F A visit neighbors of G FIFO Queue front
Breadth First Search C - A G I B F A C discovered FIFO Queue front A B
Breadth First Search C - A G I B F A visit neighbors of G FIFO Queue front FIFO Queue
Breadth First Search C H - A G I B F G A H discovered FIFO Queue front
Breadth First Search C H - A G I B F G A G finished FIFO Queue front A
Breadth First Search C H - A G I B F G A dequeue next vertex front FIFO Queue
Breadth First Search H - A G I B F G A visit neighbors of C FIFO Queue front FIFO Queue
Breadth First Search H - A G C I B F G A D discovered FIFO Queue front
Breadth First Search H D - A G C I B F G A C finished FIFO Queue front
Breadth First Search H D - A G C I B F G A Get next vertex FIFO Queue front FIFO Queue
Breadth First Search D - A G C I B F G A visit neighbors of H front FIFO Queue
Breadth First Search D - A G C I B F G A H finished FIFO Queue front A
Breadth First Search D - A G C I B F G A dequeue next vertex front FIFO Queue
Breadth First Search - A G C I B F G A visit neighbors of D FIFO Queue front FIFO Queue
Breadth First Search - A G C I B F G A D finished FIFO Queue front A B
Breadth First Search - A G C I B F G A dequeue next vertex FIFO Queue front FIFO Queue
Breadth First Search - A G C I B F G A STOP FIFO Queue front A B C D E
Genişlik öncelikli ağaç (Breadth-first Tree(BFT)) Başlangıç köşesi s olan G = (V, E) çizgesi için G = (V , E) alt çizgesi elde edildi V ={vV : [v] NIL}{s} E ={([v],v)E : v V - {s}} G çizgesi aşağıdaki koşulları sağlıyorsa bu çizgeye genişlik öncelikli ağaç (BFT) denir: V kümesi s den ulaşılabilir tüm köşelerin kümesidir ve tüm vV için G de s den v ye basit ve tek yol vardır ve bu yol G de s den v ye en kısa yoldur. E kümesindeki kirişlere ağaç kirişleri denir. |E | = |V | - 1.
BFT Aşağıdaki algoritma s den v ye olan en kısa yolu yazıyor. (Bu algoritma BFS algoritması bittikten sonra çalıştırılmalıdır)
Print-Path(G,s,v) 1 if v=s 2 then print s 3 else if π[v]=NIL 4 then print “no path from” s “to” v “exists” 5 else Print-Path(G,s,π[v]) 6 print v