Dynamic Programming Introduction to Algorithms MIT Press (Chapter 15)

Slides:



Advertisements
Benzer bir sunumlar
Karmaşıklık Giriş.
Advertisements

Yinelemeli Algoritma Analizi & Asimptotik Notasyon
MIT503 Veri Yapıları ve algoritmalar
Algoritmalar Ders 8 Dinamik Programlama.
MIT503 Veri Yapıları ve algoritmalar Algoritma Oluşturma – Açgözlü algoritmalar ve buluşsallar Y. Doç. Yuriy Mishchenko.
Kofaktör Matrisler Determinantlar Minör.
MATRİSLER Şekildeki gibi bir cismin elemanlarından oluşan sıralı tabloya m x n tipinde bir matris denir. i= 1,2,3, .. , m ve j = 1,2,3, ... , n olmak üzere,
Prof. Dr. Halil İbrahim Karakaş
FIRAT ÜNİVERSİTESİ TEKNOLOJİ FAKÜLTESİ
Özyinelemeli(Recursive) Algoritma Tasarımı
Algoritmalar DERS 3 Böl ve Fethet(Divide and Conquer) İkili arama
İŞ SIRALAMA VE ÇİZELGELEME DERS 4
İŞ SIRALAMA VE ÇİZELGELEME DERS 5
JAVA’DA DİZİLER Dr.Galip AYDIN.
Python Aslı Ergün.
Bölüm 7 - Diziler İçerik 7.1 Giriş 7.2 Diziler 7.3 Dizileri Tanımlama 7.4 Dizileri Kullanan Örnekler 7.5 Referanslar ve Referans Parametreler.
Lineer Cebir Prof.Dr.Şaban EREN
DEVRE TEOREMLERİ.
Öğretmenin; Adı Soyadı :
Prof. Dr. Halil İbrahim Karakaş
Algoritmalar ve Programlama I Ders 2: Akış Diyagramları
BM-305 Mikrodenetleyiciler Güz 2015 (6. Sunu) (Yrd. Doç. Dr. Deniz Dal)
SİMPLEKS METOT Müh. Ekonomisi.
AVL Trees / Slide 1 Silme * Anahtar hedefi silmek için, x yaprağında buluruz ve sonra sileriz. * Dikkat edilmesi gereken iki durum vardır. (1) Hedef bazi.
Chapter 7 Space and Time Tradeoffs Copyright © 2007 Pearson Addison-Wesley. All rights reserved.
Elektrik Devrelerinin Temelleri Neslihan Serap Şengör Devreler ve Sistemler A.B.D. oda no:1107 tel no:
Elektrik Devrelerinin Temelleri Neslihan Serap Şengör Devreler ve Sistemler A.B.D. oda no:1107 tel no:
Doğrusal Programlama Linear Programming
5. HAFTA Mart Discussion: comp.soft-sys.matlab An unmoderated newsgroup that focuses on the.
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
BİLGİSAYAR PROGRAMLAMA DERSİ 6. DERS NOTU Konu: Matlab’ de Diziler ve Matrisler.
Algoritmalar II Ders 6 Açgözlü Algoritmalar.
0-1 Sırt Çantası Problemi
Algoritmalar II Ders 2 Dinamik Programlama Yöntemi.
Algoritmalar II Ders 5 Açgözlü Algoritmalar.
BİLGİSAYAR PROGRAMLAMA Ders 6: Diziler
Algoritmalar II Ders 10 Dinamik Programlama ve Açgözlü Yaklaşım Soruları-2.
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.
Algoritmalar II Ders 4 Dinamik Programlama Yöntemi.
Algoritmalar II Ders 14 Çizgelerde tüm ikililer arasında en kısa yollar.
Algoritmalar II Ders 17 İteratif İyileştirme Yöntemi.
İ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
Döngüler ve Shift Register
İleri Algoritma Analizi
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.
Chapter 6 Dönüştür ve Yönet (Transform-and-Conquer)
Chapter 3 Brute Force Copyright © 2007 Pearson Addison-Wesley. All rights reserved.
Discussion: comp.soft-sys.matlab
Recursion (Özyineleme)
Algoritmalar II Ders 9 Dinamik Programlama ve Açgözlü Yaklaşım Soruları.
Algoritmalar II Ders 3 Dinamik Programlama Yöntemi.
Chapter 5 – Balancing of accounts
İleri Algoritma Analizi
İleri Algoritma Analizi
Algoritmalar II Ders 2 Dinamik Programlama Yöntemi.
8. Ders Tüm ikililer arasında en kısa yollar
Bölüm 5 Azalt ve yönet (Decrease-and-Conquer)
10. Ders Floyd-Warshal algoritması
Examples: In the Figure, the three points and coordinates are given that is obtained with CAD program. If these three points are represented by the curve.
Sunum transkripti:

Dynamic Programming Introduction to Algorithms MIT Press (Chapter 15)

2 Dinamik Programlama Algoritma tasarlama yöntemidir (böl ve yönet yöntemine benzer) Böl ve yönet yöntemi –Problemi bağımsız altproblemlere böler –Her altproblemi özyinelemeli olarak çözer –Altproblemlerin çözümlerini birleştirerek ana problemin çözümünü bulur

3 Dinamik Programlama Altproblemler bağımsız olmadığı durumlarda kullanılır –Altproblemler altaltproblemleri paylaşabilriler Örnek: Kombinasyonlar –Böl ve yönet yönteminde aynı altproblem tekrar tekrar çözülecektir –Dinamik programlama yönteminde her altproblem sadece bir defa çözülecek ve sonucu bir tabloda tutulacaktır nknk n-1 k n-1 k-1 = + n1n1 nnnn =n=n =1

4 Örnek: Kombinasyonlar nknk n-1 k n-1 k-1 = +

5 Dinamik programlama Optimizasyon problemlerinde kullanılır –Bir sürü seçenek arasından en iyi olanı (optimal çözümü) bulmak gerekir –Yöntem optimal değeri (minimum veya maksimum) olan çözümü buluyor –Optimal değeri veren çok sayıda çözüm olabilir –Amaç: Bir optimal çözümü bulmaktır

6 Dinamik Programlama Yöntemi 1.Optimal çözümün yapısını karakterize et 2.Optimal çözümün değerini özyinelemeli tanımla 3.Optimal çözümün değerlerini aşağıdan yukarı hesapla 4.Hesaplanmış bilgilerden yola çıkarak optimal çözümü oluştur (her zaman gerekli)

7 Montaj hattı planlama Araba fabrikasının 2 montaj hattı olsun –Her hatta n tane terminal vardır : S 1,1,..., S 1,n ve S 2,1,..., S 2,n –Hatlardaki uygun terminallerde S 1, j ve S 2, j aynı iş yapılır ama bu iş için gerekli süreler a 1, j ve a 2, j farklı olabilir –Giriş zamanları: e 1 ve e 2 ; çıkış zamanları : x 1 and x 2

8 Montaj hattı planlama Her terminalden aşağıdakilerden biri yapılır: –Aynı hatta kalınır ve bunun bir bedeli olmaz (yani eksta süre geçmez) veya –Diğer hatta geçilir: S i,j den sonra gerekli süre t i,j, j = 1,..., n - 1

9 Montaj hattı planlama Problem: 1. veya 2. hattayken hangi terminali seçelim ki bir arabanın üretimi için geçen toplam süre en az olsun?

10 Bir çözüm Brute force –Tüm seçilebilir terminalleri numarala –Tüm durumları hesapla ve en iyisini seç Çözüm: – 2 n durum vardır ways –Büyük n için hesaplamak imkansız!! demek 1. hattı seçildi j. (= n) adımda 1234n 0 demek 2. hatt seçildi j. (= 3) adımda

11 1. Optimal Çözümün Yapısı Minimum zaman nasıl hesaplanır?

12 1. Optimal Çözümün Yapısı S 1,j terminalinde bulunduğumuzu varsayalım –S 1, j terminaline gelmek için 2 seçeneğimiz var S 1, j - 1, den direk S 1, j ye geçmişiz S 2, j - 1, den transferle S 1, j ye gelmişiz a 1,j a 1,j-1 a 2,j-1 t 2,j-1 S 1,j S 1,j-1 S 2,j-1 Hatt1 Hatt 2

13 1.Optimal Çözümün Yapısı S 1, j ye gelen en kısa yolun S 1, j – 1 den geçtiğini varsayalım –Bu durumda S 1, j – 1 yi seçmek gerekir –ve S 1, j - 1, ye gelen en kısa yolu bulmak gerekir Benzer olarak S 2, j – 1 için yapılır a 1,j a 1,j-1 a 2,j-1 t 2,j-1 S 1,j S 1,j-1 S 2,j-1 Optimal altyapı Hatt 1 Line 2

14 Optimal Altyapı Genelleme: “ S 1, j den geçen en kısa yolu bulunuz ” probleminin çözümü “ S 1, j - 1 ve S 2, j – 1 ye gelen en kısa yolu bulunuz “ probleminin çözümüne dönüşür Bu özelliğe optimal altyapı özelliği denir Bu özelliği kullanarak altproblemlerin optimal çözümünden ana problemin optimal çözümü bulunur

15 2. Özyinelemeli çözüm Optimal çözümün değerini altproblemlerin optimal çözümünün değeri cinsinden ifade edelim

16 2. Özyinelemeli çözüm (devam) Tanımlar: –f* : tüm fabrika boyunca en kısa zaman –f i [j] : başlangıç noktadan S i,j ye gelmek için geçen en kısa zaman f* = min (f 1 [n] + x 1, f 2 [n] + x 2 )

17 2. Özyinelemeli çözüm (devam) Temel durum: j = 1, i=1,2 f 1 [1] = e 1 + a 1,1 f 2 [1] = e 2 + a 2,1

18 2. Özyinelemeli çözüm (devam) Genel durum: j = 2, 3, …,n, ve i = 1, 2 S 1, j den geçen en kısa yol: –a S 1, j - 1 den geçer, sonra da direk S 1, j ye gelir, yani f 1 [j - 1] + a 1,j –ya da S 2, j - 1 den geçer, sonra da 2. hattan 1. hatta transfer olarak S 1, j ye gelir, yani f 2 [j -1] + t 2,j-1 + a 1,j f 1 [j] = min(f 1 [j - 1] + a 1,j,f 2 [j -1] + t 2,j-1 + a 1,j ) a 1,j a 1,j-1 a 2,j-1 t 2,j-1 S 1,j S 1,j-1 S 2,j-1 Hatt1 Hatt 2

19 2. Özyinelemeli çözüm (devam) e 1 + a 1,1 if j = 1 f 1 [j] = min(f 1 [j - 1] + a 1,j,f 2 [j -1] + t 2,j-1 + a 1,j ) if j ≥ 2 e 2 + a 2,1 if j = 1 f 2 [j] = min(f 2 [j - 1] + a 2,j,f 1 [j -1] + t 1,j-1 + a 2,j ) if j ≥ 2

20 3. Optimal değerleri hesapla f* = min (f 1 [n] + x 1, f 2 [n] + x 2 ) f 1 [j] = min(f 1 [j - 1] + a 1,j,f 2 [j -1] + t 2,j-1 + a 1,j ) f 2 [j] = min(f 2 [j - 1] + a 2,j,f 1 [j -1] + t 1,j-1 + a 2,j ) Yukarıdan aşağıya çözüm yine de üstel işlem zamanı gerektirir f 1 [j] f 2 [j] f 1 (5) f 2 (5) f 1 (4) f 2 (4) f 1 (3) f 2 (3) 2 defa 4 defa f 1 (2) f 2 (2) f 1 (1) f 2 (1)

21 3. Optimal çözümü hesaplama Herj ≥ 2 için f i [j] değeri sadece f 1 [j – 1] ve f 2 [j - 1] değerlerine bağlıdır Fikir: f i [j] değerlerini aşağıdaki gibi hesapla: Aşağıdan yukarıya hesaplama –Önce altproblemlerin optimal çözümlerini bul –Altproblemlerin optimal çözümlerinden problemin optimal çözümünü bul f 1 [j] f 2 [j] j nin artan değerleri sırasıyla

22 Örnek e 1 + a 1,1, if j = 1 f 1 [j] = min(f 1 [j - 1] + a 1,j,f 2 [j -1] + t 2,j-1 + a 1,j ) if j ≥ 2 f* = 35 [1] f 1 [j] f 2 [j] [1] 18 [1] 20 [2] 22 [2] 24 [1] 25 [1] 32 [1] 30 [2]

23 FASTEST-WAY( a, t, e, x, n ) 1. f 1 [1] ← e 1 + a 1,1 2. f 2 [1] ← e 2 + a 2,1 3. for j ← 2 to n 4. do if f 1 [j - 1] + a 1,j ≤ f 2 [j - 1] + t 2, j-1 + a 1, j 5. then f 1 [j] ← f 1 [j - 1] + a 1, j 6. l 1 [j] ← 1 7. else f 1 [j] ← f 2 [j - 1] + t 2, j-1 + a 1, j 8. l 1 [j] ← 2 9. if f 2 [j - 1] + a 2, j ≤ f 1 [j - 1] + t 1, j-1 + a 2, j 10. then f 2 [j] ← f 2 [j - 1] + a 2, j 11. l 2 [j] ← else f 2 [j] ← f 1 [j - 1] + t 1, j-1 + a 2, j 13. l 2 [j] ← 1 Başlangıç değerler f 1 ve f 2 Hesapla: f 1 [j] ve l 1 [j] Hesapla f 2 [j] ve l 2 [j] O(N)

24 FASTEST-WAY( a, t, e, x, n ) (devam) 14.if f 1 [n] + x 1 ≤ f 2 [n] + x then f* = f 1 [n] + x l* = else f* = f 2 [n] + x l* = 2 Fabrika boyunca en kısa zaman hesabı

25 4. Optimal çözümü oluşturma Alg.: PRINT-STATIONS( l, n ) i ← l* print “line ” i “, station ” n for j ← n downto 2 do i ← l i [j] print “line ” i “, station ” j - 1 f 1 [j]/l 1 [j] f 2 [j]/l 2 [j] [1] 18 [1] 20 [2] 22 [2] 24 [1] 25 [1] 32 [1] 30 [2] l* = 1

26 Matris-Zincir Çarpımı Problem:  A 1, A 2, …, A n  matrisleri veriliyor. Aşağıdaki çarpımı hesapla: A 1  A 2  A n Matrislerin çarpılabilmesi koşulu: C = A  B C=A 1  A 2  A i  A i+1  A n col A = row B col i = row i+1 row C = row A row C = row A1 col C = col B col C = col An

27 MATRIX-MULTIPLY(A, B) if columns[A]  rows[B] then error “incompatible dimensions” else for i  1 to rows[A] do for j  1 to columns[B] do C[i, j] = 0 for k  1 to columns[A] do C[i, j]  C[i, j] + A[i, k] B[k, j] rows[A] cols[B] i j j i A B C * = k k rows[A]  cols[A]  cols[B] multiplications

28 Matrisler-Zincir Çarpımı Aşağıdaki matrisleri hangi sıra ile çarpmalıyız? A 1  A 2  A n Yani parantezleri nereye koymalıyız? Örnek: A 1  A 2  A 3 = ((A 1  A 2 )  A 3 ) = (A 1  (A 2  A 3 )) Bu çarpımlardan hangisini seçelim? –Seçilecek sıra çarpma maliyetini etkiler

29 Örnek A 1  A 2  A 3 A 1 : 10 x 100 A 2 : 100 x 5 A 3 : 5 x ((A 1  A 2 )  A 3 ): A 1  A 2 = 10 x 100 x 5 = 5,000 (10 x 5) ((A 1  A 2 )  A 3 ) = 10 x 5 x 50 = 2,500 Toplam: 7,500 çarpma var 2. (A 1  (A 2  A 3 )): A 2  A 3 = 100 x 5 x 50 = 25,000 (100 x 50) (A 1  (A 2  A 3 )) = 10 x 100 x 50 = 50,000 Toplam: 75,000 çarpma var çok önemli fark var!!

30 Matris-Zincir Çarpımı: Problem Tanımı  A 1, A 2, …, A n , matrisleri veriliyor, burada A i matrisinin boyutları p i-1 x p i dir. A 1  A 2  A n çarpımında parantezleri öyle yerleştiriniz ki toplam çarpım sayısı en az olsun. A 1  A 2  A i  A i+1  A n p 0 x p 1 p 1 x p 2 p i-1 x p i p i x p i+1 p n-1 x p n

31 Toplam parantezleme sayısı? Tüm durumları denemek çok verimsizdir! Matematiksel hesaplamalarla Ω(4 n /n 3/2 ) olduğu gösterilebilir (sayfa 333 CLRS ders kitabında)

32 1. Optimal Parentezleme yapısı Notasyon: A i…j = A i A i+1  A j, i  j A i…j için optimal parantezleme A k ile A k+1 arasında olsun, burada i  k < j A i…j = A i A i+1  A j = A i A i+1  A k A k+1  A j = A i…k A k+1…j

33 Optimal Altyapı A i…j = A i…k A k+1…j A i…k çarpımında parantezler optimal olmalıdır Eğer A i…k çarpımı optimal değilse, parantezlerin yerini değiştirerek daha az çarpım elde edebiliriz bu da A i…j çarpımını daha ucuza yapmamızı sağlar, yani optimal çözümden daha az maliyetli bir çözüm bulunur  çelişki! Matris-zinciri çarpımının optimal çözümü altproblemlerin optimal çözümlerini içermektedir

34 2. Özyinelemeli çözüm Altproblem: Aşağıdaki problemde optimal parantezlemeyi bulunuz A i…j = A i A i+1  A j 1  i  j  n için m[i, j] = A i…j çarpımını hesaplamak için gereken minimum çarpma sayısı –tam problem (A 1..n ): m[1, n] –i = j: A i…i = A i  m[i, i] = 0, i = 1, 2, …, n için

35 2. Özyinelemeli çözüm Altproblemde parantezlemeye bakalım A i…j = A i A i+1  A j 1  i  j  n için = A i…k A k+1…j i  k < j için A i A i+1  A j için optimal parantezlemenin k da olduğunu varsayalım (i  k < j) m[i, j] = A i…k için minimum çarpım sayısı A i…k A k…j için çarpma sayısı A k+1…j için min sayı m[i, k]m[k+1,j] p i-1 p k p j m[i, k] + m[k+1, j] + p i-1 p k p j

36 2. Özyinelemeli çözüm (devam) m[i, j] = m[i, k] + m[k+1, j] + p i-1 p k p j k nın değerini bilmiyoruz –k için j – i tane imkan var : k = i, i+1, …, j-1 Förmül aşağıdaki gibi olur: 0 if i = j m[i, j] = min {m[i, k] + m[k+1, j] + p i-1 p k p j } if i < j i  k<j

37 3. Optimal değerleri hesapla 0 if i = j m[i, j] = min {m[i, k] + m[k+1, j] + p i-1 p k p j } if i < j i  k<j Yine de optimal çözümü hesaplama üstel zaman alabilir! Kaç tane altproblem var? –Parentezle A i…j 1  i  j  n için – i ve j nin her seçimi için bir problem var   (n 2 ) n 2 3 n j i

38 3. Optimal değerleri hesapla (devam) 0 if i = j m[i, j] = min {m[i, k] + m[k+1, j] + p i-1 p k p j } if i < j i  k<j m[1..n, 1..n] tablosunu nasıl dolduracağız? – m[i, j] tablosundaki hangi değerlerin A i…j = A i…k A k+1…j çarpımında kullanıldığını belirle –Altproblemin boyutu problemin boyutundan azdır –Fikir: m tablosunu öyle doldurunuz ki uzunluğu artan problemi çözme imkanı versin

39 3. Optimal değerleri hesapla (devam) 0 if i = j m[i, j] = min {m[i, k] + m[k+1, j] + p i-1 p k p j } if i < j i  k<j Uzunluk = 1: i = j, i = 1, 2, …, n Uzunluk = 2: j = i + 1, i = 1, 2, …, n n 2 3 n birinci ikinci Satırları aşağıdan yukarı, soldan sağa doldur m[1, n] problemin optimal çözümünü verir i j

40 Örnek: min {m[i, k] + m[k+1, j] + p i-1 p k p j } m[2, 2] + m[3, 5] + p 1 p 2 p 5 m[2, 3] + m[4, 5] + p 1 p 3 p 5 m[2, 4] + m[5, 5] + p 1 p 4 p i j m[2, 5] = min m[i, j] değerleri sadece önceden hesaplanmış değerlere bağlıdır k = 2 k = 3 k = 4

41 Örnek min {m[i, k] + m[k+1, j] + p i-1 p k p j } Compute A 1  A 2  A 3 A 1 : 10 x 100 (p 0 x p 1 ) A 2 : 100 x 5 (p 1 x p 2 ) A 3 : 5 x 50 (p 2 x p 3 ) m[i, i] = 0 for i = 1, 2, 3 m[1, 2] = m[1, 1] + m[2, 2] + p 0 p 1 p 2 (A 1 A 2 ) = *100* 5 = 5,000 m[2, 3] = m[2, 2] + m[3, 3] + p 1 p 2 p 3 (A 2 A 3 ) = * 5 * 50 = 25,000 m[1, 3] = min m[1, 1] + m[2, 3] + p 0 p 1 p 3 = 75,000 (A 1 (A 2 A 3 )) m[1, 2] + m[3, 3] + p 0 p 2 p 3 = 7,500 ((A 1 A 2 )A 3 )

42 Matrix-Chain-Order(p) O(N 3 )

43 4. Optimal Çözümü oluştur Benzer s matrisinde k nın optimal değerleri tutulur s[i, j] = k, burada optimal A i..j çarpımının optimal parantezi A k ve A k+1 arasındadır k n 2 3 n j

44 4. Optimal Çözüm Oluşturma s[1, n] is associated with the entire product A 1..n –Son parantez k = s[1, n] de olacak, yani A 1..n = A 1..s[1, n]  A s[1, n]+1..n –Her altproblem için özyinelemeli olarak k değerlerini kullanrak optimal parentezlemeyi bul n 2 3 n j

45 4. Optimal Çözümü Oluşturma s[i, j] = k, burada A i A i+1  A j parantezlemesi A k ve A k+1 arasındadır i j s[1, n] = 3  A 1..6 = A 1..3 A 4..6 s[1, 3] = 1  A 1..3 = A 1..1 A 2..3 s[4, 6] = 5  A 4..6 = A 4..5 A 6..6

46 4. Optimal Çözümü Oluşturma (cont.) i j PRINT-OPT-PARENS( s, i, j ) if i = j then print “A” i else print “(” PRINT-OPT-PARENS( s, i, s[i, j] ) PRINT-OPT-PARENS( s, s[i, j] + 1, j ) print “)”

47 Örnek: A 1    A i j PRINT-OPT-PARENS( s, i, j ) if i = j then print “A” i else print “(” PRINT-OPT-PARENS( s, i, s[i, j] ) PRINT-OPT-PARENS( s, s[i, j] + 1, j ) print “)” P-O-P(s, 1, 6)s[1, 6] = 3 i = 1, j = 6 “(“ P-O-P (s, 1, 3) s[1, 3] = 1 i = 1, j = 3 “(“ P-O-P(s, 1, 1)  “A 1 ” P-O-P(s, 2, 3) s[2, 3] = 2 i = 2, j = 3 “(“ P-O-P (s, 2, 2)  “A 2 ” P-O-P (s, 3, 3)  “A 3 ” “)” (( ( A 4 A 5 ) A 6 ) )A1A1 (A2A2 A3A3 )) … ( s[1..6, 1..6]

48 En uzun ortak altdizi İki karakter dizisi veriliyor X =  x 1, x 2, …, x m  Y =  y 1, y 2, …, y n  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 ,...

49 Örnek X =  A, B, C, B, D, A, B  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

50 Brute-Force Çözüm X dizisinin tüm altdizileri için, bu altdizinin Y dizisinin de altdizisi olup olmadığını kontrol et X dizisinin 2 m 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ı:  (n2 m )

51 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

52 Notasyonlar X =  x 1, x 2, …, x m  dizisi için i. önsöz tanımlayalım i = 0, 1, 2, …, m için X i =  x 1, x 2, …, x i  c[i, j] = X i =  x 1, x 2, …, x i  ve Y j =  y 1, y 2, …, y j  dizileirnin en uzun ortak altdizisinin uzunluğu

53 Özyinelemeli çözüm Durum 1: x i = y j Örnek.: X i =  A, B, D, E  Y j =  Z, B, E  –x i = y j ise X i-1 ve Y j-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

54 Özyinelemeli çözüm Case 2: x i  y j Örnek: X i =  A, B, D, G  Y j =  Z, B, D  –2 problem çözmeliyiz X i-1 ve Y j için: X i-1 =  A, B, D  ve Y j =  Z, B, D  X i ve Y j-1 için: X i =  A, B, D, G  and Y j =  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] }

55 Overlapping Subproblems To find a LCS of X and Y –we may need to find the LCS between X and Y n-1 and that of X m-1 and Y –Both the above subproblems has the subproblem of finding the LCS of X m-1 and Y n-1 Subproblems share subsubproblems

56 3. LCS uzunluğu hesaplama 0if i = 0 or j = 0 c[i, j] = c[i-1, j-1] + 1if x i = y j max(c[i, j-1], c[i-1, j])if x i  y j y j: xmxm y1y1 y2y2 ynyn x1x1 x2x2 xixi j i 012n m first second

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

58 LCS-LENGTH(X, Y, m, n) 1. for i ← 1 to m 2. do c[i, 0] ← 0 3. for j ← 0 to n 4. do c[0, j] ← 0 5. for i ← 1 to m 6. do for j ← 1 to n 7. do if x i = y j 8. then c[i, j] ← c[i - 1, j - 1] b[i, j ] ← “ ” 10. else if c[i - 1, j] ≥ c[i, j - 1] 11. then c[i, j] ← c[i - 1, j] 12. b[i, j] ← “ ↑ ” 13. else c[i, j] ← c[i, j - 1] 14. b[i, j] ← “ ← ” 15.return c and b The length of the LCS if one of the sequences is empty is zero Case 1: x i = y j Case 2: x i  y j Running time:  (mn)

59 Example X =  A, B, C, B, D, A  Y =  B, D, C, A, B, A  0 if i = 0 or j = 0 c[i, j] = c[i-1, j-1] + 1 if x i = y j max(c[i, j-1], c[i-1, j]) if x i  y j yjyj BDACAB D A B xixi C B A B 00 00 00 1 11 1 1 11 11 11 2 22 11 11 2 22 22 22 1 11 22 22 3 33 11 2 22 22 33 33 11 22 33 2 22 22 33 4 44 If x i = y j b[i, j] = “ ” Else if c[i - 1, j] ≥ c[i, j-1] b[i, j] = “  ” else b[i, j] = “  ”

60 4.LCS oluşturma b[m, n] den başla ve okları takip et b[i, j] matrisinde durumu ise  x i = y j yjyj BDACAB D A B xixi C B A B 00 00 00 1 11 1 1 11 11 11 2 22 11 11 2 22 22 22 1 11 22 22 3 33 11 2 22 22 33 33 11 22 33 2 22 22 33 4 44

61 PRINT-LCS(b, X, i, j) 1. if i = 0 or j = 0 2. then return 3. if b[i, j] = “ ” 4. then PRINT-LCS( b, X, i - 1, j - 1 ) 5. print x i 6. elseif b[i, j] = “ ↑ ” 7. then PRINT-LCS( b, X, i - 1, j ) 8. else PRINT-LCS( b, X, i, j - 1 ) Initial call: PRINT-LCS( b, X, length[X], length[Y] ) Running time:  (m + n)

62 Improving the Code What can we say about how each entry c[i, j] is computed? –It depends only on c[i -1, j - 1], c[i - 1, j], and c[i, j - 1] –Eliminate table b and compute in O(1) which of the three values was used to compute c[i, j] –We save  (mn) space from table b –However, we do not asymptotically decrease the auxiliary space requirements: still need table c

63 Improving the Code If we only need the length of the LCS –LCS-LENGTH works only on two rows of c at a time The row being computed and the previous row –We can reduce the asymptotic space requirements by storing only these two rows