Sunum yükleniyor. Lütfen bekleyiniz

Sunum yükleniyor. Lütfen bekleyiniz

Dynamic Programming Introduction to Algorithms MIT Press (Chapter 15)

Benzer bir sunumlar


... konulu sunumlar: "Dynamic Programming Introduction to Algorithms MIT Press (Chapter 15)"— Sunum transkripti:

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

2 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 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 4 Örnek: Kombinasyonlar nknk n-1 k n-1 k-1 = +

5 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 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 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 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 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 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!! 10011 1 demek 1. hattı seçildi j. (= n) adımda 1234n 0 demek 2. hatt seçildi j. (= 3) adımda

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

12 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 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 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 15 2. Özyinelemeli çözüm Optimal çözümün değerini altproblemlerin optimal çözümünün değeri cinsinden ifade edelim

16 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 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 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 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 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] 12345 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 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] 12345 j nin artan değerleri sırasıyla

22 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] 12345 9 1216 [1] 18 [1] 20 [2] 22 [2] 24 [1] 25 [1] 32 [1] 30 [2]

23 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] ← 2 12. 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 24 FASTEST-WAY( a, t, e, x, n ) (devam) 14.if f 1 [n] + x 1 ≤ f 2 [n] + x 2 15. then f* = f 1 [n] + x 1 16. l* = 1 17. else f* = f 2 [n] + x 2 18. l* = 2 Fabrika boyunca en kısa zaman hesabı

25 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] 12345 9 1216 [1] 18 [1] 20 [2] 22 [2] 24 [1] 25 [1] 32 [1] 30 [2] l* = 1

26 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 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 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 29 Örnek A 1  A 2  A 3 A 1 : 10 x 100 A 2 : 100 x 5 A 3 : 5 x 50 1. ((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 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 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 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 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 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 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 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 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 ) 1 1 23n 2 3 n j i

38 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 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-1 1 1 23n 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 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 5 1 1 236 2 3 6 i j 45 4 5 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 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 ) = 0 + 0 + 10 *100* 5 = 5,000 m[2, 3] = m[2, 2] + m[3, 3] + p 1 p 2 p 3 (A 2 A 3 ) = 0 + 0 + 100 * 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 ) 0 0 0 1 1 2 2 3 3 5000 1 25000 2 7500 2

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

43 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 1 1 23n 2 3 n j

44 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 1 1 23n 2 3 n j

45 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 33355- 3334- 333- 12- 1- - 1 1 236 2 3 6 i j 45 4 5 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 46 4. Optimal Çözümü Oluşturma (cont.) 33355- 3334- 333- 12- 1- - 1 1 236 2 3 6 i j 45 4 5 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 47 Örnek: A 1    A 6 33355- 3334- 333- 12- 1- - 1 1 236 2 3 6 i j 45 4 5 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 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 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 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 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 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 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 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 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 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 000000 0 0 0 0 0 y j: xmxm y1y1 y2y2 ynyn x1x1 x2x2 xixi j i 012n m 1 2 0 first second

57 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 000000 0 0 0 0 0 y j: D ACF A B xixi j i 012n m 1 2 0 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 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] + 1 9. 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 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 0126345 yjyj BDACAB 5 1 2 0 3 4 6 7 D A B xixi C B A B 0000000 0 0 0 0 0 0 0 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 3 4 1 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 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 0126345 yjyj BDACAB 5 1 2 0 3 4 6 7 D A B xixi C B A B 0000000 0 0 0 0 0 0 0 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 3 4 1 22 22 33 4 44

61 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 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 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


"Dynamic Programming Introduction to Algorithms MIT Press (Chapter 15)" indir ppt

Benzer bir sunumlar


Google Reklamları