Graph Algoritmaları: BFS, DFS ve Dijkstra’yı Graph Lab ile Görün
BFS, DFS, topological sort, MST, Dijkstra ve Bellman–Ford algoritmalarını dört senkronize graph representation ve adım adım trace ile öğrenin.
Yazı içeriği
Graph algoritmaları; sosyal ağlardan navigasyona, dependency analysis’ten network tasarımına kadar çok geniş bir problem ailesini çözer. Zorluk, yalnızca çok sayıda algoritma bulunması değildir. Aynı graph’ın farklı representation’ları, farklı problem hedefleri ve farklı edge koşulları hangi yöntemin doğru olduğunu belirler.
Websoftik Academy Graph Algorithms Lab, graph görünümü, adjacency matrix, adjacency list ve edge list’i senkronize eder. BFS’den Bellman–Ford’a dokuz deterministik algoritma trace’i; frontier, visited set, safe edge, relaxation ve partial result state’lerini adım adım açıklar.
1. Graph Algoritmalarını Öğrenmek Neden Zor?
Bir graph G=(V,E), vertex kümesi ve bu vertex’ler arasındaki
edge’lerden oluşur. Directed veya undirected, weighted veya unweighted,
connected veya disconnected olabilir. Küçük bir model farkı doğru algoritmayı
tamamen değiştirir: negatif edge bulunan graph’ta Dijkstra kullanmak gibi.
İkinci zorluk algoritmanın aynı anda birkaç state tutmasıdır. BFS queue’yu, DFS recursion stack’i, Dijkstra tentative distance’ları, Prim cut’ı takip eder. Yalnızca vertex ziyaret sırasına bakmak bu kararların nedenini gizler.
2. Graph Algorithms Lab Nasıl Çalışıyor?
Graph Algorithms Lab, foundations, representations, traversal, applications, minimum spanning tree, shortest path ve exam practice alanlarını bağlantılı bir rota olarak sunar.
Trace paneli her adımda phase, açıklama, “neden?”, aktif vertex ve edge’ler, pseudocode satırı, state ve partial result verir. Playback hızı değişse bile input ve tie-breaking aynı kaldığında trace deterministiktir; bu sayede kendi tahmininizle Lab sonucunu güvenilir biçimde karşılaştırabilirsiniz.
3. Dört Graph Representation Nasıl Ayrılır?
- Graph drawing: yapıyı ve aktif path’i sezgisel gösterir.
- Adjacency matrix:
(u,v)edge kontrolünü doğrudan yapar,Θ(V²)alan kullanır. - Adjacency list: sparse graph’larda
Θ(V+E)alanla yalnızca mevcut komşuları tutar. - Edge list: bütün edge’leri sıralamak gereken Kruskal gibi algoritmalara uygundur.
Lab’de bir edge eklediğinizde dört görünüm aynı anda değişir. Böylece bunların dört ayrı graph değil, aynı abstract yapının farklı physical representation’ı olduğunu görürsünüz.
4. BFS ve DFS Arasındaki Fark Nedir?
BFS source’a olan hop distance’a göre katman katman ilerler ve queue kullanır. Unweighted graph’ta source’tan her vertex’e minimum edge sayılı yolu bulur. Parent ilişkisi tutulduğunda hedefe path reconstruction yapılabilir.
DFS bir branch boyunca mümkün olduğunca derine iner, sonra geri döner. Recursion veya explicit stack ile uygulanabilir. Cycle detection, topological ordering, SCC ve low-link algoritmalarının temelidir. Recursive call davranışını ayrıca Recursion Lab rehberinde inceleyebilirsiniz.
5. Topological Sort Ne Zaman Kullanılır?
Topological order, directed acyclic graph’taki her u→v edge’i
için u vertex’ini v’den önce yerleştirir. Ders ön
koşulları, build dependency’leri ve task scheduling bu modele uyar. Graph’ta
directed cycle varsa geçerli bir topological order yoktur.
Lab, DFS finish order ile cycle condition’ı birlikte gösterir. Böylece ortaya çıkan listeyi ezberlemek yerine neden yalnızca DAG üzerinde geçerli olduğunu edge yönleri üzerinden doğrularsınız.
6. SCC, Bridge ve Articulation Point Ne Anlatır?
Directed graph’ta strongly connected component içindeki her vertex diğerine erişebilir. Kosaraju algoritması DFS finish order ve transposed graph üzerinde ikinci traversal ile bu component’leri ayırır.
Undirected graph’ta bir edge çıkarıldığında component sayısı artıyorsa bu edge bridge; bir vertex çıkarıldığında artıyorsa vertex articulation point’tir. Discovery time ve low-link değerleri, bir subtree’nin ancestor’a alternatif bağlantısı olup olmadığını kodlar. Lab bu sayıların güncellenmesini aktif DFS tree üzerinde gösterir.
7. Minimum Spanning Tree Nedir?
Connected, undirected, weighted graph’ın bütün vertex’lerini cycle olmadan ve minimum toplam edge ağırlığıyla bağlayan yapı minimum spanning tree’dir. MST, source’tan hedefe shortest path bulmaz; bütün ağı en düşük toplam bağlantı maliyetiyle kapsar. Bu iki problem sıkça karıştırılır.
8. Prim ve Kruskal Nasıl Ayrılır?
Prim tek bir tree büyütür. Tree içindeki vertex’lerle dışarıdaki vertex’ler
arasındaki cut’ı geçen en güvenli edge’i seçer. Heap tabanlı uygulama adjacency
list ile O(E log V), matrix/min-array yaklaşımı
Θ(V²) çalışabilir.
Kruskal bütün edge’leri ağırlığa göre sıralar ve cycle oluşturmayanları seçer.
Edge sorting O(E log E) maliyetindedir; component kontrolünü
Union-Find neredeyse sabit amortized maliyetle yönetir. Disjoint Set mantığı
için Union-Find rehberimizi kullanabilirsiniz.
9. Shortest Path Algoritması Nasıl Seçilir?
- Unweighted graph: BFS.
- Nonnegative weighted graph: Dijkstra.
- Negative edge olabilir: Bellman–Ford.
- Tek hedef ve admissible heuristic: A* düşünülebilir.
Önce input koşulunu, sonra gereken garantiyi seçmek gerekir. Lab’in selection guide’ı algoritma adını problem cümlesindeki “unweighted”, “negative edge” ve “negative cycle” gibi sinyallerle eşleştirir.
10. Dijkstra Nasıl Çalışır?
Dijkstra source distance’ını 0, diğerlerini infinity ile başlatır. En küçük
tentative distance’a sahip vertex settle edilir ve outgoing edge’leri
relax edilir. dist[u] + w(u,v) < dist[v] ise distance ve parent
güncellenir.
Nonnegative edge koşulu, settle edilen distance’ın daha sonra iyileşmeyeceği
garantisini verir. Lab distance table, priority frontier ve seçilen edge’i
senkronize eder; hedefe ulaşıldığında parent chain üzerinden path’i yeniden
kurar. Heap sürümü O((V+E) log V), matrix sürümü
Θ(V²) maliyetindedir.
11. Bellman–Ford Ne Kazandırır?
Bellman–Ford bütün edge’leri en fazla V-1 tur relax eder. Negatif
edge’lerle doğru shortest path bulabilir ve ek bir turda hâlâ iyileşme varsa
reachable negative cycle tespit eder. Worst-case maliyeti O(VE),
değişiklik olmayan turda early exit yapılırsa O(kE) olabilir.
Dijkstra’dan yavaş olması onu “kötü” yapmaz; çözdüğü input sınıfı daha geniştir. Lab aynı weighted graph üzerinde iki algoritmanın relaxation ve settle davranışlarını karşılaştırarak trade-off’u açıklar.
12. Representation Complexity’yi Nasıl Değiştirir?
BFS ve DFS adjacency list üzerinde O(V+E) çalışırken adjacency
matrix üzerinde her vertex için bütün olası komşular tarandığından
Θ(V²) olur. Dense graph’ta bu fark küçük olabilir; sparse graph’ta
matrix gereksiz tarama ve alan üretir.
Complexity yalnızca algoritmanın değil algoritma + representation çiftinin özelliğidir. Büyüme sınıflarını grafiklerle karşılaştırmak için Complexity Lab rehberine geçebilirsiniz.
13. Deterministik Trace ile Nasıl Çalışılır?
Önce trace’i durdurup sıradaki vertex, edge veya distance update’i tahmin edin. Ardından tek adım ilerleyip “Why?” açıklamasını kendi gerekçenizle karşılaştırın. Sadece animasyonu izlemek yerine frontier ve partial result’ı kâğıt üzerinde yeniden üretmek, sınavda gerekli olan execution skill’i geliştirir.
14. Graph Algorithms Lab Çalışma Rotası
- Graph türlerini ve dört representation dönüşümünü tamamlayın.
- Aynı graph üzerinde BFS ve DFS frontier sırasını karşılaştırın.
- DAG, SCC, bridge ve articulation senaryolarıyla yapısal analiz yapın.
- Aynı weighted graph’ta Prim ve Kruskal’ın seçtiği safe edge’leri izleyin.
- BFS, Dijkstra ve Bellman–Ford için doğru input koşulunu açıklayın.
- Exam Practice’te trace’i açmadan sonucu ve complexity’yi tahmin edin.
Graph Algorithms Lab’i açın ve dokuz algoritmayı aynı trace diliyle karşılaştırın. Tüm interaktif öğrenme araçlarına Academy Lab sayfasından ulaşabilirsiniz.
Sonraki Adim: Bunlari da Oku
Bu yaziyi tamamladiysan, bir sonraki seviyeye gecmek icin su iceriklerle devam etmeni oneririz:
Ucretsiz Seviye Analizi ile Baslayalim
Mevcut seviyenizi hizlica analiz edip size en uygun ders planini birlikte cikaralim.