Sunum yükleniyor. Lütfen bekleyiniz

Sunum yükleniyor. Lütfen bekleyiniz

Algoritmalar II Ders 3 Dinamik Programlama Yöntemi.

Benzer bir sunumlar


... konulu sunumlar: "Algoritmalar II Ders 3 Dinamik Programlama Yöntemi."— Sunum transkripti:

1 Algoritmalar II Ders 3 Dinamik Programlama Yöntemi

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

3 Örnek2: Matris-Zincir Çarpımı
Problem: A1, A2, …, An matrisleri veriliyor. Aşağıdaki çarpımı hesapla: A1  A2  An Matrislerin çarpılabilmesi koşulu: C = A  B C=A1  A2  Ai  Ai+1  An colA = rowB coli = rowi+1 rowC = rowA rowC = rowA1 colC = colB colC = colAn

4 rows[A]  cols[A]  cols[B]
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[A]  cols[B] multiplications k j cols[B] j cols[B] k i i * = A B rows[A] C rows[A]

5 Matrisler-Zincir Çarpımı
Aşağıdaki matrisleri hangi sıra ile çarpmalıyız? A1  A2  An Yani parantezleri nereye koymalıyız? Örnek: A1  A2  A3 = ((A1  A2)  A3) = (A1  (A2  A3)) Bu çarpımlardan hangisini seçelim? Seçilecek sıra çarpma maliyetini etkiler

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

7 Matris-Zincir Çarpımı: Problem Tanımı
A1, A2, …, An, matrisleri veriliyor, burada Ai matrisinin boyutları pi-1x pi dir. A1  A2  An çarpımında parantezleri öyle yerleştiriniz ki toplam çarpım sayısı en az olsun. A1  A2  Ai  Ai+1  An p0 x p1 p1 x p pi-1 x pi pi x pi pn-1 x pn

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

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

10 Optimal Altyapı Ai…j = Ai…k Ak+1…j
Ai…k çarpımında parantezler optimal olmalıdır Eğer Ai…k çarpımı optimal değilse, parantezlerin yerini değiştirerek daha az çarpım elde edebiliriz bu da Ai…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

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

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

13 2. Özyinelemeli çözüm (devam)
m[i, j] = m[i, k] m[k+1, j] pi-1pkpj 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: if i = j m[i, j] = min {m[i, k] + m[k+1, j] + pi-1pkpj} if i < j ik<j

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

15 3. Optimal değerleri hesapla (devam)
if i = j m[i, j] = min {m[i, k] + m[k+1, j] + pi-1pkpj} if i < j ik<j m[1..n, 1..n] tablosunu nasıl dolduracağız? m[i, j] tablosundaki hangi değerlerin Ai…j = Ai…k Ak+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

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

17 Örnek: min {m[i, k] + m[k+1, j] + pi-1pkpj}
m[2, 2] + m[3, 5] + p1p2p5 m[2, 3] + m[4, 5] + p1p3p5 m[2, 4] + m[5, 5] + p1p4p5 k = 2 m[2, 5] = min k = 3 k = 4 1 2 3 4 5 6 6 5 m[i, j] değerleri sadece önceden hesaplanmış değerlere bağlıdır 4 j 3 2 1 i

18 Örnek min {m[i, k] + m[k+1, j] + pi-1pkpj}
2 3 Compute A1  A2  A3 A1: 10 x 100 (p0 x p1) A2: 100 x 5 (p1 x p2) A3: 5 x (p2 x p3) m[i, i] = 0 for i = 1, 2, 3 m[1, 2] = m[1, 1] + m[2, 2] + p0p1p2 (A1A2) = *100* 5 = 5,000 m[2, 3] = m[2, 2] + m[3, 3] + p1p2p3 (A2A3) = * 5 * 50 = 25,000 m[1, 3] = min m[1, 1] + m[2, 3] + p0p1p3 = 75,000 (A1(A2A3)) m[1, 2] + m[3, 3] + p0p2p3 = 7, ((A1A2)A3) 7500 2 25000 2 3 5000 1 2 1

19 Matrix-Chain-Order(p)
O(N3)

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

21 4. Optimal Çözüm Oluşturma
s[1, n] sayısı A1..n çarpımındaki optimal parantezin yerini gösterir Son parantez k = s[1, n] de olacak, yani A1..n = A1..s[1, n]  As[1, n]+1..n Her altproblem için özyinelemeli olarak k değerlerini kullanarak optimal parentezlemeyi bul 1 2 3 n n j 3 2 1

22 4. Optimal Çözümü Oluşturma
s[i, j] = k , burada Ai Ai+1  Aj parantezlemesi Ak ve Ak+1 arasındadır 1 2 3 4 5 6 3 5 - 4 1 2 6 s[1, n] = 3  A1..6 = A1..3 A4..6 s[1, 3] = 1  A1..3 = A1..1 A2..3 s[4, 6] = 5  A4..6 = A4..5 A6..6 5 4 3 j 2 1 i

23 4. Optimal Çözümü Oluşturma (cont.)
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 “)” 1 2 3 4 5 6 3 5 - 4 1 2 6 5 4 j 3 2 1 i

24 Örnek: A1  A6 ( ( A1 ( A2 A3 ) ) ( ( A4 A5 ) A6 ) ) 3 5 - 4 1 2
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 “)” s[1..6, 1..6] 1 2 3 4 5 6 3 5 - 4 1 2 6 5 4 j 3 2 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)  “A1” P-O-P(s, 2, 3) s[2, 3] = 2 i = 2, j = 3 “(“ P-O-P (s, 2, 2)  “A2” P-O-P (s, 3, 3)  “A3” “)” 1 i


"Algoritmalar II Ders 3 Dinamik Programlama Yöntemi." indir ppt

Benzer bir sunumlar


Google Reklamları