CSC 2400 - Design of Algorithms Fall Semester, 2009 1998 Catalog Data : CSC 2400 : Design of Algorithms. Lecture 3. Credit 3. Advanced data structures and applications, problem solving strategies, heuristics, and complexity of algorithms. Prerequisite: CSC 2020. Corequisite: Math 1920. Textbook: Course Notes by Instructor and Anany Levitin, The Design and Analysis of Algortihms Time and Room BR 404, TR 1:30-3:00 Instructor: Dr. Frank Hadlock, Professor of Computer Science, Br 419, Ph 372-3687 Office Hours : 1:00-3:00 M W Goals: To aid the student in developing general skills in problem analysis and solution, and specific skills for algorithm design and analysis for classes of problems involving sorting, text processing, graphs & networks, and discrete optimization. General concepts to be stressed are problem solving paradigms, validation of algorithms, worst case analysis, and special case algorithms. Prerequisites by Topic: 1. Introductory discrete mathematics, including definitions of graphs and trees. 2. Introductory programming in C, Java or other language supporting recursion and mechanisms for constructing complex data structures. 3. Use of linked list and tree data structures. Topics : 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Basic concepts of algorithms, including the definition of algorithm, specification of algorithms, correctness of algorithms, and efficiency of algorithms, algorithm design process. Big Oh notation and worst case and every case analysis of algorithms. Data Structures including graphs, stacks, queues, priority queues and heaps, hash tables. Incremental paradigm for algorithm design with application to list problems. Divide and Conquer paradigm for algorithm design with application to searching and sorting. Dynamic Programming paradigm for algorithm design with application to approximate string matching problems and to text compression. Greedy paradigm paradigm for algorithm design with application to shortest path and minimum spanning tree problems. Backtrack Programming paradigm paradigm for algorithm design with application to knapsack and minimum cover NP complete problems. Minimum Detour paradigm for algorithm design with application to shortest path problems in special classes of graphs. Convex Hull. Genetic Algorithms Tests (3) plus final examination. Programming (4) involving empirical testing of efficiency of alternative approaches. Computer Usage: Computer usage is the primary project component of the course. Category content: 1. Algorithms: 2 Credits or 66% 2. Data Structures: .5 Credits or 16% 3. Software Design .5 Credits or 17% Design Content CSC 240 Students use problem analysis and creative problem solving skills to develop functional specifications for a problem. They develop an algorithmic solution beginning with a paradigm and using stepwise refinement to arrive at a suitably specific pseudocode description of the algorithm to implement the algorithm in a programming language. Projects feature alternative solutions to the same problem. Devise a system, individual effort, analysis, synthesis, creativity, iterative process, design methodology, alternate solutions, computer applications. Project Format: The format for 2400 programming assignments / projects is as follows : Problem Statement Pseudocode expression for approach to solving problem (approximate and exact solutions). The pseudocode will be in the form of Structured English to be specified by the instructor. Small problem instance illustrating approach to solution by stepping through pseudocode by hand Implementation with commented source code : each function must be commented as to input, behavior, and output along with comment for each major control statement Runtime scenarios for different problem instances, including the small problem instance (corresponds to testing) Reporting of basic operation count as function of problem input size. All materials must be typed in MS Word or computer generated and bound with a cover. Some projects will be demonstrated (to class or instructor) Grades : Grades will be 90+ is an A, etc., with 10% weight for each of the three tests, and 10% weight for each of the four programming assignments, 20% for the final, and 10% for class participation in class discussion. 2 Basic Concepts This chapter will deal with basic concepts assoicated with algorithm design. An algorithm is simply a finite sequence of computational steps which accepts a problem input and produces an answer to that problem. Specification of an algorithm refers to the expression of the computational steps making up the algorithm. For example, if the problem to be solved is the problem of sorting a list into ascending order, then the text presented in Figure 1.3 is a pseudocode specification of an algorithm referred to as insertion sort. Design of an algorithm refers to the process of proceeding from the statement of the problem to be solved to an algorithm which solves it for every instance of the problem. Proceeding from the description of the sorting problem to a specification of the insertion sort algorithm would be a simple example of the design process. In acutal practice, design would also involve analysis of the proposed algorithmic solu-tion, as to correctness and efficiency, as well as an investigation of althernative solutions. In this text, a paradigm based approach to design will be emphasized. A paradigm is just a very high level algorithm for solving a wide class of problems; algorithms are derived from the paradigm by “filling in the blanks”. An instance of a problem is a set of input values for the problem. Correctness of an algorithm refers to whether or not the output produced by the algorithm is the correct answer to the problem for every problem instance. Sometimes we must satisfy ourselves with an approximate solution when determining the correct answer is computationally intractable (we would die of old age before the fastest computational device in existence could caculate a correct answer). Efficiency of an algorithm refers to time or memory requirements needed to calculate the answer. This is expressed in terms of the input size. For example, the input size for the sorting problem is the number of items n to be sorted. 3 4