MIT503 Veri Yapıları ve algoritmalar Algoritma Oluşturma – Açgözlü algoritmalar ve buluşsallar Y. Doç. Yuriy Mishchenko
Algoritma geliştirme yaklaşımları Ders planı Açgözlü yaklaşımı temel kavramları Açgözlü yaklaşımı uygulamaları
Böl-ve-Fethet Strateji Böl-ve-fethet yaklaşımı, genel algoritma geliştirmenin en çoğu metodudur Sıralamada uygulamasını inceledik N-nesneli dizi N2 sıralama yerine, iki N/2-nesneli dizi ayrı ayrı 2*N2/4 zamanla sıralayıp son sonuçlara topladık Bu fikiri tekrar tekrar kullanırken N2 vakit gereken sıralama algoritmalar yerine N log N algoritmaları sağlanabilir
Böl-ve-Fethet Strateji Sıralama Naif sıralama Seçme sıralama – O(N2) Ekleme sıralama – O(N2) Kabarcık sıralama – O(N2) Böl-ve-fethet sıralama Quicksort sıralama – O(N log N) Mergesort sıralama – O(N log N) Heapsort sıralama – arama ağacı yada ikiye bölme kullanan ekleme sıralama – O(N log N) Tamsayı sayım, kova ve radix sıralama – O(N)
Açgözlü Strateji Açgözlü strateji, çok kullanılan genel algoritma geliştirme yaklaşımıdır Genellikle, çok hızlı hesaplama ve kavramsal olarak çok basit bir stratejidir Açgözlü demektir ki, Orijinal problemin çözümünde birkaç adım/alt-sorun olabilir Bu adımlar/alt-sorunları çözmek için her zaman lokal olarak en uygun seçimi yapıyoruz “Açgözlü algoritmalar”da, çözümü sağlamak için bütün adımlarda en yararlı – yani “açgözlü” – kararları vermekteyiz
Açgözlü Strateji Bozuk para vermek, en klasik açgözlü algoritmanın örneğidir Bozuk para kullanırken bir toplamı vermek lazım Şunu sağlamak için, toplamı sağlamaya kadar her zaman mümkünse büyük madeni parayı vermeye çalışıyoruz
Açgözlü Strateji Seyahat eden satıcı problemi; Bir seyahat eden satıcı birkaç şehir ziyaret etmeli, bunun için en kısa toplam yolu kullanmak istiyor Bu problemin çözümünde dinamik programlama kullanırken sağlamalı, ama böyle çözüm çok fazla vakit gerekir Açgözlü algoritma kullanılabilir: “her zaman en yakın şehire gidin” A C1 C2 C3 C5 C4 B
Açgözlü Strateji Açgözlü algoritmalar, doğru (en iyi) çözüm vermeye garanti vermez Açgözlü adımlar yapmak için çok sık buluşsal yöntemleri kullanılır A C1 C2 C3 C5 C4 B
Açgözlü Strateji ve Buluşsallar Buluşsallar anlamı; Eğer alt problemlerin adımları için doğru çözüm kullanılamazsa; Doğru çözüm bilinemez Doğru çözüm hesaplanamaz Doğru çözüm çok fazla pahalı Adımlarını çözmek için deneyim veya sağduyu veya sezgi kurallar kullanılmaktadır A C1 C2 C3 C5 C4 B
Açgözlü Strateji ve Buluşsallar Açgözlü yaklaşımında, bütün alt-adımlar için en iyi/uygun kararı kullanmaktayız... Spesifik adım için, en iyi karar ne olabilir? Genellikle “açgözlü” karar vermek açıktır, ama ara sıra anlamlı bir karar olmayabilir
Açgözlü Strateji ve Buluşsallar Dinamik programlamada, üretimin en büyük gelir veren yatırımlarını bulmak istiyoruz Bu sorun doğru şekilde dinamik programlamayla çözülür (önümüzdeki ders) Açgözlü karar – her zaman paraların hepsi alın! Bu seçim çok iyi bir seçim değil sonunda, bu şekilde yatırımlarından hiç para kazanamaz :)
Açgözlü Strateji ve Buluşsallar Doğru seçim olarak, beklenen yatarım gelirine göre biraz para tutup biraz parayla yatırım yapmak lazım. Ne kadar?
Açgözlü Strateji ve Buluşsallar Bu soruna dinamik programlama doğru cevap veriyor; Şuna göre, bu anda doğru yatırım G fonksiyonu maksimumu bularak hesaplanabilir G(P,yatırım;t)=(P-yatırım)+V(A*yatırım;t+1) G fonksiyonunun anlamı, zaman t’deki var olan “P” para kapitali için ve “yatırım” yatırım için beklenecek gelir belirlemek
Açgözlü Strateji ve Buluşsallar Bu soruna dinamik programlama doğru cevap veriyor; Şuna göre, bu anda doğru yatırım G fonksiyonu maksimumu bularak hesaplanabilir G(P,yatırım;t)=(P-yatırım)+V(yatırım;t+1) V fonksiyonunun anlamı, zaman t+1’deki var olan “yatırım” kapitali için beklenecek gelir belirlemek
Açgözlü Strateji ve Buluşsallar Bu soruna dinamik programlama doğru cevap veriyor; Şuna göre, bu anda doğru yatırım G fonksiyonu maksimumu bularak hesaplanabilir G(P,yatırım;t)=(P-yatırım)+V(yatırım;t+1) G fonksiyonu, zaman t’de yatırımdan kalan para artı beklenecek yatırımın geliri şekilde belirlenir
Açgözlü Strateji ve Buluşsallar Fark edin ki, optimal durumda V(P,t) için bu formülü yazabiliriz (olacak gelir optimal yatırım seçimle belirtilir); V(P;t)=max[G(P,yatırım;t)] Bu ilişki birkaç model için dinamik programlama kullanarak bulunabilir; ama bu denklemi çözme zordur
Açgözlü Strateji ve Buluşsallar Daha çok durumda beklenecek gelir (V(P,t)) için deneyim veya sağduyu veya sezgi kullanılır En basit seçeneklerinden biri şudur (%k alıp %1-k’den yatırım A geliri oluyor); V(P;t)=kP+kA(1-k)P+kA2(1-k)2P+kA3(1-k)3P+... =kP(A(1-k)+A2(1-k)2+A3(1-k)3+...)
Açgözlü Strateji ve Buluşsallar Bütün adımlarda en optimal, açgözlü yatırım kararı vermeye çalışıyoruz Bu karar vermek için, buluşsal olacak “gelir fonksiyonunu” kullanıyoruz (bu tahminimiz) V(P;t)=kP+kA(1-k)P+kA2(1-k)2P+kA3(1-k)3P+... =kP(A(1-k)+A2(1-k)2+A3(1-k)3+...)
Açgözlü Strateji ve Buluşsallar Bu buluşsal karar fonksiyonunun “k” parametresini ya da deneyim ya da sezgi kullanarak belirtiyoruz; V(P;t)=kP+kA(1-k)P+kA2(1-k)2P+kA3(1-k)3P+... =kP(A(1-k)+A2(1-k)2+A3(1-k)3+...)
Açgözlü Strateji ve Buluşsallar Buradaki örnek çok genel durumdur ! Buluşsal karar fonksyonunu, V(P;t), kullanarak açgözlü adımlarla çözümü alabiliriz; V(P;t)=kP(A(1-k)+A2(1-k)2+A3(1-k)3+... “k” parametresini, ya da deneyim ya da sezgi kullanarak seçiyoruz Buluşsal karar fonksyonları açgözlü kararlar ile çok farklı durumda çok fazla kullanılır
Açgözlü Stratejinin Sınırları Açgözlü algoritmalar çok sık doğru çözüm veremiyorlar
Açgözlü Stratejinin Sınırları Bozuk para kullanırken bir toplamı vermek lazım; Adımlar olarak her zaman mümkünse büyük madeni para veriyoruz Mümkün problemler; Eğer bizde 25, 10 ve 4 kuruş madeni para var, ve 41 kuruş vermek lazım ise Açgözlü seçimler – 25 kuruş (16 kaldı), 10 kuruş (6 kaldı), ve şimdi ... Şimdi ne ??? Doğru çözüm - 25 + 4x4 = 41 kuruş tur;
Açgözlü Stratejinin Sınırları 41 kuruş vermek için, açgözlü algoritma başaramadı, doğru çözümü (aslında herhangi çözümü) bulamadı ! Bozuk para probleminde açgözlü algoritma iyi çözüm vermeyebilir ! Aslında, hiç çözüm vermeyebilir
Açgözlü Stratejinin Sınırları Seyahat satıcı: burdan hangi şehire gitmeliyim? En doğru cevabı dinamik programlamayla bulunabilir, ama hesaplama çok zor Bunun yerine buluşsal “sağduyu” kullanılabilir – her zaman en yakın şehire gidelim ! İyi çözüm olmayabilir: böyle bir şehire gelince, sonraki şehir çok uzak mesafede olabilir ki ... A C1 C2 C3 C5 C4 B
Açgözlü Stratejinin Sınırları En kısa patika sorunu: bir haritayı takip ederek, yolların uzunluklarına göre, iki nokta arasında en kısa patika bulmak Açgözlü karar – her zaman en kısa yola gidin ! Bu çözüm iyi çözüm olmayabilir ... Açgözlü seçim yol uzunluğu: 0.5 km 1.5 km 3 km 1 km Doğru seçim
Açgözlü Stratejinin Sınırları Bozuk para verme – açgözlü algoritma iyi çözüm hem verebilir (mesela 25, 10, 5, 1 kuruş maden paralar için) hem vermeyebilir (25, 10, 4 kuruş maden paralar için) Seyahat satıcı problemi – açgözlü çözüm en iyi çözüm olup olmayabilir En kısa patika – açgözlü çözüm en kısa çözüm olup olmayabilir Planlama – açgözlü çözüm genellikle iyi çözüm hiç değildir
Açgözlü Stratejinin Sınırları Açgözlü algoritmalar birçok durumda doğru çözüm veremiyorlar ... Neden açgözlü algoritma kullanmak isteyebiliriz? Kavramsal olarak kolaydırlar – açgözlü kararlar genellikle açıktır Hızlı çözümler – açgözlü kararlar kolayca bulunabilip daha hızlı hesaplamaya yol açar Lokal olarak en iyi çözümü – genellikle lokal olarak optimum çözümleri bulabilir; demek ki, çoğunlukla iyi bir çözüm bulunabilir (en iyi değilse bile) Alternatif yok – doğru çözüm bilinmez veya hesaplanamaz
Açgözlü Stratejinin Sınırları Ne zaman açgözlü algoritmalar doğru çözüm veriyorlar? Açgözlü karar özelliği – şimdiki karar sadece geçen bilgiye bağlıdır Şimdiki karar gelecekteki kararlara bağlı değildir Optimum altyapı – orijinal problemin optimum çözümü altproblemlerin optimum çözümlerinden oluşturulabilir Bu özellikler olan problemlerde, açgözlü algoritma çoğunlukla doğru cevabı sağlayabilirler
Özet Açgözlü yaklaşım, çok fazla kullanılan algoritma geliştirme yaklaşımıdır Burada, açgözlü demek ki Orijinal problemde birkaç altproblemleri bulunabilir Bu altproblemler için her zaman lokal olarak en iyi kararı seçmeye çalışıyoruz Bu şekilde, açgözlü algoritma, “açgözlü” kararları kullanıyor
Özet Açgözlü algoritmaların avantajları Kavramsal olarak kolay – açgözlü kararlar genellikle çok açıktır Hızlı hesaplama – açgözlü kararlar kolayca bulunabilip hızlı hesaplamaya yol açar Lokal olarak en iyi çözümü – genellikle lokal olarak en iyi çözümü bulunabilir; iyi bir çözüm bulunabilir Alternatif yok – doğru çözüm bilinmez veya hesaplanamaz Açgözlü algoritmalar doğru çözüm vermeyebilirler
Özet Karar fonksiyonları için buluşsal bilgi kullanarak daha iyi çözümleri bulunabilir V(P;t)= kP(A(1-k)+A2(1-k)2+A3(1-k)3+... Buluşsal açgözlü kararları, açgözlü algoritmalarda çok farklı durumda kullanılır Açgözlü algoritmayla doğru cevap verilebilir sorunları; Açgözlü karar özelliği – kararlar geçen bilgiye bağlıdır; gelecekteki kararlara bağlı değildir Optimum altyapı – orijinal problemin optimum çözümü altproblemlerin optimum çözümlerinden oluşturulabilir