Azalt ve Fethet Algoritmaları Problemi daha küçük bir örneğine çevir: Küçük örneği çöz Çözümü asıl probleme genişlet 3 tipi vardır: Bir sabitle azalt (Genellikle 1) Eklemeli Sıralama (Insertion Sort) Topolojik Sıralama (Topological Sort) Permütasyon, alt küme oluşturma algoritmaları Sabit bir oranla azalt (Genellikle yarıya) İkili Arama (Binary Search) Değişken boyutla azalt Öklid algoritması
Bir Sabitle Azaltma a n üstel problemi a n = a n-1.a ise F(n) = a n problemi özyinelemeli olarak çözülebilir.
Sabit bir Oranla Azaltma a n üstel problemi a n = (a n/2 ) 2 ise
Değişken Oranla Azaltma Öklid in EBOB algoritması
Eklemeli Sıralama En kötü durum: Dizinin ters sıralı olması En iyi durum: Dizinin sıralı olması Ortalama durum: Dağınık dizi
DFS - BFS Etraflı arama bir çizgenin Tüm düğümlerini ve ayrıtlarını sistematik olarak gezen iki önemli algoritmada da uygulanabilir Depth First Search - DFS (Önce Derinlik Arama) Breadth First Search BFS (Önce Genişlik Arama) Bu algoritmalar çizge yapılarının kullanıldığı yapay zeka algoritmaları, Operations Research (Yöneylem Araştırması) gibi algoritmalar için oldukça kullanışlıdır. Ayrıca bağlantı, çevrim gibi temel çizge özelliklerinin incelenmesinde oldukça etkin yöntemlerdir.
Derinlik Öncelikli Arama (DFS) DFS bir çizgeyi dolaşmaya istenen bir düğümden başlar. Başlangıç düğümünü «Geçildi», «Ziyaret Edildi» olarak işaretler. Her iterasyonda bulunduğu düğümün bitişik bir düğümüne geçer Birden fazla bitişik düğüm varsa belirlenen kurala göre geçer En yakın, en uzak, alfabetik olarak vs. Bu işlem tüm komşuları ziyaret edilmiş bir düğüme rastlayana kadar devam eder (Dead End) Dead End de, DFS bir önceki düğüme döner ve buradan ziyaret edilmemiş başka bir bitişik düğüme geçmeyi dener Başlangıç düğümüne geri döndüğünde algoritma sonlanır Eğer ziyaret edilmemiş düğüm kaldıysa algoritma o düğümden tekrar başlatılır.
DFS DFS işlemlerini takip etmek için yığın (stack) yapısı kullanmak uygundur. İlk kez ziyaret edilen düğüm yığına eklenir. Bir düğüm «Dead end» olduğunda yığından kaldırılır. DFS bir ormanı oluşturmak için de kullanışlıdır: İlk düğüm bir ormanın ilk ağacının köküdür Ziyaret edilmemiş bir düğüme erişildiğinde, erişildiği düğüme çocuk olarak eklenir Bu tür bir ayrıta «ağaç ayrıtı» (tree edge) denir Bu ayrıtlar ormanı oluşturur Algoritma bir DFS ormanında ebeveyninden önceki atalarına doğru olan bir ayrıta rastlayabilir Bu tür ayrıta «geri ayrıt»(back Edge) denir
DFS Örnekteki DFS alfabetik olarak ilerlemiştir
DFS Sözde kodunun yalın olması DFS nin sofistike bir algoritma olmadığını göstermez Algoritmanın gücü ve etkinliği algoritma hareketlerinin bitişiklik matrisi yada bitişiklik listesi üzerinde daha iyi anlaşılır DFS nin etkinliği graf yapısının gösterildiği veri yapısına göre değişir Bitişiklik Matrisi ise θ( V 2 ) Bitişiklik listesi ise θ( V + E ) V ve E düğüm ve ayrıt sayısı
DFS DFS de iki türlü düğüm sıralaması vardır: Bir düğüme ilk kez erişildiğinde (Push) Düğüm «dead end» olduğunda (Pop) DFS bir çizgenin bağlantılılığını ve çevrimselliğini kontrol etmek için kullanışlıdır: Algoritma durduğunda tüm düğümler ziyaret edildiyse çizge bağlantılıdır. Algoritmada bir geri ayrıt bulunduysa çizge çevrimseldir.
Genişlik Öncelikli Arama (BFS) DFS «cesurca» ilerleyen bir algoritma iken BFS dikkatli ilerleyen bir algoritmadır DFS her adımda başlangıç düğümünden mümkün olduğunca uzağa gitmeye çalışır. BFS her adımda başlangıç düğümünün bitişik düğümlerine gitmeyi hedefler. BFS başlangıç düğümüne bitişik tüm düğümleri belirlenen sırayla gezer Ardından iki ayrıt uzaklıktaki tüm düğümleri sırayla gezer Başlangıç düğümüne bağlı tüm düğümler ziyaret edilene kadar algoritma devam eder
Genişlik Öncelikli Arama (BFS) BFS işlemlerini takip etmek için kuyruk yapısı uygundur Başlangıç düğümü eklenerek kuyruk başlatılır Her bitişik komşuya geçildiğinde «Ziyaret edildi» diye işaretlenip kuyruğa eklenir İlk eklenen düğüm ilk çıkar BFS de bir ormanı oluşturmak için de kullanışlıdır İlk düğüm bir ormanın ilk ağacının köküdür Ziyaret edilmemiş bir düğüme erişildiğinde, erişildiği düğüme çocuk olarak eklenir Bu tür bir ayrıta «ağaç ayrıtı» (tree edge) denir Bu ayrıtlar ormanı oluşturur Algoritma bir BFS ormanında ebeveyninden önceki atalarına doğru olan bir ayrıta rastlayabilir Bu tür ayrıta «Çapraz ayrıt»(cross Edge) denir
Genişlik Öncelikli Arama (BFS)
Genişlik Öncelikli Arama (BFS)
Genişlik Öncelikli Arama (BFS) BFS nin etkinliği DFS gibidir Graf yapısının gösterildiği veri yapısına göre değişir Bitişiklik Matrisi ise θ( V 2 ) Bitişiklik listesi ise θ( V + E ) V ve E düğüm ve ayrıt sayısı DFS den farklı olarak tek tip sıralama yapabilir Kuyruk yapısının FIFO özelliği sebebiyle BFS de bir grafın bağlantılılığını ve çevrimselliğini kontrol etmek için kullanışlıdır Algoritma durduğunda tüm düğümler ziyaret edildiyse graf bağlantılıdır Algoritmada bir geri ayrıt bulunduysa graf çevrimseldir. DFS ile yapılamayacak olan Verilen iki düğüm arası minimum ayrıttan oluşan yolu bulabilir
Genişlik Öncelikli Arama (BFS)
DFS vs. BFS
Topolojik Sıralama Topolojik Sıralama Önkoşul, gereklilik gibi kısıtlılıklar doğrultusunda yapılması gereken sıralama Yönlü Çizgeler- Directed graph (Digraph) Tüm sınır yönleri belirli Yönlü Yönsüz Çizge Farkı Yönlü Çizge: Komşuluk matrisleri simetrik olmak zorunda değil Yönlü Çizge: Bir ayrıtın sadece bir karşı düğümü vardır
Topolojik Sıralama Bir öğrencinin alması gereken 5 ders var: Derslerin bazıları ön koşullu Bir dönemde sadece bir ders alabiliyor Dersleri hangi sırayla almalı? Ders Önkoşul C1 - C2 - C3 C1, C2 C4 C3 C5 C3, C4
DFS Çözümü Ders Önkoşul C1 - C2 - C3 C1, C2 C4 C3 C5 C3, C4 Topolojik sıralama probleminin çözümü için dag olmalı
Bir Azaltma Çözümü Her adımda kendisine gelen ayrıt olmayan düğümü çıkar:
Sabit Oranla Azaltma Genellikle logaritmik zamanlı ve etkin algoritmalar Azaltma oranı genellikle 2 İkili Arama
İkili Arama Sıralı bir dizide K elemanının aranması Dizinin orta (m) elemanı seçilir K ile m karşılaştırılır K ile m eşitse bulunmuş olur Eşit değilse; K < m isi dizinin ilk yarısı» K > m ise dizinin ikinci yarısı için işlem tekrar eder.
İkili Arama K=7
İkili Arama Algoritma etkinliği Temel İşlem : Karşılaştırma En kötü durum: K nın dizide bulunamaması
Sahte Bozuk Para Problemi Aynı görünüme sahip n tane bozuk para var. Herhangi bir terazi aracılığıyla iki farklı bozuk paranın ağırlıklarını karşılaştırmak mümkün. Sahte olan bozuk para, gerçek bozuk paralardan daha hafif. Sahte bozuk parayı nasıl belirleyebiliriz?
Sahte Bozuk Para Problemi n tane bozuk parayı n/2 luk iki parçaya ayır: Eğer tek sayıda bozuk para varsa, bir tanesini ayır: İki parçayı «terazi» de tart. Eğer, her iki yük eşit ise, ayırdığın tek bozuk para sahtedir. Aksi takdirde, daha hafif olan set üzerinde aramaya aynı biçimde devam et.
Sahte Bozuk Para Problemi Tasarım tekniğimiz? Böl ve yönet mi? Azalt ve fethet mi? En kötü durum senaryosu (Ağırlık ölçü sayısı): n/3 şeklinde parçalarsak:
Dönüştür ve Fethet Algoritmaları Bu algoritma teknikleri problemi dönüştürerek çözüm arar. Problemi daha basit, daha uygun bir duruma dönüştürmek, durumu basitleştirme (instance simplification) Başka bir gösterime dönüştürmek (representation change) Algoritması bilinen bir probleme dönüştürmek (problem reduction)
Durumu Basitleştirme - Önsıralama Listeler ile ilgili birçok problem liste sıralı ise daha kolay çözülür. Arama Ortanca bulma Elemanların farklı olup olmadığını belirleme Topolojik sıralama bir çok problemin çözülmesini kolaylaştırır Birçok geometri probleminin çözümünü ön sıralama kolaylaştırır
Durumu Basitleştirme - Önsıralama Orta seviye sıralama algoritmaları Selection, bubble, insertion En kötü ve ortalama durumlarda üssel Gelişmiş sıralama algoritmaları Merge, Quick Θ(n log n),
Durum Basitleştirme Dizi elemanları farklı mı? Kaba kuvvetle çözüm n 2 Diziyi sıralayıp kontrol edersek? Algoritmanın çalışma zamanı sıralama işleminin ve kontrol işleminin toplamı Dizi sıralı olduğu için kontrol işlemi n-1 kez yapılıyor Algoritma etkinliğini sıralama belirleyecek Uygun bir sıralama algoritması seçilirse (n log n?)
Durum Basitleştirme Arama Problemi Diziyi sırala İkili arama uygula
AVL Ağaçları AVL Ağacı: AVL Ağaçları sürekli olarak dengeli olan ikili arama ağaçlarıdır. Algoritmada basitçe, bir düğümün kolları arasındaki derinlik farkı 2 ise bu durumda dengeleme işlemi yapılır. Eğer fark 2 den az ise (yani 1 veya ) ise bu durumda bir dengeleme işlemine gerek yoktur.
AVL Ağaçları 1 1 1 5 2 2 1 5 2 1 4 7-1 12 1 4 7-1 2 8 2 8 (a) (b)
Dengeleme--- Tek Sağa Çevirme 2 3 2 1 2 R > 1 3 1 (a) R Rotasyonu
Dengeleme--- Sol ve Sağa Çevirme 2 3 2-1 1 LR > 1 3 2 (c) LR Rotasyonu
Dengeleme--- Tek Sağa Çevirme
Dengeleme--- Sol ve Sağa Çevirme
AVL Ağacı Oluşturma 5, 6, 8, 3, 2, 4, 7 5-1 6 5 5-2 6-1 8 > 6 8 5 L(5) 6 1 5 1 3 8 6 2 5 2 3 1 2 8 > R (5) 6 1 3 2 8 5
AVL Ağacı Oluşturma (devam) 6 2 3-1 2 5 1 4 8 > LR (6) 5 3 2 4 6-1 8 5-1 3 2 4 6-2 8 1 7 > RL (6) 5 3 2 4 7 8 6
Aç Gözlü Algoritmalar (Greedy ) Bozuk para verme problemi Bir kasiyer 48 kuruş para üstünü nasıl verir? 25 kuruş, 1 kuruş, 5 kuruş, 1 kuruş Hırslı teknik ilk olarak 25 kuruş verir Geri kalan miktarı en çok o azaltır İkinci de 25 kuruş veremez 1 kuruş verir Üçüncüde kalan miktarı en aza indirmek için 1 kuruş verir Kalan kısım için 3 adet 1 kuruş verebilir
Aç Gözlü Algoritmalar (Greedy ) Sadece optimizasyon problemlerinde kullanılabilmelerine rağmen genel bir tasarım tekniği olarak kabul edilir. Açgözlü algoritmalar ardışık adımlarla bir çözüm oluşturma yaklaşımı izler O ana kadar oluşturulan kısmi çözüm problemin tam çözümüne ulaşana kadar her adımda genişletilir Atılan her adımda yapılacak seçim: Problemin kısıtlarına göre uygulanması mümkün olmalıdır O adım için tüm mümkün seçenekler arasında en optimal olanı olmalıdır Gerçekleştirildikten sonra ki adımlarda değiştirilemez olmalıdır
Minimum Kapsama Ağacı Problemi Tüm network türlerinde karşılaşılan bir problem N adet noktayı her nokta çifti arasında bir yol olacak şekilde en ucuz maliyetle birleştirmek Elektrik Haberleşme Ulaşım Veri setleri içerisindeki noktaları kümeleme için kullanılabilirler Sınıflandırma problemlerinin çözümünde kullanılabilirler Bir graf yapısı ile gösterilebilirler Notalar düğüm Ayrıtlar yollar Maliyetler ise ayrıt ağırlıkları ile ifade edilir Bu durumda problem «minimum kapsama ağacı»nın (Minimum Spanning Tree-MST) bulunması olarak nitelenebilir
Minimum Kapsama Ağacı Problemi Kapsama Ağacı (Spanning Tree) Yönsüz, temaslı bir grafın tüm düğümlerini kapsayan, çevrimsiz, temaslı bir alt grafıdır (Ağaç) Grafın ayrıtlarının ağırlıkları varsa minimum tarama ağacı en düşük ağırlıklı kapsama ağacıdır Ağacın ağırlığı = Tüm ayrıtlarının ağırlık toplamı Minimum Kapsama Ağacı (Minimum Spanning Tree MST) problemi verilen ağırlıklı bir grafın MST sinin bulunmasıdır
Minimum Kapsama Ağacı Problemi
Prim in MST Algoritması Prim in alt ağacı ardışık adımlarla genişleterek MST oluşturur Başlangıç olarak herhangi bir düğüm seçilir Her adımda bulunulan düğüme en yakın (ağaca önceden dahil olmamış) düğüm ağaca dahil edilir Eşit mesafede iki düğüm varsa belirlenen kurala göre biri tercih edilir n düğüm için n-1 adet iterasyon gerçekleşir
Prim in MST Algoritması
Örnek
Örnek
Kruskal ın Algoritması MST probleminin çözümü için geliştirilmiş açgözlü başka bir algoritma Bu algoritma ağırlıklı, temaslı bir G=(V, E) grafının MST sine ayrıt ağırlıkları toplamı en düşük, çevrimsel olmayan V -1 adet ayrıtı olan bir alt graf olarak oluşturur Bu alt graf aynı zamanda bir ağaçtır Algoritma ardışık adımlarla ilerler Her adımda altgrafı çevrimsel olmayacak şekilde genişletir Altgrafa eklenen yeni düğümün temaslı olması gerekmez
Dijkstra Algoritması Dijkstra Algoritması En kısa yol algoritması Komşu düğümlerden en yakın olan seçilerek hedefe ulaşılmaya çalışılır.