Algoritmalar II Ders 3 Dinamik Programlama Yöntemi.

Slides:



Advertisements
Benzer bir sunumlar
Ders İçeriği Ağaç Veri Modeli Tanım ve Gerçekleştirim İkili Ağaç
Advertisements

Karmaşıklık Giriş.
MIT503 Veri Yapıları ve algoritmalar
Prof.Dr.Şaban EREN Yasar Üniversitesi Fen-Edebiyat Fakültesi
IT503 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.
10. DOĞRUSAL DENKLEM TAKIMLARININ ÇÖZÜMÜ (Matris Uygulamaları)
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ş
MATLAB’de Diziler; Vektörler ve MAtrisler
Isı Transferi Problemleri
FIRAT ÜNİVERSİTESİ TEKNOLOJİ FAKÜLTESİ
BPR151 ALGORİTMA VE PROGRAMLAMA - I
Özyinelemeli(Recursive) Algoritma Tasarımı
Algoritmalar DERS 3 Böl ve Fethet(Divide and Conquer) İkili arama
Yapısal Program Geliştirme – if, if-else
MATRİSLER ve DETERMİNANTLAR
DERS 2 MATRİSLERDE İŞLEMLER VE TERS MATRİS YÖNTEMİ
MATRİS-DETERMİNANT MATEMATİK.
YMT219: Veri Yapıları Ders Saatleri: Pazartesi 9:15-12, 17:30-20:15
KONU: MATRİSLER VE DETERMİNANTLAR
İnternet Programlama - 2
Lineer Cebir Prof.Dr.Şaban EREN
MATLAB’ de Programlama
Öğretmenin; Adı Soyadı :
Ar. Gör. Pelin Alcan İŞ SIRALAMA DERS 3.
Prof. Dr. Halil İbrahim Karakaş
Leontief Girdi - Çıktı Analizi
CEBİR CEBİRSEL İFADELER Cebirsel ifadelerde toplama ve çıkarma işlemi
BAH TABLOSU.
9 1.Çarpan 9 2.Çarpan 81 Çarpım
Matrisler ( Determinant )
SİMPLEKS METOT Müh. Ekonomisi.
Hesaplama Tabloları (MS For Mac Excel -2) Öğr.Gör. Mehmet Akif Barış.
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)
BİLGİSAYAR PROGRAMLAMA DERSİ 6. DERS NOTU Konu: Matlab’ de Diziler ve Matrisler.
Algoritmalar II Ders 6 Açgözlü Algoritmalar.
Algoritmalar II Ders 2 Dinamik Programlama Yöntemi.
MATLAB R2013’e Giriş.
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.
KESİRLERDE ÇARPMA İŞLEMİ
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.
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.
İ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
Chapter 6 Dönüştür ve Yönet (Transform-and-Conquer)
Chapter 3 Brute Force Copyright © 2007 Pearson Addison-Wesley. All rights reserved.
Algoritmalar II Ders 9 Dinamik Programlama ve Açgözlü Yaklaşım Soruları.
10. HAFTA BİLGİSAYAR PROGRAMLAMA DERSİ
İleri Algoritma Analizi
Algoritmalar II Ders 2 Dinamik Programlama Yöntemi.
8. Ders Tüm ikililer arasında en kısa yollar
Chapter 4 Divide-and-Conquer
10. Ders Floyd-Warshal algoritması
Sunum transkripti:

Algoritmalar II Ders 3 Dinamik Programlama Yöntemi

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

Ö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

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]

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

Ö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!!

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 p2 pi-1 x pi pi x pi+1 pn-1 x pn

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)

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

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

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

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ı

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: 0 if i = j m[i, j] = min {m[i, k] + m[k+1, j] + pi-1pkpj} if i < j ik<j

3. Optimal değerleri hesapla 0 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

3. Optimal değerleri hesapla (devam) 0 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

3. Optimal değerleri hesapla (devam) 0 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

Ö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

Ö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 50 (p2 x p3) m[i, i] = 0 for i = 1, 2, 3 m[1, 2] = m[1, 1] + m[2, 2] + p0p1p2 (A1A2) = 0 + 0 + 10 *100* 5 = 5,000 m[2, 3] = m[2, 2] + m[3, 3] + p1p2p3 (A2A3) = 0 + 0 + 100 * 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,500 ((A1A2)A3) 7500 2 25000 2 3 5000 1 2 1

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

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

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

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

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

Ö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 …