Design and Analysis of Algorithms 4th Semester Computer Engineering Spring 2016 Conf.dr.ing. Ioana ᚢora ioana.sora@cs.upt.ro Our goal: design algorithms that are correct and efficient The Need for Correctness • Much too often, algorithms are designed in an ad-hoc manner and “validated” through testing on a few particular data sets … Example of a “sorting algorithm” The algorithm: A:array[1..n] of integer The “tests”: 5, 1, 2, 7, 6 15, 2, 4, 17,16 for i=1 to n-1 do if A[i]>A[i+1] swap(A[i], A[i+1]) But it does not work for 3, 2, 1, 5, 4 ! The Need for Correctness • Much too often, algorithms are designed in an ad-hoc manner and “validated” through testing on a few particular data sets … • The fact that an algorithm passed a number of tests on certain data sets DOES NOT guarantee that the algorithm is correct • The fact that an algorithm fails a test on ONE data set proves that it is NOT correct The Bubblesort Algorithm A:array[1..n] of integer for lim:=n downto 2 for i:=1 to lim-1 do if A[i]>A[i+1] swap(A[i], A[i+1]) • How can we know for sure that the algorithm is correct ? (Other than simply believing the programming textbooks ;-)) – ….we will learn this later in this course ! Now that we have a correct algorithm … • Implement it • Run the program and extensively test it with arrays of 10 numbers • Be happy that everything is fine • But: Run the program on an array of 10000 numbers … • Is it necessary to implement an algorithm to see that it takes too long for big sizes or can we predict this ? Analyzing Algorithms • We need methods and metrics to analyze algorithms for: – Correctness • Methods for proving correctness – Efficiency • Time complexity, Asymptotic analysis Designing Algorithms • Ok, so you will know (will learn) how to analyze a given algorithm. • But where do these algorithms come from ? – Clever people already designed a plethora of solutions (algorithms) for different problems and we find them in textbooks, internet, etc. – But how will you design solutions for new problems ? How to learn algorithms ? http://www.neatorama.com/twaggies/2010/11/07/no-112-robcorddry/ Kruskal’s algorithm Prim’s algorithm Floyd’s algorithm Dijkstra’s algorithm Tarjan’s algorithm Design methods: • Greedy • Design by Induction • Divide and Conquer • Dynamic Programming What about data structures ? • Fundamental data structures: – Model fundamental data • lists, queues, graphs • Special data structures: – Created to optimize a specific (set of) operation(s) for a specific context • Search trees, balanced trees • Optimal trees • Disjoint sets Course Goals • Learn to design algorithms that are correct and efficient – How do we know that: • an algorithm is correct ? -> correctness proofs • an algorithm is efficient ? -> analysis of algorithms (time complexity) – How to design solutions for new problems ? • Learning general techniques for design • Studying a set of well-known algorithms, to serve as examples of success stories for applying general design techniques • Become aware that good algorithms are key parts of software engineering practice ! Course Schedule • Review: Analysis • Data structures: Search Trees, Balanced trees, Augmented data structures, Graphs • Proving Correctness of Algorithms. Induction • Design of Algorithms by Induction • Dynamic Programming • Great algorithms in real life problems: – Data compression – Search engines Textbooks [CLRS] [Unlocked] [Manber] [McCormick] Course Webpage All official information related to the Algorithm Design and Analysis classes: http://staff.cs.upt.ro/~ioana/algo/ Lab Assignments • Comprise different types of exercises: – Questions - to be solved with pen on paper – Simple implementation problems - implement something that was described in the course – Algorithm design problems • This kind of assignments require to: – Describe the proposed algorithm – Analyze your algorithm (prove correctness and efficiency) – Implement the algorithm – Tool projects • Complex projects containing also a part of algorithm design and implementation • They are optional, but: in order to get a 10 for the lab activity, you have to do at least one tool project Examination and Grading • Final grade = 2/3 final written exam + 1/3 work during the semester • Written exam: – Questions and Algorithm design problems (such as these the lab description above) • Work during the semester: – Lab assignments – Lab quizzes – Tool project (for 10) • Optional bonus points: for exceptional activity = doing more than one optional tool project during the semester, you can gain extra-points to the grade of your final written exam