Algoritmalar II Ders 4 Dinamik Programlama Yöntemi.

Slides:



Advertisements
Benzer bir sunumlar
Yığınlama Sıralaması (Heap Sort)
Advertisements

FIRAT ÜNİVERSİTESİ TEKNOLOJİ FAKÜLTESİ
Karmaşıklık Giriş.
Yinelemeli Algoritma Analizi & Asimptotik Notasyon
Ayrık Yapılar Algoritma Analizi.
MIT503 Veri Yapıları ve algoritmalar
Algoritmalar Ders 8 Dinamik Programlama.
Yığın ve Kuyruk.
Kontrol Çevrimleri FOR WHILE DO-WHILE IF-ELSE SWITCH-CASE-DEFAULT
FIRAT ÜNİVERSİTESİ TEKNOLOJİ FAKÜLTESİ
Özyinelemeli(Recursive) Algoritma Tasarımı
Algoritmalar DERS 3 Böl ve Fethet(Divide and Conquer) İkili arama
BPR152 ALGORİTMA VE PROGRAMLAMA - II
Algoritmalar DERS 4 Çabuk sıralama Böl ve fethet Bölüntüler
DERS 2 MATRİSLERDE İŞLEMLER VE TERS MATRİS YÖNTEMİ
MATLAB temel komutlar ve fonksiyonlar.
Özyineleme(Recursion)
YMT219: Veri Yapıları Ders Saatleri: Pazartesi 9:15-12, 17:30-20:15
BM-103 Programlamaya Giriş Güz 2014 (8. Sunu)
PHP'de Program Denetimi
JAVA’DA DİZİLER Dr.Galip AYDIN.
Python Aslı Ergün.
Öğretmenin; Adı Soyadı :
Algoritmalar ve Programlama I Ders 2: Akış Diyagramları
Chapter 7 Space and Time Tradeoffs Copyright © 2007 Pearson Addison-Wesley. All rights reserved.
Greedy Algorithms.
Dinamik programlama ve açgözlü yaklaşım soruları.
Bölüm10 İteratif İyileştirme Copyright © 2007 Pearson Addison-Wesley. All rights reserved.
Dinamik programlama ve Açgözlü algoritma
Dynamic Programming Introduction to Algorithms MIT Press (Chapter 15)
Algoritmalar II Ders 6 Açgözlü Algoritmalar.
0-1 Sırt Çantası Problemi
Algoritmalar II Ders 2 Dinamik Programlama Yöntemi.
MATLAB R2013’e Giriş.
Algoritmalar II Ders 5 Açgözlü Algoritmalar.
Algoritmalar II Ders 10 Dinamik Programlama ve Açgözlü Yaklaşım Soruları-2.
Algoritmalar II Ders 8 Açgözlü Algoritmalar.
Algoritmalar II Ders 13 Çizgelerde tüm ikililer arasında en kısa yollar.
Tüm ikililer arasında en kısa yollar
Algoritmalar II Ders 1: Alan zaman takası yöntemi.
Insertion Sort Fikir: Oyun kartlarını sıralamaya benzer.
Algoritmalar II Ders 7 Açgözlü Algoritmalar.
Çizgeler Çizge G=(V,E), ikilisine denir, burada V sonlu bir kümedir, E ise bu kümenin elemanları arasında ikili bir bağıntıdır. V kümesine G çizgesinin.
Algoritmalar II Ders 14 Çizgelerde tüm ikililer arasında en kısa yollar.
Algoritmalar II Ders 17 İteratif İyileştirme Yöntemi.
Derinlik öncelikli arama (Depth-first Search(DFS))
İleri Algoritma Analizi
9. Ders Tüm ikililer arasında en kısa yollar
Algoritmalar II Ders 3 Dinamik Programlama Yöntemi.
İleri Algoritma Analizi
İleri Algoritma Analizi
Algoritmalar II Ders 11 Çizgeler. Çizgelerin bilgisayarda gösterimi. BFS algoritması.
JAVA’DA DİZİLER. Özet  Dizi: belirli sayıda ve aynı veri türünden de ğ işkenlere aynı adla erişilmesini sa ğ layan bir yapıdır.  Dizilerde döngü işlemleri.
İleri Algoritma Analizi
Chapter 6 Dönüştür ve Yönet (Transform-and-Conquer)
Chapter 3 Brute Force Copyright © 2007 Pearson Addison-Wesley. All rights reserved.
Recursion (Özyineleme)
Algoritmalar II Ders 9 Dinamik Programlama ve Açgözlü Yaklaşım Soruları.
Algoritmalar II Ders 3 Dinamik Programlama Yöntemi.
İleri Algoritma Analizi
İleri Algoritma Analizi
Algoritmalar II Ders 2 Dinamik Programlama Yöntemi.
Ders 9: İkili arama ağaçları
8. Ders Tüm ikililer arasında en kısa yollar
Çizge Algoritmalari 10. Ders.
Chapter 4 Divide-and-Conquer
Bölüm 5 Azalt ve yönet (Decrease-and-Conquer)
10. Ders Floyd-Warshal algoritması
Kelime (Text) İşleme Algoritmaları
Sunum transkripti:

Algoritmalar II Ders 4 Dinamik Programlama Yöntemi

Introduction to Algorithms MIT Press (Chapter 15) Dynamic Programming Introduction to Algorithms MIT Press (Chapter 15)

Örnek3: En uzun ortak altdizi İki karakter dizisi veriliyor X = x1, x2, …, xm Y = y1, y2, …, yn X ve Y dizilerinin en uzun ortak altdizisini (LCS) bulmak gerekir Örnek.: X = A, B, C, B, D, A, B X dizisinin alt dizileri: Elemanlarının sırası bozulmadan alınmasıdır A, B, D, B, C, D, B, ...

Örnek X = A, B, C, B, D, A, B X = A, B, C, B, D, A, B Y = B, D, C, A, B, A Y = B, D, C, A,B, A B, C, B, A ve B, D, A, B X ve Y dizilerinin en uzun ortak altdizileridir(uzunluk = 4) B, C, A, ortak altdizidir ama X ve Y için en uzun ortak altdizi değil

Brute-Force Çözüm X dizisinin tüm altdizileri için, bu altdizinin Y dizisinin de altdizisi olup olmadığını kontrol et X dizisinin 2m tane altdizisini kontrol etmek gerekir Her altdizi için (n) zaman geçer Önce Y nin ilk harfi, sonra 2. ve s. kontrol edilir İşlem zamanı: (n2m)

Seçim X = A, B, D, E Y = Z, B, E Seçim: durum yukarıdaki gibi ise (E) yi ortak diziye al ve dizilerden sil ve kalan altproblemi çöz X = A, B, D, G Y = Z, B, D Seçim: önce X den son elemanı çıkar kalan altproblemi çöz, sonra da Y için aynı işlemi yap

Notasyonlar X = x1, x2, …, xm dizisi için i. önsöz tanımlayalım i = 0, 1, 2, …, m için Xi = x1, x2, …, xi c[i, j] = Xi = x1, x2, …, xi ve Yj = y1, y2, …, yj dizileirnin en uzun ortak altdizisinin uzunluğu

Özyinelemeli çözüm c[i, j] = c[i - 1, j - 1] + 1 Durum 1: xi = yj Örnek.: Xi = A, B, D, E Yj = Z, B, E xi = yj ise Xi-1 ve Yj-1 için problemi çöz Bunu yapabilmemizin nedeni: optimal çözüm, altproblemlerin de optimal çözümünü içermektedir c[i, j] = c[i - 1, j - 1] + 1

Özyinelemeli çözüm c[i, j] = max { c[i - 1, j], c[i, j-1] } Case 2: xi  yj Örnek: Xi = A, B, D, G Yj = Z, B, D 2 problem çözmeliyiz Xi-1 ve Yj için: Xi-1 = A, B, D ve Yj = Z, B, D Xi ve Yj-1 için: Xi = A, B, D, G and Yj = Z, B Bunu yapabilmemizin nedeni: optimal çözüm, altproblemlerin de optimal çözümünü içermektedir c[i, j] = max { c[i - 1, j], c[i, j-1] }

3. LCS uzunluğu hesaplama 0 if i = 0 or j = 0 c[i, j] = c[i-1, j-1] + 1 if xi = yj max(c[i, j-1], c[i-1, j]) if xi  yj 1 2 n yj: y1 y2 yn xi 1 x1 first 2 x2 second i m xm j

Ek bilgi b[i, j] matrisi: [i, j] altproblemi için optimal değeri elde etmekiçin hangi seçimin yapıldığını gösterir If xi = yj b[i, j] = “ ” Else, if c[i - 1, j] ≥ c[i, j-1] b[i, j] = “  ” else b[i, j] = “  ” 0 if i,j = 0 c[i, j] = c[i-1, j-1] + 1 if xi = yj max(c[i, j-1], c[i-1, j]) if xi  yj 1 2 3 n b & c: yj: A C D F xi 1 A 2 B c[i,j-1] c[i-1,j] i 3 C m D j

LCS-LENGTH(X, Y, m, n) Running time: (mn) for i ← 1 to m do c[i, 0] ← 0 for j ← 0 to n do c[0, j] ← 0 do for j ← 1 to n do if xi = yj then c[i, j] ← c[i - 1, j - 1] + 1 b[i, j ] ← “ ” else if c[i - 1, j] ≥ c[i, j - 1] then c[i, j] ← c[i - 1, j] b[i, j] ← “↑” else c[i, j] ← c[i, j - 1] b[i, j] ← “←” return c and b The length of the LCS if one of the sequences is empty is zero Case 1: xi = yj Case 2: xi  yj Running time: (mn)

Örnek X = A, B, C, B, D, A, B Y = B, D, C, A, B, A If xi = yj 0 if i = 0 or j = 0 c[i, j] = c[i-1, j-1] + 1 if xi = yj max(c[i, j-1], c[i-1, j]) if xi  yj X = A, B, C, B, D, A, B Y = B, D, C, A, B, A 1 2 3 4 5 6 If xi = yj b[i, j] = “ ” Else if c[i - 1, j] ≥ c[i, j-1] b[i, j] = “  ” else b[i, j] = “  ” yj B D C A B A xi 1 A    1 1 1 2 B 1  1 2 1 1 2 3 C  1 2 2 4 B 1  2 3 3 5 D  1 2 3 6 A  1 2 3 4 7 B 1  2 3 4

4.LCS oluşturma b[m, n] den başla ve okları takip et b[i, j] matrisinde durumu ise  xi = yj 1 2 3 4 5 6 yj B D C A B A xi 1 A    1 1 1 2 B 1  1 2 1 1 2 3 C  1 2 2 4 B 1  2 3 3 5 D  1 2 3 6 A  1 2 3 4 7 B 1  2 3 4

PRINT-LCS(b, X, i, j) if i = 0 or j = 0 Running time: (m + n) then return if b[i, j] = “ ” then PRINT-LCS(b, X, i - 1, j - 1) print xi elseif b[i, j] = “↑” then PRINT-LCS(b, X, i - 1, j) else PRINT-LCS(b, X, i, j - 1) Initial call: PRINT-LCS(b, X, length[X], length[Y]) Running time: (m + n)