2014 Soru 1. (15 puan) 5,2,4,1,15,8,11,13,7,6 dizisinin elemanlarından maksimum özellikli bir yığın(heap) oluşturulmasını adım adım yazınız. Heapsort algoritmasının yardımıyla yapılacak sıralamayı anlatınız. Soru 2. (15 puan) Verilen bir (a n ) dizisi için a 0 =a n+1 = tanımlayalım. 1 i n olmak üzere bir a i elemanı için a i-1 a i ve a i+1 a i koşullarının ikisi de sağlanıyorsa a i elemanına güzel eleman denir. Bir dizinin birden fazla güzel elemanı olabilir. Örneğin, 1,5,7,6,8,10,4,11,3 dizisi için a 1 =1, a 4 =6, a 7 =4 ve a 9 =3 güzel elemanlardır. Verilen bir (a n ) dizisinin güzel elemanlarından birini O(log n) işlem zamanında bulabilen algoritma yazınız ve algoritmanızın gerçekten de O(log n) işlem zamanında çalıştığını kanıtlayınız. Not: Bu soruda O(log n) den daha fazla işlemle tasarlanmış ve doğru yazılmış algoritma için 5 puan verilecektir. 2012 Soru3. n elemanı olan A dizisi veriliyor. a) A dizisinin birbirine eşit ikililerinin sayısını bulabilen ve işlem zamanı O(n 2 ) den daha az olan bir algoritma tasarlayınız. b) Algoritmanızın en kötü durumda işlem zamanını asimptotik olarak bulunuz c) A dizisinin her bir elemanının 1,2,...2n değerlerinden birine eşit olan bir tamsayı olduğunu varsayalım. Bu bilgiyi kullanarak a) şıkkındaki soruyu yeniden çözünüz. Tasarladığınız algoritmanın işlem zamanı a) şıkkında tasarladığınız algoritmanın işlem zamanından daha iyi olmalıdır. Not: A dizisinin birbirine eşit olan 3 veya daha çok elemanının olmadığını varsayınız. Soru4. Her biri 3 tane birim kareden oluşan aşağıdaki gibi L biçimli taşlar veriliyor. Bu taşlarla verilen bir karesi çıkartılmış 2 n x2 n boyutlu satranç tahtasını kapatmak istiyoruz. L biçimli taşlar birbirinin üzerine gelemez. Bu problemi çözmek için böl ve yönet yöntemi ile bir algoritma tasarlayınız. 2013 Soru 5. Birbirinden farklı 8 tam sayı arasında bulunan 2. en büyük sayıyı en fazla 9 karşılaştırma ile bulabilen bir algoritma tasarlayınız. Örneğin, giriş verileriniz 5,7,13,11,3,9,1,6 ise algoritmanız en fazla 9 defa bu sayıları birbiriyle karşılaştırarak 11 sayısını bulmalıdır. 2011 Soru 6. 50,47,40,21,26,17 sayılarını teker teker boş bir kırmızı siyah ağaca ekleyiniz
2013 Soru7. Her terimi 3,6 veya 7 sayılarından biri olan n elemanlı bir diziyi doğrusal zamanda ve başka bir dizi kullanmadan sıralayabilen bir algoritma tasarlayınız. 2015 Soru 8. Aşağıdaki kırmızı siyah ağaca (2, 5, 8 ve 15 değerli düğümler kırmızıdır) 3 değerini ekleyiniz. Soru9. Fibonacci sayıları aşağıdaki gibi tanımlanmaktadır. F 0 =0, F 1 =1 ve her n>1 için F n =F n-1 +F n-2 Verilen n sayısı için O(n) işlem zamanında ve hafızayı O(1) düzeyinde kullanarak (yani Fibonacci dizisi dahil herhangi bir dizi tanımlamadan) F n sayısını bulabilen algoritmanın sözde kodunu (pseudocode) yazınız. Soru10. 2013
Soru11. Soru12. 2013 Soru13. Her biri artan sıralı n tane sayıdan oluşan k tane dizi veriliyor. Bu dizilerinin elemanlarını içeren artan sıralı k.n elemanlı bir A dizisi oluşturmak istenmektedir. A dizisini a) (10 puan) 1-azaltma (decrease by one) yöntemiyle b) (10 puan) Böl ve yönet (divide and conquer) yöntemiyle oluşturabilen algoritmaları tasarlayınız. c) (10 puan) Her iki algoritma için rekürens yazınız ve çözünüz. (Böl-yönet yönteminde k sayısını 2 nin kuvveti olarak alınız.)
Çözüm Soru1. Verilen sayılar soldan sağa ikili bir ağaca yerleştirilir 5 2 4 1 15 8 11 13 7 6 Sonra sondan başa doğru ilk iç düğümden başlanarak max-heap özelliğini sağlamayan her düğüm kendisinden büyük olan en büyük çocuğu ile yerdeğiştirilir ve her iç düğüm için bu işleme yapraklara ulaşılana kadar devam edilir. İlk bakılacak iç düğüm A[5]=15 ama bu düğüm max-heap özelliğini sağlar Sonra A[4]=1 düğümü 13 ile yerdeğiştirir 5 2 4 13 15 8 11 1 7 6 Sıradaki A[3]=4 değeri 11 ile yerdeğiştirir 5 2 11 13 15 8 4 1 7 6 Şimdi sıra A[2]=2 de, bu değer önce 15 le, sonra da 6 ile yerdeğiştirir 5 15 11 13 6 8 4 1 7 2 En sonda A[1]=5 değeri önce 15, sonra 13 ve en son 7 ile yerdeğiştirir. 15 13 11 7 6 8 4 1 5 2 Heap oluştu. Heapsort algoritması heapte son eleman kalana kadar aşağıdakileri yapar: heapteki son elemanla ilk elemanın yerini değiştirir, heapsize değişkenini 1 azaltır ve ilk elemandan Heapify fonksiyonunu çağırır. Örneğin ilk işlem aşağıdaki gibi olacaktır: Heapifydan önce
2 13 11 7 6 8 4 1 5 15 Heapifydan sonra 13 7 11 5 6 8 4 1 2 15 Sonra heapteki ilk eleman olan 13 le son eleman olan 2 yer değiştirecek, heapsize bir azaltılacak, ilk elemandan Heapify çağrılacak ve bu işleme heapte tek eleman kalana kadar devam edilecek. Sonuç sıra ile aşağıdaki gibi olacaktır: 11 7 8 5 6 2 4 1 13 15 8 7 4 5 6 2 1 11 13 15 7 6 4 5 1 2 8 11 13 15 6 5 4 2 1 7 8 11 13 15
5 2 4 1 6 7 8 11 13 15 4 2 1 5 6 7 8 11 13 15 2 1 4 5 6 7 8 11 13 15 1 2 4 5 6 7 8 11 13 15 Çözüm Soru2. Fikir: Özyinemeli olarak dizinin ortanca elemanına bakarız.bu eleman a m olsun. Eğer a m-1 < a m ise sol tarafta bir güzel eleman vardır,aksi durumda (yani bu koşulda solda güzel eleman yoksa) a m-2 <a m-1 olmalıdır ( aksi durumda a m-1 güzel eleman olurdu). Benzer olarak a m-3 <a m-2,...a 1 <a 2 olmalıdır ama son eşitsizlik a 1 in güzel eleman olması demektir, bu da solda güzel eleman yoktur varsayımıyla çelişmektedir. Yani eğer a m-1 < a m ise sağ tarafı atar, güzel elemanı sol tarafta ararız. Eğer a m-1 < a m değilse (yani a m-1 a m ise) a m >a m+1 eşitsizliğini control ederiz. Eğer a m >a m+1 ise güzel eleman sağ taraftadır. Aksi durumda (yani sağ tarafta güzel eleman yoksa) a m+1 >a m+2 olmalıdır (aksi durumda a m+1 güzel eleman olurdu). Benzer olarak a m+2 >a m+3, a n-1 >a n olmalıdır ama son eşitsizlik a n in güzel eleman olması demektir, bu da sağda güzel eleman yoktur varsayımıyla çelişmektedir. Yani eğer a m-1 a m ve a m >a m+1 ise sol tarafı atar, güzel elemanı sağ tarafta ararız. Eğer a m-1 a m ve a m a m+1 ise güzel eleman a m dir. İşlem zamanı analizi: T(n)=T(n/2)+Θ(1) master teoremden bu rekürensin çözümü Θ(log n) olur. Input A[1...n] Algoritma : Call Nice(A,1,n) Nice(A,l,r) while (l<=r) if (r==l) return A[l] if (r-l==1) if A[l] <A[r] return A[l] else return A[r] m=floor((l+r)/2) if A[m-1] <A[m] r=m-1 else if A[m] >A[m+1] l=m+1 else return A[m]
Çözüm. Soru3. (a) Önce A dizisini sıralarız, sonra da sıralanmış dizinin birbirine eşit olan ardışık ikililerinin sayısını sayarız. (b) Sıralamayı O(n lg n) işlem zamanında yapabiliriz, sıralı dizide eşit ardışık ikilileri ise O(n) işlem zamanında buluruz. Sonuç olarak, O(n lg n) işlem zamanı bulunur. (c)boyutu 2n olan bir T dizisi oluşturalım. Önce bu dizinin tüm elemanlarına sıfır atayalım. Sonra da A dizisinin elemanlarını teker teker tarayarak T[A[i]] değerini 1 artıralım. Şimdi T dizisindeki 2 lerin sayısı A dizisinin birbirine eşit ikililerinin sayısı kadar olacaktır. Bu algoritmanın işlem süresi O(n) olur. Çözüm soru4. Önce tahtayı tam ortasından 4 tane 2 n-1 x2 n-1 boyutlu tahtaya böleriz. Sonra ise L biçimli taşı, 2 n x2 n boyutlu satranç tahtasının tam ortasına L nin kareleri, çıkarılmış kareyi içeren parçaya gelmeyecek biçimde yerleştiririz. Şimdi boyutları 2 n-1 x2 n-1 olan 4 tane aynı soru var. Bu işleme 2x2 boyutlu karelere ulaşana kadar devam ederiz. Çözüm. Soru5. n sayı arasındaki en büyük sayıyı n-1 karşılaştırma yaparak bulabiliriz. Örneğin, sayılar arasında eleme yöntemiyle ( Avrupa futbol şampiyonlar ligine çeyrek finallerinden başlayarak benzer olacak biçimde) turnuva düzenleyerek bunu gösterebiliriz. Yani önce 1. sayı ile 2. sayıyı, 3. sayı ile 4. sayıyı, 5. sayı ile 6. sayıyı, 7. sayı ile 8. sayıyı karşılaştırırız ve büyük olanları alırız. 4 karşılaştırma yaptık ve elimizde en büyük sayı için aday olan 4 sayı kaldı. Şimdi bu 4 sayıdan 1. si ile 2. sini ve 3. sü ile 4. sünü karşılaştırırız ve yine büyükleri alırız. Bu defa 2 karşılaştırma yaptık ve elimizde 2 sayı kaldı. Bu iki sayıyı da karşılaştırarak 8 sayı arasında bulunan en büyük sayıyı 4+2+1=7 karşılaştırma ile bulmuş oluruz. 2. En büyük sayı, en büyük sayının karşılaştırılarak yendiği (yani büyük olduğu) sayılar arasında olmalıdır. Bu turnuva sırasında en büyük sayı, 3 sayı ile karşılaştırılmıştı. (çeyrek final, yarı final ve final). Bu 3 sayı arasındaki en büyük sayıyı yukarıda anlatılan algoritma ile 2 karşılaştırma ile buluruz. ( Yani 1. si ile 2. sini karşılaştırız ve büyük olanla 3. sünü karşılaştırırız.) Algoritmayı yukarıda verilen örnek için uygularsak, 5 ile 7 karşılaştır kazanan 7 13 ile 11 karşılaştır kazanan 13 3 ile 9 karşılaştır kazanan 9 1 ile 6 karşılaştır kazanan 6 7 ile 13 karşılaştır kazanan 13 9 ile 6 karşılaştır kazanan 9 13 ile 9 karşılaştır kazanan 13 ve 13 şampiyon(en büyük sayı) oldu. 13 ün karşılaştığı sayılar 11, 7, 9 dur 11 ile 7 karşılaştır kazanan 11 11 ile 9 karşılaştır kazanan 11 Sonuç: 11
Çözüm Soru6 1) 50 2) 50 3) 50 durum 3 babayı siyah dedeyi kırmızı yap 4) 50 47 47 47 40 40 Dedeye göre RIGHT-ROTATE uygula 5) 47 6) 47 durum 1 babayı ve 40 50 40 50 21 amcayı siyah, dedeyi kırmızı yap ve yeni eklenen eleman dede olsun. 7) 47 8) 47 9) 47 durum 2 babayı eklenen eleman yap ve Babaya göre LEFT-ROTATE uygula 40 50 40 50 40 50 21 21 21 10) 47 durum3 e dönüştü 11) 47 12) 47 26 40 50 40 50 26 50 26 26 21 40 21 21 13) 47 14) 47 26 50 durum1 26 50 21 40 21 40 17 17
Çözüm soru7.
Çözüm Soru8.
Çözüm 9.
Çözüm 10.
Çözüm11
Çözüm12.
Çözüm 13.