1 / 70

MIT503 Veri Yapıları ve algoritmalar Algoritma O luşturma – Dinamik Programlama

MIT503 Veri Yapıları ve algoritmalar Algoritma O luşturma – Dinamik Programlama. Y. Doç. Yuriy Mishchenko. Algoritma oluşturma. Ders planı Dinamik programlamanın kavramları Dinamik programlama uygulamaları Özet. Genel algoritma oluşturma: Dinamik Programlama.

Download Presentation

MIT503 Veri Yapıları ve algoritmalar Algoritma O luşturma – Dinamik Programlama

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. MIT503 Veri Yapıları ve algoritmalarAlgoritma Oluşturma –DinamikProgramlama Y. Doç. Yuriy Mishchenko

  2. Algoritma oluşturma Ders planı • Dinamik programlamanın kavramları • Dinamik programlama uygulamaları • Özet

  3. Genel algoritma oluşturma:Dinamik Programlama • Dinamik programlama, en önemli genel algoritma geliştirme yaklaşımlarından biridir • Ne zaman kullanılır? • Optimum (en uygun) plan seçme için • Optimum adımlar sırası seçme için • Optimum süreç seçme için • “Dinamik programlama” adı, optimum üretme programı seçme sorunundan yaratmaktı

  4. Genel algoritma oluşturma:Dinamik Programlama • Dinamik programlama, Richard Bellman tarafından 1940-1950’de geliştirilmişti • R. Bellman sorunu, üretim için optimum kararların sırasını seçmekte bulundu

  5. Genel algoritma oluşturma:Dinamik Programlama • Bir üretim süreci var • Üretim, zaman 1’den zaman T’ye kadar sürüyor • Bütün zamanlarda bir karar vermek lazim • Örneğin, şu anda var olan parasını; • Yada üretime yatırmak • Yada üretimden çekip maaş olarak harcamak

  6. Genel algoritma oluşturma:Dinamik Programlama • Yatıran parası, gelecekte daha çok gelir üretecek • Ama, kendimize biraz para almak için üretimden parasını da çekmek lazım • En büyük gelir için, optimum kararların sırasını o zaman seçmek istiyoruz

  7. Genel algoritma oluşturma:Temel Dinamik Programlama • Matematiksel koşulları: • Bütün zamanlar için durum bu şekilde temsil edilir • Zaman t‘deki durum: işte var olan para – para(t) • Karar: işten çekecek para – çekmek(t)

  8. Genel algoritma oluşturma:Temel Dinamik Programlama • Bir karariçin, durumu bu şekilde değiştiriyoruz: • gelir → gelir+f(çekmek(t)) • yatırım(t) = para(t) – çekmek(t) • para(t) → para(t+1)=A*yatırım • Çekilmiş para toplam gelire topluyor; bunun için bir “f” fonksiyonu kullanırız–gelir → gelir + f(çekmek) • Yatırılacak para daha sonra A-kat gelir üretiyor, yeni_para →(A*yatırım)

  9. Genel algoritma oluşturma:Temel Dinamik Programlama • Sonuçta, toplam gelir bu şekilde bulunabilir: • gelir=f(çekmek(1))+f(çekmek(2))+...+f(çekmek(T)) • Bu ölçüde, şu toplamın maximumu bulmak istiyoruz • Şu soruna göre, optimum kararların sırasını bulmak istiyoruz, yani (çekmek(1),çekmek(2),...,çekmek(T))

  10. Genel algoritma oluşturma:Temel Dinamik Programlama • Sonuçta, toplam gelir bu şekilde bulunabilir: • gelir=f(çekmek(1))+f(çekmek(2))+...+f(çekmek(T)) • Şu toplam, bütün kararların fönksyonu olsun: • gelir(çekmek(1),çekmek(2),...,çekmek(T)) • Bu ölçüde, birçok kararı aynı zamanda ve hep birlikte bulmak gerekir – öyle bu matematiksel problem çok zor!

  11. Genel algoritma oluşturma:Temel Dinamik Programlama • Bellman’a göre, bu problem özyinelemekullanarak daha kolayca çözülebilir • Bütün birçok (T sayıda) kararseçme yerine daha kolay tek-basamaklı karar yöntemi arıyoruz • Bu tek-basamaklı karar verme için, bir “dinamik değer fonksiyonu” kullanıyoruz

  12. Genel algoritma oluşturma:Temel Dinamik Programlama • Dinamik değer fonksiyonunun anlamı nedir? • Zaman t’de bizde olan para P olduğunu varsayayalım • P ile, bütün gelecek kararların optimum olacağını varsayayalım • Böyle gelecek gelire,dinamik değer fonksyonu, V(P;t,T), diyelim

  13. Genel algoritma oluşturma:Temel Dinamik Programlama • V(P;t,T)’ye “dinamik” diyoruz çünkü zamanla bağlanmış • V(P;t,T)’ye “değer” diyoruz çünkü optimum olan gelecek geliri temsil eder • Önemli özellik burada ki, bugünkü gelir hesaplamasından gelecek gelir bildiğimizi varsaydık (!) • “Gelecek bütün optimum kararların sırası ne?” sorunun yerine, “Gelecek gelir bildiğimizi varsayırken şimdiki yatırım ne olmalı?” diyer soruyoruz

  14. Genel algoritma oluşturma:Temel Dinamik Programlama • İki şeyi fark edelim; • V(P;T,T)=f(P) – yani son zamanda paranın hepsini çekmeliyiz çünkü gelecekte hiç bir şey/yatırım/gelir olamaz ki • V(P;t,T) özyineleme kullanarak hesaplanabilir: • Eğer t+1 zamanda V(P;t,T) bilinir (ve V(P;T,T) gerçekten biliyoruz), t zamanda optimum gelir tek karar verince bulabiliriz; • Yani, V(P;t,T)=max[f(C)+V(A*(P-C);t+1,T))] • Burada, A*(P-C) – zaman (t+1)’nın parasıdır (hatırlayın)

  15. Genel algoritma oluşturma:Temel Dinamik Programlama • Bu ölçüde, V(P;t,T) T zamanla başlayarak özyineleme kullanarak hesaplanabilir: • V(P;T,T)=f(P) • V(P;t,T)=max[f(C)+V(A*(P-C);t+1,T))] • V(P;t+1,T)’yi biliyorsak, bütün zamanlarda yatırımı kolayca seçebiliriz • Bir çekilecek para C için, gelecek gelir bu şekilde olur • f(C)+V(A*(para(t)-C);t+1,T) • Çekilecek para seçmek için, C’ye göre şu maximumu buluyoruz, • max[f(C)+V(A*(para(t)-C);t+1,T)]

  16. Genel algoritma oluşturma:Temel Dinamik Programlama • A=2 (yatırım büyüme) ve • f(çekme)=log(çekme+1) örnek: P(t) V(P;t) Son anda V(P,T)=f(P) t t=2 t=3 t=4 t=5 t=1

  17. Genel algoritma oluşturma:Temel Dinamik Programlama • Zaman T ile başlayarak, V(P;T-1)=max[f(C)+V(A*(P-C);T))] çözüyoruz • t=T-1, son para P=1 için: • mümkün çekilecek para=0 için, şu var • f(0)+V(A*(1-0);T)=f(0)+V(2;T)=log(1+0)+log(1+2)=f(0)+f(2) • mümkün çekilecek para=1 için, şu var f(1)+V(A*(1-1);T)=f(1)+V(0;T)=log(1+1)+log(1+0) =f(1)+f(0) • optimum seçim - 0, optimum gelir - V(1;T-1)=f(0)+f(2)=log(3) P(t) V(P;t) t t=2 t=3 t=4 t=5 t=1

  18. Genel algoritma oluşturma:Temel Dinamik Programlama • Son para P=2 için: • mümkün çekilecek para=0 için, şu var • f(0)+V(A*(2-0);T)=f(0)+V(4;T)=f(0)+f(4)=log(1)+log(5) • mümkün çekilecek para=1 için, şu var f(1)+V(A*(2-1);T)=f(1)+V(2;T)=f(1)+f(2)=log(2)+log(3) • mümkün çekilecek para=2 için, şu var f(2)+V(A*(2-2);T)=f(2)+V(0;T)=f(2)+f(0)=log(3)+log(1) • optimum seçim - 1, optimum gelir V(2;T-1)=f(1)+f(2)=log(6) P(t) V(P;t) t t=2 t=3 t=4 t=5 t=1

  19. Genel algoritma oluşturma:Temel Dinamik Programlama • Bu şekilde devam ederek kalan değerleri dolaşıyoruz... P(t) V(P;t) t t=2 t=3 t=4 t=5 t=1

  20. Genel algoritma oluşturma:Temel Dinamik Programlama • Şimdi, zaman T-1 V(P;T-1) bulunca, V(P;T-2) benzer şekilde buluyoruz, yani V(P;T-2) =max[f(C)+V(A*(P-C);T-1))] • t=T-2, T-1’deki para P=1 için: • mümkün çekilecek para=0 için, şu var • f(0)+V(A*(1-0);T-1)=f(0)+V(2;T-1)=f(0)+(f(1)+f(2))=log(6) • mümkün çekilecek para=1 için, şu var f(1)+V(A*(1-1);T-1)=f(1)+V(0;T-1)=f(1)+(f(0))=log(1) • optimum seçim burada da 0, V(1;T-1)=f(0)+f(2) P(t) V(P;t) t t=2 t=3 t=4 t=5 t=1

  21. Genel algoritma oluşturma:Temel Dinamik Programlama • t=T-1, T-1’deki para P=2 için: • mümkün çekilecek para=0 için, şu var • f(0)+V(A*(2-0);T-1)=f(0)+V(4;T-1)=f(0)+(f(2)+f(4))=log(15) • mümkün çekilecek para=1 için, şu var f(1)+V(A*(2-1);T-1)=f(1)+V(2;T-1)=f(1)+(f(1)+f(2))=log(12) • mümkün çekilecek para=2 için, şu var f(2)+V(A*(2-2);T)=f(2)+V(0;T)=f(2)+f(0)=log(3) • optimum seçim - 0, gelir - V(2;T-2)=f(0)+f(2)+f(4)=log(15) P(t) V(P;t) t t=2 t=3 t=4 t=5 t=1

  22. Genel algoritma oluşturma:Temel Dinamik Programlama • Aynı şekilde kalan değerleri dolaşıyoruz... P(t) V(P;t) t t=2 t=3 t=4 t=5 t=1

  23. Genel algoritma oluşturma:Temel Dinamik Programlama • Aynı şekilde kalan değerleri dolaşıyoruz... P(t) V(P;t) t t=2 t=3 t=4 t=5 t=1

  24. Genel algoritma oluşturma:Temel Dinamik Programlama • Aynı şekilde kalan değerleri dolaşıyoruz... P(t) V(P;t) t t=2 t=3 t=4 t=5 t=1

  25. Genel algoritma oluşturma:Temel Dinamik Programlama • Sonuçta bütün “dinamik değer fonksyonu” buluyoruz P(t) V(P;t) t t=2 t=3 t=4 t=5 t=1

  26. Genel algoritma oluşturma:Temel Dinamik Programlama P(t) V(P;t) t t=2 t=3 t=4 t=5 t=1 • Şimdi, başta olan para P=1 için, birimci yatırım benzer şekilde seçiyoruz, ve şu, çekilecek para C=0, yatırım=1 değirde, gelir V(2;2) bulunur

  27. Genel algoritma oluşturma:Temel Dinamik Programlama P(t) V(P;t) t t=2 t=3 t=4 t=5 t=1 • İkinci adım olarak, olan para P=2, ikinci yatırım benzer şekilde seçip,→ çekilecek para 0, yatırım 2 değerde, gelir V(4;3) olur

  28. Genel algoritma oluşturma:Temel Dinamik Programlama P(t) V(P;t) t t=2 t=3 t=4 t=5 t=1 • Benzer şekilde, üçüncü adım için, olan para P=4 için, çekilecek para 2 ve yatırım 2 değerde olmalı,

  29. Genel algoritma oluşturma:Temel Dinamik Programlama P(t) V(P;t) t t=2 t=3 t=4 t=5 t=1 • Sonunda, çekme sırası=(0,0,2,2,4), yatırım sırası=(1,2,4,4,0), ve toplam gelir=f(0)+f(0)+f(2)+f(2)+f(4)=log(3*3*5) şekilde bulunur

  30. Genel algoritma oluşturma:Önemli kavramları • Üretimin optimum kararların sırasını seçmesi, tarihinin dinamik programlamanın ılk uygulamasıdır • Modern zamanlarda çok farklı uygulama var • En kısa patika/yol seçme • Hanoi Kuleleri oynaması • Diziler hizalama ve arama, altdizi karşılaştırma • Genetik sıra hizalama • Veritabanı sorgusu optimizasyonu • Liste devem eder ...

  31. Genel algoritma oluşturma:Önemli kavramları • Dinamik programlama metodunun önemli genel kavramları: • Optimum altyapı özelliği: tüm problemin çözümü, problemin parçalarının çözümlerini kullanarak sağlanabilir • Örneğin: planlamada, gelecek zaman için planı varsa (V(P;t)), onu kullanarak şimdiki adım için optimum plan da seçebiliriz • Örneğin: en kısa patika bulmada, A noktasından B noktasına en kısa patika varsa, o zaman ortasındaki bir C noktası için, AC ve CB da en kısa patikalar olmalıdır (yoksa, daha kısa patika oluşturabiliriz !) en kısa patika A AC AB=AC+CB B C CB

  32. Genel algoritma oluşturma:Önemli kavramları • Dinamik programlama metodunun önemli genel kavramları • Örtüşen altproblemler özelliği:tüm problemin altproblemlerinin hepsi aynı şekilde olmalıdır(veya az mümkün şekilde bulunabilir) • Planlamada, gelecek zamanlar için planı V(P;t) kullanarak önceki adım için optimum planı bulma her zaman benzer sorundur; yaniV(P;t-1)=max[f(C)+V(A*(P-C);t))] • En kısa patika için, A noktasından B noktasına en kısa patikanın parçaları, benzerşekilde, en kısa patikalar dır en kısa patika A AC AB=AC+CB B C CB

  33. Genel algoritma oluşturma:Önemli kavramları • Dijkstra algoritması – birkaç nokta için, bütün noktaların çiftları için bir yol sistemine göre uzaklığı bulmak (Mezitli’den merkezine dolmuşlar seçmek) • Optimum altyapı var • C’den B’ye yol varsa, A’dan B’ye bu şekilde gidebiliriz: ilk önce A’dan C’ye gidin, sonra C’den B’ye gidin (altproblemleri) • Örtüşem altproblemler özelliği var • B’ye bağlanmış bütün C noktalar için, A’dan B’ye en kısa patika her zaman aynı şekilde bulunur: “AB yol” = min(A’dan C’ye en kısa yol + C’den B’ye yol)

  34. Genel algoritma oluşturma:Önemli kavramları • Dijkstra algoritması – A noktasından başka B noktasına en kısa yol bulmak min(A’dan C’ye en kısa yol + C’den B’ye direkt yol) C5 C1 B C2 A C4 C3

  35. Genel algoritma oluşturma:Önemli kavramları • Dijkstra algoritması – A noktasından başka B noktasına en kısa yol bulmak min(A’dan C’ye en kısa yol + C’den B’ye direkt yol) C5 C1 B C2 A C4 C3

  36. Genel algoritma oluşturma:Önemli kavramları • Dinamik programlama metodunun önemli genel kavramları: • Optimum altyapı ve • Örtüşen altproblemler özellikler; • Şunlar varsa, tüm probleminçözümü birbirine benzeyen daha küçük altproblemlerini çözürken sağlayabiliriz

  37. Genel algoritma oluşturma:Önemli kavramları • Şunun için; • Ya da bütün mümkün altproblemlerini çözürken, onların çözümleri bir tabloya atıp sonra kullanabiliriz (yukarıdan aşağıya yaklaşım) • Ya da altproblemlerini sırayla çözüp bir tablo oluşturabiliriz (aşağıdan yukarıya yaklaşım)

  38. Genel algoritma oluşturma:Örnekler • En kolay dinamik programlama örneği: binom katsayıları hesaplama, C(k,n) • C(k,n), toplam n nesneden mümkün k nesne seçenekleri sayıyor • Özellikleri: • C(k,n)=n!/k!(n-k)! (n!=1*2*3*...*(n-1)*n – faktöriyel) • C(k,n)=C(k,n-1)+C(k-1,n-1) (altyapı denklem) • C(0,n)=1; C(n,n)=1

  39. Genel algoritma oluşturma: Örnekler • Büyük k ve n için, faktoriel hesaplama zor olur, ve C(k,n)=C(k,n-1)+C(k-1,n-1) formül kullanılır

  40. Genel algoritma oluşturma: Örnekler • Direkt C(k,n)=C(k,n-1)+C(k-1,n-1) kullanma çok hesaplama gerekiyor, ama dinamik programlama için gereken bütün durumlar var: • Optimum altyapı var – C(k,n), daha küçün k ve n C-katsayıları kullanarak hesaplanır (yani – C(k,n)=C(k,n-1)+C(k-1,n-1)) • Örtüşen altproblemler özelliği var – C katsayıların hepsi aynı şekilde hesaplanır (yani şu formül tekrar tekrar kullanılır, C(k,n)=C(k,n-1)+C(k-1,n-1))

  41. Genel algoritma oluşturma: Örnekler C(k,n) hesaplarken onları bir tabloda kaydedince, belirli C(k,n) O(kn) vakitle hesaplanabilir: Sözde kodu: döngü i=0’dan n’ye kadar // döngü döngü j=0’dan min(i,j)’ye kadar //döngüeğer j=0 veya j=i ise C(j,i)=1aksi halde C(j,i)=C(j-1,i-1)+C(j,i-1) //altproblemi hesaplamaeğer sonu//ve kaydetmedöngü sonu döngü sonu

  42. Genel algoritma oluşturma: Örnekler • Dinamik programlama Excel’de yapılabilir (C(k,n) hesaplama):

  43. Genel algoritma oluşturma: Örnekler • Dinamik programlama Excel’de yapılabilir (C(k,n) hesaplama): İlk değerleri dolduralım yani C(0,n)=1

  44. Genel algoritma oluşturma: Örnekler • Dinamik programlama Excel’de yapılabilir (C(k,n) hesaplama): C(k,n-1)+C(k-1,n-1) formül girelim

  45. Genel algoritma oluşturma: Örnekler • Dinamik programlama Excel’de yapılabilir (C(k,n) hesaplama): C(k,n-1)+C(k-1,n-1) formül kopyalama

  46. Genel algoritma oluşturma: Örnekler • Dinamik programlama Excel’de yapılabilir (C(k,n) hesaplama): C(k,n-1)+C(k-1,n-1) formül kopyalama

  47. Genel algoritma oluşturma: Örnekler • Levenstein mesafe - diziler için önemli bir mesafe ölçümü: iki dizinin farkı temsil ediyor • Bir A dizisi bir B disine sadece harfların silme, ekleme ve ikame operasyonları kullanırken değiştirmek istiyoruz • Levenstein mesage – şu operasyonların minimum sayısıdır • A=“kitten” B=“sitting” : • kitten→sitten - ikame op • sitten →sittin - ikame op • sittin →sitting -ekleme op • Toplam: 3 operasyon (2 ikame 1 ekleme); Levenstein mesafe 3’ye eşittir

  48. Genel algoritma oluşturma: Örnekler • Levenstein mesafe diziler hizalama ve altdiziler arama için kullanılır (örneğin – genetik araştırmada), iki dizinin en büyük ortak parçasını bulmak için kullanılır

  49. Özet • Dinamik programlama, üretimin optimum kararların sırasını seçmesi için geliştirildi, ama bundan sonra çok uygulama bulundu • Bir süreç için optimum program veya plan seçmek lazım • Bütün kararların sırasını seçme yerine daha kolay tek-basamaklı karar yöntemi arıyoruz • Böyle tek-basamaklı kararlar için “dinamik değer fonksiyonu” kullanıyoruz

  50. Özet • V(P;t)’ye “dinamik” diyoruz çünkü zamanla değişiyor • V(P;t)’ye “değer” diyoruz çünkü P olan para için mümkünse optimum geliri belirliyor • “Bütün optimum planın sırası ne?” sorunun yerine “Gelecek planı bildiğimizi varsayarak şimdi karar ne olmalı?” diyer soruyoruz

More Related