Sunum yükleniyor. Lütfen bekleyiniz

Sunum yükleniyor. Lütfen bekleyiniz

Algoritmalar II Ders 9 Dinamik Programlama ve Açgözlü Yaklaşım Soruları.

Benzer bir sunumlar


... konulu sunumlar: "Algoritmalar II Ders 9 Dinamik Programlama ve Açgözlü Yaklaşım Soruları."— Sunum transkripti:

1 Algoritmalar II Ders 9 Dinamik Programlama ve Açgözlü Yaklaşım Soruları

2 Problem 1: En uzun artan altdizi Bulma sorusu

3 Problem2

4 Problem3:Palindrom sorusu-1
Problem: Bir dizgenin düzden okunuşuyla tersten okunuşu aynı ise bu dizgeye palindrom denir. Örneğin, ve KABAK birer palindromlardır. Verilen bir dizgeden en az sembol silerek palindrom elde etmek istiyoruz. Örneğin, dizgesinden 1 sembol, yani 2 silinirse palindrom oluşur.

5 DİNAMİK PROGRAMLAMA YAKLAŞİMİ
Verilen dizge S[1...n] olsun. 1. Adım. Optimal çözümün yapısını inceleme ve alt problemi tanımlama Altproblem S[i...j] dizisinden minimum sayıda harf atılarak palindrom elde etme sorusu olsun. Ana problem S[1...n ] dizisinden minimum sayıda harf atılarak palindrom elde etme sorusudur. Ana problemin optimal çözümü , alt problemin optimal çözümünü içermektedir, aksi durumda yani S[i...j] dizisinden daha az harf atılarak palindrom elde edilebilseydi S[1...n] dizisinden de daha az harf atılarak palindrom elde edilebilirdi.

6 Altproblemlerin optimal çözümleri arasında özyinelemeli formül
S[i,j] dizisinden palindrom elde etmek için atılması gereken minimum harf sayısı f(i,j) olsun. Eğer S[i]=S[j] ise S[i...j] dizgesinde baştaki ve sondaki harfler aynıdır, yani bu harflerin atılması gerekmiyor, bu durumda S[i+1...j-1] dizgesi için atılması gereken minimum harf sayısı ile f(i,j) sayısı aynı olacaktır. Yani f(i+1,j-1)=f(i,j) eğer S[i]=S[j] ise

7 Eğer S[i]≠S[j] ise ya S[i], ya da S[j] nin atılması gerekiyor
Eğer S[i]≠S[j] ise ya S[i], ya da S[j] nin atılması gerekiyor. Eğer S[i] atılırsa geriye S[i+1...j] dizgesi, eğer S[j] atılırsa geriye S[i...j-1] dizgesi kalacaktır. Her iki durumda atılması gereken harf sayısı 1 artacaktır. Bu iki durumdan minimum olanı seçmemiz gerektiğinden f(i,j)=min{f(i+1,j),f(i,j-1)}+1, eğer S[i]≠S[j] ise

8 Sonuç olarak, f(i,j) =f(i+1,j-1) eğer S[i]=S[j] ise = min{f(i+1,j),f(i,j-1)}+1, eğer S[i]≠S[j] ise Ayrıca f(i,i)=0 her i≥1 için f(i+1,i)=0 her i≥1 için

9 Burada f(i,j) değerleri aşağıda gibi hesaplanır önce indisler farkı 1 olanlar, yani f(1,2), f(2,3),...f(n-1,n), sonra indis farkı 2 olanlar yani f(1,3),f(2,4),...f(n-2,n), sonra indis farkı 3 olanlar... ve en sonda indis farkı n-1 olan yani f(1,n) hesaplanır. Bu işlem karesel zamanda yapılır.

10 Problem4: palindrom sorusu-2


"Algoritmalar II Ders 9 Dinamik Programlama ve Açgözlü Yaklaşım Soruları." indir ppt

Benzer bir sunumlar


Google Reklamları