İleri Algoritma Analizi Ders9:Böl-Yönet Yöntemi ile tasarlanmış algoritmalara örnekler Prof. Dr. Şahin EMRAH İleri Algoritma Analizi
Problem 1 n tane birbirinden farklı vida ve her vidanın bir somunu veriliyor. Vidaları kendi arasında ve somunları kendi arasında karşılaştırma imkanımız yoktur. Yapılabilecek tek işlem şudur: Bir vida ve bir somun alarak kontrol edebiliriz ve sonucunda bu somun bu vidaya küçük geldi veya uydu veya büyük geldi yargısına varabiliriz. Her vidanın somununu bulabilen ve böl-yönet yöntemi ile tasarlanmış bir algoritma yazınız.
Çözüm. Vidalardan birini somunlar için pivot seçer ve Quicksort algoritmasında var olan Partition allgoritmasını uygularız. Bu uygulama sonucunda bu vidanın somununu buluruz, bu vidadan küçük somunları bu vidanın soluna, büyük olanları ise sağına koyarız. Bu defa ilk adımda pivot seçtiğimiz vidanın eşi olan somunu vidalar için pivot seçer ve Partition uygularız. Bu uygulama sonucunda bu somundan küçük olan vidaları bu somunun soluna, büyük olanı sağına koyarız. Bu iki adımdan sonra vida ve somunlar 3 parçaya ayrılmış oldu, sol parçada pivot olan ve eşleşen vida-somun ikilisinden küçük olanlar, sağ parçada büyük olanlar, ortada ise eşleşen somun, vida oldu. Şimdi ilk 2 adımı tüm eşler bulunana kadar hem sol, hem de sağ parçaya uygularız.
Problem 2
Çözüm
Çözüm (Devam)
Çözüm (Devam)
Çözüm (Devam)
Çözüm(Devam)
Problem 3.
Çözüm. Tahtayı kenarlarına paralel doğrularla 4 tane 2n-1x2n-1 boyutlu tahtaya böleriz. Önceden çıkarılmış kare bu dört tahtadan birinde bulunacaktır. Şimdi ilk taşı 2nx2n boyutlu tahtanın tam ortasına, bu taşın her birim karesi bu 4 tane 2n-1x2n-1 boyutlu tahtanın üçüne birer tane gelecek biçimde öyle koyarız ki L nin boşluk kısmı önceden çıkarılmış birim karenin bulunduğu 2n-1x2n-1 boyutlu tahtaya denk gelsin. Bu hamleden sonra elimizde aynı sorudan 4 tane ama bu defa 2n-1x2n-1 boyutlu tahta için vardır. Aynı tür devam ederiz.
Problem5.
Problem6. Soru 5. (30=10+10+10 puan) Soru 5. (30=10+10+10 puan) Her birinde bir kilit olan n tane kapı veriliyor. Bazı kapıların kilitleri aynıdır. Bir kilit kapıların yarısından çoğunda bulunuyorsa bu kilide esas kilit denir. Her hangi 2 kapının kilitlerinin aynı olup olmadığını test eden bir cihazımız vardır. Esas kilidi (eğer varsa) bulmak için O(nlogn) işlem zamanında çalışan bir algoritma tasarlayınız. Algoritmanızı önce AABCD dizisine sonra ise AACCCAAACCBCDCCC dizisine uygulayarak anlatınız. (Burada A, B, C , D gibi 4 farklı kilit vardır) Algoritmanızın çalışma süresinin gerçekten O(nlgn) olduğunu kanıtlayınız.