340 likes | 692 Views
MIT503 Veri Yapıları ve algoritmalar Algoritma O luş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.
E N D
MIT503 Veri Yapıları ve algoritmalarAlgoritma 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 N2vakit 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ü demektirki, • 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” C5 C1 B C2 A C4 C3
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 C5 C1 B C2 A C4 C3
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 C5 C1 B C2 A C4 C3
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 kararne 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çindeneyim 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ğrucevabı 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 ... C5 C1 B C2 A C4 C3
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 3 km yol uzunluğu: 0.5 km 1.5 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 bulunabilirV(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