Algorithms & Analysis Textbook & References 1.1 Introduction to Algorithms, 2 nd Ed. by Cormen, Leiserson, Rivest & Stein, MIT Press, 2001 OTHER REFERENCES -- The Design and Analysis of Computer Algorithms, by Aho, Hopcroft and Ullman Algorithms, by Sedgewick Algorithmics: Theory & Practice, by Brassard & Bratley Writing Efficient Programs, by Bentley The Science of Programming, by Gries The Craft of Programming, by Reynolds 1.2 Problemin Cozumu Baslica Amac Problem Tanimlama & Belirleme Input, output ve kisitlamalari belirle Algorithm design & analysis Correct ve efficient algorithma tasarla Gercekleme Kodlama, test etme ve dogru calistigini arastirma Dusunme kabiliyetini gelistirme formal dusunme (ispat teknikleri ve analiz) Problem cozum yetenegi (algoritma tasarimi ve uygula) 1.3 1.4 Ne ogrenecegiz Amaclar Ilginc problemleri inceleme Bu problemleri cozum icin algorithmalar bulma Dogruluklarini ispat Runtime performanslarini analiz etme Veri yapilarina ve core algoritmalara calisma Problem ogrenme- cozum teknikleri Gercek hayattan uygulamalar Onemli (core) algoritmalari tanima Algoritna design methodlarini ogrenme Divide & conquer, greedy algorithms, randomization, dynamic programming, approximation yontemleri Verilen bir algorithmanin dogrulugunun ve runtime performansinin analizi Bazi problemlerin inherit (dogasindan gelen) kompleksitesini tanima (lower bounds) Yaygin kullanilan temel veri yapilarini ogrenme Ogrenilen yontemleri pratik problemlerde kullanma 1.5 1.6
Ders yol haritasi Algorithm Analysis Veri Yapilari Sorting & Ordering (Siralama ve duzenleme) Tasarim Yontemleri Asymptotic Notation Recurrence Relations Probability & Combinatorics Proof Techniques Inherent Complexity 1.7 1.8 Data Structures Sorting & Ordering Lists Heaps Graphs Trees Balanced Trees Heapsort Other Sorting Methods Linear-Time Sort bucket sort counting sort radix sort Hash Tables Selection 1.9 1.10 Algorithmic Design Paradigms Algorithmic Temeller Divide and Conquer Dynamic Programming Greedy Algorithms Graph Algorithms Randomized Algorithms Approximation Methods Algoritmalara, kompleksite ve dogruluk ispati Asymptotic Notasyon Amac: Problemi tanimlama, probleme cozum uretme, ve algorithmanin etkinligini belirle. Bir algorithmanin upper ve lower bound lari arasindaki farki ogrenmek. Algoritmanin dogru olup olamdigina karar vermek ve kompleksitesini hesaplamak. 1.11 1.12
Divide-and-Conquer Randomized Algorithms Designing Algorithms Recurrences Amac: divide-and-conquer yonteminin ne zaman uygun oldugun belirlemek, ve bu tip algorithmalarin genel yapisi. Kompleksitelerini recurrence esitlikleri kullanilarak karakterize etme. Cok kullanilan recurrence relation larinin cozumlerinin ezberlenmesi Probability & Combinatorics Hash Tables Amac: ornek uzay, basit olay, birlesik olay, bagimsiz olay, kosullu olasilik, random degiskenler. Bunlarin randomized algopritma ve veri yapilarinda kullanimi. average case behavior (ortalama durum davranisi), worst case behavior (en kotu durum davranisi) arsindaki farklari ogrenme. 1.13 1.14 Sorting & Selection Balanced Trees Heapsort Bucket Sort, Radix Sort. Selection Amac: Siralama algorithmalarinin performanslarinin analizi. Binary Search Trees Red-Black Trees Amac: Insertion ve deletion islemleri icin tree lerin neden balanced tutulmasinin temel sebepleri. 1.15 1.16 Graph Algorithms Greedy Algorithms Temel Graf Algoritmalari Amac: Graflar nasil temsil edilir, graflar problem cozumlerinde nasil kullanilir. Graflarin adjacency matriksi ve edge list ile temsili. Greedy Algorithmalari Minimum Spanning Trees Shortest Paths Amac: greed algorithmalari ne zaman kullanilir ve onlarin temel karakteristikleri. Minimum spanning tree ve shortest path hesaplamalari pratikte hangi problemlerin cozumunde kullanilir 1.17 1.18
Dynamic Programming Algorithms Dynamic Programming Hesaplanabilir bir problemin cozumu icin bir arac Amac: Problemin hangi karakteristikleri onun dynamic programlama ile cozumune uygun olmasini saglar, dynamic programlamanin divide-and-conquer yonteminden ne farki var. 1.19 Input Algorithm Ornek: sorting input: Bir dizi sayi output: input un sirali bir permutasyonu issues: correctness (dogruluk), efficiency (etkinlik), storage (alan), etc. Output 1.20 Analyzing Algorithms Basit bir ornek Kabuller Genel bir islemci, random access machine running time (others: memory, communication, etc) Worst Case Running Time: n uzunluklu herhangi bir input icin en uzun zaman Herhangi bir input icin running time in upper bound u Average Case Behavior: butun olasi inputlar icin beklenen ortalama performans Genellikle worst case behavior dan daha iyi Bazen worst case behavior kadar kotu olabilir INPUT: n uzunluklu bir sayilar dizisi OUTPUT: iclerinden en kucugunu bulma 1. x T[1] 2. for i 2 to n do 3. if T[i] < x then x T[i] Bu algorithmanin performansi n nin bir fonksiyonudur 1.21 1.22 Runtime Analysis Temel operation: execution i icin gecen zaman gerceklestirilmesine bagli olarak bir sabitle ust sinira sahip olan islem. Butun temel islemlerin birim zamanda gerceklestirildigini varsayiyoruz. Bu aslinda dogru degil, ancak temel bir islem icin gerekli zaman, diger temel bir islem icin gerekli zamanin bir sabitle carpimi seklinde elde edilebilir. Order of Growth (Gelisme Sirasi) Cok buyuk boylu inputlar icin, onemli olan asymptotic rate of growth dir Lower-order terms (dusuk dereceli terimler) ihmal edilebilir, cunku buyuk n ler icin bunlar gorecelik acisindan onemsizdir. Ayni zamanda onemli terimin sabit coefficienlerini de ihmal edebiliriz, cunku onlar cok buyuk n ler icin hesaplama performansinda rate of growth icin onemli degil. n e bagli yuksek dereceli fonksiyonlar az efficient olarak kabul edilir 1.23 1.24
Comparisons of Algorithms Sorting insertion sort: Q(n 2 ) merge sort: Q(n lg n) n=10 6 icin supercomputer de insertion sort 5.56 saat de tamamlanabildigi halde, PC de merge sort 16.67 dakikada tamamlanir. Order of Growth neden onemli Bilgisayar hizlari her iki yilda ortalama iki katina cikmakta, dolayisiyle algoritma hizi hakkinda nicin endise edebiliriz? Makinanin hizi iki katina ciktiginda ayni sure icerisinde makina ne kadar is yapabilir. 1.25 1.26 Hizli makinelerin etkisi ops/sec: 1M 2M Gain n 2 alg: 1000 1414 1.4 n lg n alg: 62700 118600 1.9 n 2 ve n lg n growth rate sahip olan iki algorithmanin 1sn yede siralayabilecegi dizinin uzunluklari (saniyede 1 milyon ve 2 milyon islem yapildigi goz onune aliniyor) 1.27