Algoritmalar II Ders 9 Dinamik Programlama ve Açgözlü Yaklaşım Soruları
Problem 1: En uzun artan altdizi Bulma sorusu
Problem2
Problem3:Palindrom sorusu-1 Problem: Bir dizgenin düzden okunuşuyla tersten okunuşu aynı ise bu dizgeye palindrom denir. Örneğin, 145541 ve KABAK birer palindromlardır. Verilen bir dizgeden en az sembol silerek palindrom elde etmek istiyoruz. Örneğin, 1245541 dizgesinden 1 sembol, yani 2 silinirse palindrom oluşur.
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.
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
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
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
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.
Problem4: palindrom sorusu-2