Algoritma Nedir? Algoritma Bir problemin çözümü için geliştirilmiş özel metot Girdileri çıktılara dönüştüren sıralı hesaplama adımları Tanımlanmış bir problemin çözümü için kullanılan araç «Bir problemin çözümü için izlenilen sıralı ve anlaşılır buyruklar»
Algoritma Hedefi Algoritma ile hedeflenen Sonlu bir zaman içinde Belirli girdiler ile İstenilen çıktıyı elde etmek
Nasıl bir algoritma? Bir algoritma Birden fazla biçimde sunulabilmeli Net ve anlaşılır olmalıdır Etkin ve faydalı olmalıdır Sonlu veya sonlandırılabilir olmalıdır Geliştirildiği problem için doğru olmalıdır
Algoritmanın Tarihçesi El Harezmi 9. yyda yaşamış bir matematikçi Algoritma ve cebir kavramlarının «babası» olarak bilinir 0 sayısını ve x bilinmeyenini ilk kullanan kişi Euclid En büyük ortak böleni bulma problemi için geliştirdiği çözüm ilk algoritmalardan biri olarak kabul ediliyor
En Büyük Ortak Böleni Bulma Problemi EBOB (Greater Common Divisor - gcd) bulma problemi İki negatif olmayan tam sayıyı kalansız bölen en büyük sayının bulunması gcd(m, n) =? Euclid Çözümü (m mod n) işleminin sonucu 0 olana kadar gcd(m, n) = gcd(n, m mod n) işlemini tekrar et gcd(60, 24) = gcd(24, 12) = gcd(12, 0) = 12.
EBOB Problemi Euclid Çözümü (m mod n) işleminin sonucu 0 olana kadar gcd(m, n) = gcd(n, m mod n) işlemini tekrar et gcd(60, 24) = gcd(24, 12) = gcd(12, 0) = 12. Adım 1 : Eğer n = 0 ise m değerini sonuç olarak döndür ve dur Değil ise 2. adıma git Adım2 : (m / n) işlemini yap, kalanı r ye ata. Adım 3 : n değerini m ye ata, r değerini n ye ata (m = n, n = r). Adım 1 dön. Sözde Kod
EBOB Problemi Euclid in algoritmasının sonu var mı? N değeri her iterasyonda küçülüyor. 0 dan daha küçük, negatif, olamayacağı biliniyor. İki pozitif sayının bölme işleminden negatif sayı veya kalan çıkamaz. Er yada geç sıfıra ulaşarak algoritma duracaktır.
EBOB Problemi Ardışık Tamsayı Kontrol Algoritması ile Çözüm (Consecutive integer checking algorithm) EBOB (m,n) ikilisinin küçük olanından daha büyük olamaz Min(m,n) değerinin EBOB olup olmadığı kontrol edilir Min(m,n) EBOB ise işlem sonlanır,» Değil ise bir azaltılarak tekrar kontrol edilir (min(m,n)--) Algoritma Adım1: min{m, n} değerini t ye ata. Adım 2: (m / t) işlemini yap, Eğer kalan = 0 ise Adım 3 e git; Değil ise adım 4 e git Adım 3 : (n/t) işlemini yap. Eğer kalan = 0 ise t değerini sonuç olarak döndür Değil ise adım 4 e git Adım 4: t değerini 1 azalt, Adım 2 ye git
EBOB Problemi Euclid in algoritmasından farklı olarak bu algoritma Değerlerden biri 0 ise doğru çalışmaz (Neden?) Algoritma girdilerinin kesin ve dikkatli bir şekilde belirlenmesi gerekliliği ve önemi
EBOB Problemi Asal Çarpanlara Ayırma EBOB u bulunacak sayılar asal çarpanlarına ayrılır Ortak asal çarpanların çarpımı EBOB u verir Adım 1 : m nin asal çarpanlarını bul Adım 2: n nin asal çarpanlarını bul Adım 3: Adım1 ve Adım2 de hesaplanan asal çarpanlardan ortak olanları belirle Adım 4: Ortak asal çarpanları çarp
EBOB Problemi Asal çarpanlara ayırma algoritmanın işlem karmaşıklığı Euclid in algoritmasından daha fazla Asal çarpanlara ayırma işleminin algoritması açık değil Eratosthenes in Eleme Algoritması?
Asal Sayıları Bulma Eratosthenes in Eleme Algoritması? 2 ile n arasındaki asal sayıları bulmak için kullanılır 1. iterasyonda 2 nin katları 2. iterasyonda 3 ün katları 3. iterasyonda 5 in katları elenir (?)
Asal Sayıları Bulma
Algoritma Tasarım ve Analiz Süreci
Algoritma Tasarım ve Analiz Süreci Problemin Anlaşılması Problem net bir şekilde ifade edilmeli Anlaşılmayan hususlar için sorular Gerekliyse elle işletme İstisnai durumlar? Kullanılacak Donanımın Yetenekleri RAM model Birçok temel algoritmanın denendiği sistem
Algoritma Tasarım ve Analiz Süreci Kesin Sonuç Yaklaşık Sonuç Seçimi Tam sonuca ulaşılabilir mi? (Exact Algorithm) Yaklaşık sonuç mu bulunacak? (Approximation Algorithm) Lineer olmayan denklemler Karekök Bazı durumlarda kesin sonuca ulaşmak için Uzun işlem süresi Karmaşık işlemler gerekiyorsa yaklaşık sonuç kabul edilebilir
Algoritma Tasarım ve Analiz Süreci Algoritma Tasarım Tekniğinin Belirlenmesi Algoritma Tasarım Tekniği Çözüm için kullanılabilecek algoritmik bir yaklaşım Çeşitli hesaplama problemlerinde uygulanabilir olmalı Algoritma Tasarımı ve Veri Yapıları Bellek kullanımı Veri türü Donanım?
Algoritma Tasarım ve Analiz Süreci Algoritma Açıklama Yöntemleri Akış diyagramı Sözde kod Kelimeler ile anlatım Algoritmanın doğruluğunun kanıtlanması Denemeler İstisnalar İspatlar
Algoritma Tasarım ve Analiz Süreci Algoritmanın Analizi Algoritmanın doğruluğu en önemli unsur Etkinlik Zaman Etkinliği Basitlik Algoritmanın kodlanması Belirlenen özelliklerin, veri yapılarının uygulanabileceği bir dil seçilmesi
Önemli Problem Türleri Sıralama Arama String İşlemleri Graph problemleri Kombinasyonel Problemler Geometrik problemler Nümerik problemler
Önemli Problem Türleri Sıralama Bir listedeki öğeleri artan sırada düzenlemek Girdi : n adet sayıdan oluşan dizi <a 1, a 2,, a n > Çıktı : Girdinin a 1 a 2 a n. Şeklinde yeniden düzenlenmesi Neden Sıralama? Arama işlemini kolaylaştırmak Birçok algoritmanın altyordamı Sıralama Anahtarı Veri bütününün sıralamayı yönlendirmek için seçilmiş özel parçası Bir başarı listesinin sıralanması (İsme, numaraya, nota göre)
Önemli Problem Türleri Örnek sıralama algoritmaları Selection Bubble sort Insertion sort Merge sort Heap sort Sıralama algoritması karmaşıklığını değerlendirmek Yapılan Karşılaştırma sayısı Sıralama algoritmaları için iki önemli özellik Stabilite: İki eşit elemanın birbirlerine göre sıralanmadan önceki pozisyonlarında kalması Bir dizide birbirine eşit iki eleman var. Sıralamadan önceki konumları i ve j, i<j Sıralamadan sonraki konumları i ve j ve i <j ise algoritma stabil bir sıralama algoritmasıdır Yerinde (In place) : Fazladan bellek alanı gerektirmeyen sıralama algortimaları İstisna olarak küçük bellek birimleri kullanabilir Dizinin tamamı kadar değil, bir değişken kadar
Önemli Problem Türleri Arama Bir değeri verilen veri seti içinde bulma Sıralama algoritması örnekleri Sıralı arama İkili arama Her durum için ideal arama algoritması yok Hızlı fakat fazla bellek alanı Sadece sıralı verilerde arama
Önemli Problem Türleri
Önemli Problem Türleri Sıralı dizi içerisinde 19 değeri aranıyor 1,2,3,5,6,7,8,10,12,13,15,16,18,19,20,22 1,2,3,5,6,7,8,10 12,13,15,16,18,19,20,22 12,13,15,16 18,19,20,22 18,19 20,22
Önemli Problem Türleri String İşleme String Bir alfabede yer alan karakterlerden oluşmuş dizi Alfabetik, nümerik, özel karakterlerden oluşabilir Örnek Bir metin içerisinde www ifadesini aramak @ karakterini aramak Derleyiciler
Önemli Problem Türleri Graph Problemleri Graph Birbirine sınır adı verilen hatlarla bağlı noktalar grubu Gerçek hayat problemleri WWW modellemesi Haberleşme ağları Proje planlaması Graph örnekleri En kısa yol Topolojik sıralama
Önemli Problem Türleri Kombinasyonel problemler Çeşitli kısıtlılıkları sağlayan kombinasyonel çözümlerin bulunması Maksimum değer, minimum maliyet Sorunlar Probleme göre kombinasyonel çözümler çok büyüyebilir Bu tip problemleri, kabul edilebilir bir sürede çözebilecek bilinen bir algoritma yok
Önemli Problem Türleri Geometrik problemler Nokta, doğru, çokgen gibi geometrik nesneler ile ilgilenen formülleri Uygulama Alanları Robotik Bilgisayar Grafikleri Tomografi En bilinen problemler En yakın çift (Closest Pair) Dışbükey gövde (Convex Hull)
Önemli Problem Türleri Nümerik Problemler Yaklaşık çözüme ulaşılmış problemlerin kesin sonuca ulaştırılmaya çalışılması Denklem, denklem sistemi çözümleri Kısıtlı integraller
En Yakın Çift Problemi Verilen nokta kümesi içerisinde birbirine en yakın noktaları bulmak NOKTA X KOORDİNATI Y KOORDİNATI A 3 2 B 2 5 C 5-3 D -2 0 E 4 6 F 0-4 İki Nokta Arası Mesafe : (X1 X2 )^2 + (Y1 Y2 )^2
Metin Arama Bir metin içerisinde aranan ifadeyi bulmak Büyük / Küçük Harf duyarlılığı? Tam uyum / Ek almış?
Algoritma Analizi Çerçevesi Algoritma Analizinde Göz Önünde Bulundurulması Gerekenler Neler? Algoritmanın Doğruluğu (Correctness) Zaman Verimliliği (Time Efficiency) Bellek Alanı Verimliliği (Space Efficiency) Gelişen donanım teknolojisi ile artık çok önemli değil Uygunluk, en iyilik (Optimality)
Algoritma Analizi Çerçevesi Girdi Büyüklüğünün Ölçülmesi Çalışma Zamanı Ölçü Biriminin Belirlenmesi Büyüme Derecesi (Order of Growth) En kötü durum, en iyi durum, ortalama durum değerlendirmeleri
Girdi Büyüklüğünün Ölçülmesi Girdi Büyüklüğünün Ölçülmesi Tüm algoritmalar için büyük girdiler üzerinde çalışma süresi daha uzundur Büyük dizi içinde arama Büyük boyutlu matrisleri çarpma Algoritmaya girilen veriyi belirten n değerinin belirlenmesi önemli Bazı algoritmalar için kolay Arama, sıralama, eleman sayısı bulma Bazı algoritmalar için değil İki matrisin çarpımı» Matrislerin derecesi mi? Eleman Sayıları mı? Yazım hatası programı» Karakter Sayısı mı? Kelime Sayısı mı?
Çalışma Zamanı Ölçü Biriminin Belirlenmesi Bir Algoritmanın Çalışma Zamanı Çalıştığı bilgisayar sisteminin hızı Algoritmanın kullanıldığı programın kalitesine Makine kodunu üreten derleyici gibi etkenlere bağımlıdır Bu yüzden dış etkenlere bağımlı olmayan bir ölçüm yolu bulunmalıdır Bir yaklaşım: Algoritma içerisindeki tüm işlemlerin kaç kere gerçekleştiğinin sayılması Zor ve Gereksiz Bir diğer yaklaşım: Algoritma içerisindeki temel işlemin belirlenip, kaç kere gerçekleştiğinin sayılması
Çalışma Zamanı Ölçü Biriminin Belirlenmesi Zaman verimliliğinin teorik incelenmesi Zaman verimliliği girdi üzerindeki temel işlemin tekrar sayısı üzerinden değerlendirilir Temel işlem Algoritmanın çalışma süresince en çok gerçekleştirilen işlem
Çalışma Zamanı Ölçü Biriminin Belirlenmesi Temel işlemin belirlenmesi Genellikle en çok gerçekleşen işlem Genellikle en iç döngüde yapılan işlem Sıralama algoritmaları için karşılaştırma Matematiksel işlemler için genellikle 4 işlem / en uzun işlem, sonra *, + ve
Çalışma Zamanı Ölçü Biriminin Belirlenmesi c op : Bir algoritmanın temel işleminin bir bilgisayardaki çalışma süresi C(n) : Temel işlemin gerçekleşme sayısı T(n) : Algoritmanın uygulandığı programın çalışma süresi T(n) c op C(n) Bu formülün yaklaşık ve tahmini bir değer verdiği unutulmamalı
Çalışma Zamanı Ölçü Biriminin Belirlenmesi T(n) c op C(n) Bu programı 10 kat hızlı bir bilgisayarda çalıştırsak ne kadar hızlı sonuç alırız? Cevap : 10 kez ise girdiyi iki kat büyütürsek çalışma zamanı ne kadar artar?
Büyüme Derecesi Büyüme derecesi Küçük girdi boyutları ile bir algoritmanın etkinliğinin değerlendirilmesi sağlıklı değil
En İyi, En Kötü, Ortalama Durum En kötü durum n boyutunda girdi üzerinden en yüksek değer En iyi durum n boyutunda girdi üzerinden en düşük değer Ortalama durum n boyutunda girdi için «ortalama» değer Tipik bir girdi için temel işlemin kaç kere olduğu En kötü ile en iyinin ortalaması değil Temel işlem sayısı olarak bir olasılık dağılımı içerisinden rastgele bir değişken değeri beklenir
En Kötü Durum Sıralı arama için En kötü durum: Aranan değerin dizide bulunmaması N boyutunda girdi için maksimum sayıda karşılaştırma C worst (n) = n En kötü durum incelemesi bir algoritmanın çalışma zamanı açısından üst sınırını belirler
En İyi Durum İncelemesi Sıralı arama için En iyi durum: Aranan değerin ilk karşılaştırmada bulunması N boyutunda girdi için maksimum sayıda karşılaştırma C best (n) = 1 En iyi durum incelemesi en kötü durum kadar önemli bir veri sağlamaz.
Ortalama Durum İncelemesi En iyi durum incelemesi de en kötü durum incelemesi de bir algoritmayı değerlendirmek için yeterli veri sağlamaz Algoritmanın tipik veya rastgele bir girdi karşısındaki davranışı?
Ortalama Durum İncelemesi Sıralı arama için Standart kabule göre başarılı bir aramanın olasılığı p (0<=p<=1) İlk karşılaştırmada bulma olasılığı her hangi bir i değeri için aynı. (p/n) Bulunamama olasılığı n.(1-p)
Ortalama Durum p=1 ise (Başarılı arama) C avg (n) = (n+1) / 2 olur. Bu durum başarılı bir aramda algoritmanın ortalama olarak dizinin yarısına kadar aranan elemanı bulacağı kabul edilir.
1. n elemanın toplamı 2. n! değerinin hesaplanması 3. n elemanlı dizinin en büyük elemanının bulunması 4. Öklid in EBOB algoritması 5. n*n boyutlu iki matrisin toplanması 6. n*n boyutlu iki matrisin çarpımı Yukarıdaki algoritmaların temel işlemlerini ve gerçekleşme sayılarını bulunuz. C(n) Sıralı aramayı aranan verinin yer aldığı indis listesi veren versiyonunu tasarlayıp(birden fazla kez yer alma durumu), verimliliğini klasik sıralı aramayla karşılaştırın. (C(n), T(n), En kötü, en iyi durumlar)
Büyüme Derecesinin Asimptotik İncelemesi Algoritma verimliliğinin değerlendirilmesinde büyüme derecesi temel işlemin gerçekleşme sayısı ile ilgilidir Büyüme derecesi değerlendirilirken 3 farklı notasyon kullanılır O (Big Oh) Ω (Big Omega) Θ (Big Theta)
Big Oh Notasyonu O(g(n) : Bir g(n) fonksiyonu ile aynı veya daha düşük büyüme derecesine sahip fonksiyonların tümü Bir sabit katsayı ve n değeri sonsuza giderken
Big Oh Notasyonu
Big Oh Notasyonu Bir t(n) fonksiyonu için O(g(n)) içerisindedir diyebilmek için (- t (n) O(g(n)) -) T(n), Daha büyük n değerleri için üstten, sabit çarpanlı bir g(n) fonksiyonu ile sınırlandırılmış olmalıdır. Pozitif sabit katsayı c, n 0 negatif olmayan bir tamsayı ise t (n) cg(n), n n 0 ise 100n + 5 O(n 2 ) için ispat 100n + 5 100n + n, n 5 ise 100n + 5 101n 101n 101n 2 c = 101, n 0 = 5 alınabilir
Big Omega Notasyonu Ω(g(n)) Bir g(n) fonksiyonu ile aynı veya daha büyük büyüme derecesine sahip fonksiyonların tümü Bir sabit katsayı ve n değeri sonsuza giderken
Big Omega Notasyonu
Big Omega Notasyonu Bir t(n) fonksiyonu için Ω(g(n)) içerisindedir diyebilmek için (- t (n) Ω (g(n)) -) T(n), Daha büyük n değerleri için alttan, sabit çarpanlı bir g(n) fonksiyonu ile sınırlandırılmış olmalıdır. Pozitif sabit katsayı c, n 0 negatif olmayan bir tamsayı ise t (n) cg(n), n n 0 ise n 3 Ω(n 2 ) ispatı için n 3 n 2, n 0 ise c = 1, n 0 = 0 alınabilir
Big Theta Notasyonu Θ(g(n)) Bir g(n) fonksiyonu ile aynı büyüme derecesine sahip fonksiyonların tümü Bir sabit katsayı ve n değeri sonsuza giderken an 2 + bn + c, a > 0 ise Θ(n 2 ) içerisindedir
Big Theta Notasyonu
Big Theta Notasyonu Bir t(n) fonksiyonu için Θ (g(n)) içerisindedir diyebilmek için (- t (n) Θ (g(n)) -) t(n), Daha büyük n değerleri için alttan ve üstten, sabit çarpanlı bir g(n) fonksiyonu ile sınırlandırılmış olmalıdır. Pozitif sabit katsayı c 1 ve c 2, n 0 negatif olmayan bir tamsayı ise c 2 g(n) t (n) c 1 g(n), n n 0 ise
Asimptotik Büyüme Derecesi İçin Bazı Özellikler f(n) O(f(n)) f(n) O(g(n)), eğer g(n) (f(n)) Eğer f (n) O(g (n)) ve g(n) O(h(n)), ise f(n) O(h(n)) If f 1 (n) O(g 1 (n)) ve f 2 (n) O(g 2 (n)), ise f 1 (n) + f 2 (n) O(max{g 1 (n), g 2 (n)})
Büyüme Derecelerinin Karşılaştırılması O, Ω, ve Θ yaklaşımları tanımlarının birbirinden bağımsız olması sebebiyle iki fonksiyonun büyüme derecelerinin karşılaştırılmasında pek kullanılmaz Bu işlem için iki fonksiyonlarının oranının sonsuza giderken limit yaklaşımı daha uygundur
Limit Yöntemi İle Karşılaştırma 0 t(n) büyüme derecesi < g(n) büyüme derecesi c > 0 t(n) büyüme derecesi = g(n) büyüme derecesi t(n) büyüme derecesi > g(n) büyüme derecesi İlk iki durum : t (n) O(g(n)), İkinci durum : t (n) Θ(g(n)) Son iki durum : t (n) Ω(g(n)),
Limit Yöntemi İle Karşılaştırma L Hôpital Kuralı: Eğer lim n f(n) = lim n g(n) = ve f, g türevleri varsa Çok büyük n değerleri için Stirling Formülü
Örnek 1 n n 1 ile 2 n2 fonksiyonlarının büyüme derecelerini karşılaştırınız Sonuç sabit olduğu için eşit büyüme derecelerine sahipler
Örnek Log 2 n ve n fonksiyonlarının büyüme derecelerini karşılaştırınız. Log 2 n büyüme derecesi daha küçüktür
Örnek n! ve 2 n fonksiyonlarının büyüme derecelerini karşılaştırınız n! Daha hızlı büyümektedir. n! Ω(2 n )
Örnek 1 constant log n n n log n n 2 n 3 logarithmic linear linearithmic quadratic cubic 2 n exponential n! factorial
Özyineli Olmayan (Nonrecursive) Algoritmaların Matematiksel Analizi En büyük elemanı bulma problemi
En Büyük Elemanı Bulma Problemi Girdi büyüklüğü : n elemanlı dizi En çok gerçekleştirilen işlem: Döngünün içerisindeki işlemler Karşılaştırma Atama En iyi, en kötü, ortalama durum Tüm elemanlar için karşılaştırma yapılacağından söz konusu değil Karşılaştırma işlemi kaç kere yapılıyor? Döngünün her turunda 1 kez Bu toplamın sonucu
Özyineli Olmayan Algoritmaların Zaman Etkinliğinin Analizinin Genel Planı 1. Girdi büyüklüğünü gösteren parametrelerin belirlenmesi 2. Algoritmanın temel işleminin belirlenmesi 3. Girdi büyüklüğüne bağımlı olarak temel işlemin kaz kez gerçekleştiğinin bulunması Başka parametrelere bağlı ise en kötü, en iyi, ortalama durum incelemeleri 4. Temel işlemin kaç kez gerçekleştiğinin bir toplam formülüyle gösterilmesi 5. Toplam formülünün büyüme derecesini gösterecek forma dönüştürülmesi
Dizi Elemanlarının Eşsizliği Bir dizinin tüm elemanlarının birbirinden farklı olması Girdi büyüklüğü : n En çok gerçekleştirilen işlem: Döngünün içerisindeki işlemler Karşılaştırma Karşılaştırma işleminin gerçekleşme sayısı Sadece n e bağlı değil Eşit eleman olmasına da bağlı İnceleme en kötü duruma göre yapılmalı En kötü durum Dizide eşit eleman olmaması Dizinin son iki elemanının eşit olması Karşılaştırma işleminin gerçekleşme sayısının hesabı limitleri i+1 den n-1 e kadar olan içteki j döngüsünün her tekrarında 1 karşılaştırma yapılıyor İç döngü dıştaki i döngüsünün her değeri için tekrarlanıyor
Dizi Elemanlarının Eşsizliği
n*n Matris Çarpımı n*n boyutlarındaki iki matrisin çarpımı
n*n Matris Çarpımı Girdi büyüklüğü : n. Dereceden matris En çok gerçekleştirilen işlem: En iç döngünün içerisindeki işlemler Toplama ve Çarpma Döngünün her turunda 1 kez gerçekleşiyorlar Birini seçmek yeterli (Çarpma) En iyi, en kötü, ortalama durum incelemesi Matrisin tüm elemanları için işlem yapılacağından gerek yok Temel işlem çarpma (M(n)) En içteki k döngüsünün her tekrarında 1 kez gerçekleşiyor Alt sınır 0, üst sınır n-1 Toplam çarpma sayısı
Onluk Sayının İkili Sayı Sisteminde Basamak Sayısının Bulunması Bir pozitif onluk sayının ikili sayı sisteminde kaç basamaklı olduğunun bulunması Temel işlem : Karşılaştırma Döngünü içinde değil Döngü içeriğinin icra edilip edilmeyeceğini belirliyor Karşılaştırma döngü içindeki işlemlerden 1 kez fazla yapılıyor Gerçekleşme Sayısı Döngü değişkeni alt ve üst sınırları arasında çok az değer alıyor Her tekrarda yarılanmasından dolayı Bu durumda n girdi boyutu için log 2 n olmalıdır Temel işlem (n>1) log 2 n + 1 kez gerçekleşir Bu tür durumların incelenmesi özyineli algoritmalar ile daha sağlıklı olur
Özyineli Algoritmaların Matematiksel Analizi F(n) = n! Değerinin hesaplanması F(n) = F(n-1).n Temel işlem: Çarpma M(n)
Faktöriyel Alma M(n) n e bağlı bir fonksiyon Dolaylı olarak aynı zamanda n-1 e bağlı bir fonksiyondur Bu duruma özyineleme denir Yapılması gereken çözülmesidir serisinin
Faktöriyel Alma if n = 0 return 1. satırı n =0 olduğunda özyineleme çağırımının duracağını ve çarpma işlemi yapılmayacağını belirtir Bu durum özyineleme ilişkisini ve çarpma sayısı algoritması için başlangıç koşulunu verir
Faktöriyel Alma Özyineleme ilişkisinin çözümü için kullanılan yöntemlerden biri Backward Substitution (Geriye doğru değiştirme) Seri incelendiğinde şu örüntü görülebilir. n = 0 dan i = n e kadar gidildiğinde
Özyineli Algoritmaların Zaman Etkinliğinin Analizinin Genel Planı 1. Girdi büyüklüğünü gösteren parametrelerin belirlenmesi 2. Algoritmanın temel işleminin belirlenmesi 3. Girdi büyüklüğüne bağımlı olarak temel işlemin kaz kez gerçekleştiğinin bulunması Aynı büyüklükteki girdiler için farklı sayıda gerçekleşiyorsa en kötü, en iyi, ortalama durum incelemeleri 4. Temel işlemin kaç kez gerçekleştiğinin bir özyineleme ilişkisiyle gösterilmesi 5. Özyinelemenin çözülmesi ve büyüme derecesinin araştırılması
Hanoi Kuleleri Bulmacası Hanoi Kuleleri Bulmacası Farklı büyüklüklerde diskler 1. Çubuktan 3. çubuğa aynı sırayla taşınacak Her defasında bir disk hareket ettirilecek Büyük disk küçük diskin üzerine gelmeyecek
Hanoi Kuleleri Bulmacası n>1 adet disk Ç1 den Ç3 e özyineli olarak taşınması Önce n-1 disk Ç1 den Ç2 ye özyineli olarak taşınır n. Disk Ç1 den Ç3 e taşınır Son olarak n-1 disk Ç2 den Ç3 e özyineli olarak taşınır n=1 ise 1 hareketle işlem gerçekleşir.
Önce n-1 disk Ç1 den Ç2 ye özyineli olarak taşınır n. Disk Ç1 den Ç3 e taşınır Son olarak n-1 disk Ç2 den Ç3 e özyineli olarak taşınır Girdi büyüklüğü: Disk sayısı Hamle Sayısı (M(n)) n e bağımlı Başlangıç koşulu M(1)=1 olduğuna göre özyineleme ilişkisi Backward Substitution (Geriye doğru değiştirme) Örüntü
Hanoi Kuleleri Bulmacası Örüntü Başlangıç koşulu n=1, i=n-1 tekrar sayısı formülde yerine konursa: Algoritmanın büyüme derecesi üssel bir fonksiyondur. Büyük n değerleri için çözüm çok uzun sürecektir. Bu durum algoritmanın etkin olmadığını göstermez
Fibonacci Sayıları Fibonacci Sayıları: 0, 1, 1, 2, 3, 5, 8, 13, 21, Fibonacci Özyinelemesi: F(n) = F(n-1) + F(n-2) F(0) = 0 F(1) = 1
Kaba Kuvvet Algoritmaları Kaba Kuvvet Bir problemi çözmek için en basit yaklaşım Genellikle problemin tanımına ve konseptine bağımlıdır Genellikle uygulaması en basit çözümdür En temel örnekler a n hesaplanması n! Hesaplanması İki matrisin çarpımı Bir dizide bir elemanın aranması
Seçimli Sıralama Seçimli Sıralama (Selection Sort) Dizinin içerisindeki en küçük eleman bulunur. 1. sıradaki elemanla yer değiştirilir. En küçük bulma işlemi dizinin ikinci elemanından başlanılarak tekrar edilir. Bulunan en küçük değer 2.sıradaki elemanla yer değiştirir. Bu işlem dizinin son elemanına kadar devam eder.
Seçimli Sıralama
Seçimli Sıralama Temel işlemin gerçekleşme sayısı formülü:
Kabarcık Sıralama
Kabarcık Sıralama
Kabarcık Sıralama Temel İşlem :? Gerçekleşme Sayısı :?
Kaba Kuvvet Arama Algoritmaları Sıralı Arama (Sequential Search) Kaba Kuvvet String Eşleme (Bruteforce String Matching)
Sıralı Arama Aranan elemanı dizi elemanları ile tek tek karşılaştırarak arama yapar Aranan elemanın dizi içerisinde (varsa) bulunduğu ilk indisi verir
Kaba Kuvvet String Eşleme n uzunluğundaki T metni içerisinde m uzunluğundaki P örüntüsünü arama
Kaba Kuvvet String Eşleme Kötü durum Aranan örüntünün bulunamaması Kaydırmanın örüntünün son karakteri karşılaştırıldıktan sonra yapılabilmesi Her seferinde (n-m+1 kez) 3. karakter karşılaştırmasında uyumsuzluk çıkması Bu durumda sınıfı : O(nm) Ortalama durum: Bir doğal dil için birkaç karşılaştırmada uyumsuzluk yakalanır
Etraflı Arama Etraflı Arama (Exhaustive Search) Kombinasyonel çözümler içerisinden belli bir özelliğe sahip olanı arama için kullanılan bir kaba kuvvet çözümü Her ihtimal denenerek arama yapılır Gezgin Satıcı Problemi (Traveling Salesman) Sırt Çantası Problemi (Knapsack Problem) İşe Alma Problemi (Assignment Problem)
Gezgin Satıcı Problemi Bir satıcının Aralarındaki mesafeler bilinen şehirleri Her şehirden bir kez geçerek başladığı şehre en kısa yoldan dönmesi Hamiltonian Circuit (n-1)!/2
Sırt Çantası Problemi Bir hırsızın çalacağı nesnelere karar verme problemi Çantasına sığmalı Değeri mümkün olduğunca yüksek olmalı
İşe Alma Problemi n aday n pozisyon için işe başvuruyor Her aday her farklı pozisyon için farklı maaş talep ediyor Her pozisyona 1 kişi alınacak Her aday işe alınacak Toplam maaş maliyeti minimum olacak
İşe Alma Problemi
Böl ve Fethet Algoritmaları Böl ve fethet En sık kullanılan algoritma tasarım tekniklerinden biri 1. Problem alt problemlere bölünür Genellikle eşit büyüklükte 2. Alt problemler çözülür 3. Gerekliyse alt problem çözümleri birleştirilir
Master Teoremi Bir özyineleme ilişkisi için T(n) = at(n/b) + f (n), f(n) (n d ), d 0 Örnek : T(n) = 4T(n/2) + n T(n)? T(n) = 4T(n/2) + n 2 T(n)? T(n) = 4T(n/2) + n 3 T(n)?
Birleştirmeli Sıralama Birleştirmeli Sıralama (Merge Sort) Bir sırasız diziyi sıralı hale getirme Diziyi özyinelemeli olarak ikiye ayırır En küçük hale getirdikten sonra karşılaştırarak birleştirir
Birleştirmeli Sıralama
Birleştirmeli Sıralama
Birleştirmeli Sıralama Özyineleme ilişkisi C merge (n) incelenirse: Her adımda bir karşılaştırma Eğer dizi indisleri bir azaltılmaya devam ediyorsa Yani dizilerden biri boşalmadıysa En kötü durum: Bir dizide tek eleman kaldığında diğerinin boşalmamış olması C merge (n) = (n 1) Master Teoremine göre a=2, b=2, d=1
QuickSort Böl ve Fethet sıralama algoritması Merge sort tan farkı Diziyi alt dizilere konumlarına göre değil Değerlerine göre böler
QuickSort
QuickSort Bir eleman pivot seçilir Dizi biri pivot olmak üzere 3 alt diziye ayrılır Diğer iki dizi arasında pivottan küçük elemanlar ile pivottan büyük elemanlar değiştirilir Pivotun solunda pivottan büyük elemanlar olacak şekilde yer değişimi yapılır
QuickSort
QuickSort
QuickSort En iyi durum: Master Teoremine göre: En kötü Durum: Ortalama Durum:
Çok Basamaklı Sayıların Çarpılması Çok basamaklı iki sayının çarpımı A = 12345678901357986429 B = 87654321284820912836 Normal Çarpma Algoritması: a 1 a 2 a n b 1 b 2 b n (d 10 ) d 11 d 12 d 1n (d 20 ) d 21 d 22 d 2n (d n0 ) d n1 d n2 d nn Etkinliği: n 2
Böl ve Fethet ile Çarpım Örnek: A B =? A = 2135 and B = 4014 A = (21 10 2 + 35), B = (40 10 2 + 14), A B = (21 10 2 + 35) (40 10 2 + 14) = 21 40 10 4 + (21 14 + 35 40) 10 2 + 35 14 Algoritma: A = A 1 A 2 ve B = B 1 B 2 ise ( A ve B n-basamaklı, A 1, A 2, B 1, B 2 ise n/2-basamaklı sayılar), A B = A 1 B 1 10 n + (A 1 B 2 + A 2 B 1 ) 10 n/2 + A 2 B 2 Özyineleme ilişkisi: M(n): M(n) = 3M(n/2), n>1, M(1) = 1
Strassen in Matris Çarpım Algoritması Strassen in matris çarpımı için geliştirdiği algoritma
Strassen in Matris Çarpım Algoritması Matrisler ikinin katı değilse sıfır ile tamamlanır Çarpım Sayısı: M(n) = 7M(n/2), M(1) = 1 Çözüm: M(n) = 7 log 2n = n log 27 n 2.807 vs. n 3 (Kaba kuvvet)