Algorithm Design and Complexity, III/1, 2C, 0S, 1 L, 0P, C, 4


Course description

This course is an i ntroduction to the design, behavior, and analysis of computer algorithms. Searching, sorting, and combinatorial algorithms are emphasized. In the first part, a number of standard algorithm design paradigms are presented and example applications of these examined. In the second part of the course, some theoretical issues in algorithm design are examined. The concepts of computability and computational tractability are introduced.

Prerequisite(s) & Corequisite(s)

Prerequisites: "Data Structures and Algorithms". Knowledge and experience of programming in a high-level imperative language (Java, C++, or C).

The "Formal Languages & Automata" course should carry on and supplement this course with other, specific topics.
Textbook(s) and web materials

•  A.V.Aho, J.D.Ullman, Foundations of Computer Science (Principles of Computer Science Series), W. H. Freeman & Co, 1995.

•  D.E.Knuth, The Art of Computer Programming , v.1-3, 2/e, Addison-Wesley, 1998. (there is also an edition in Romanian)

•  C.Giumale, L.Negreanu, S.Călinoiu - Proiectarea si analiza algoritmilor, Editura All Educational, Bucuresti, 1996

•  Michael T. Goodrich, Roberto Tamassia, Algorithm Design: Foundations, Analysis, and Internet Examples, John Wiley & Sons, 2001.
Course objectives

•  To introduce the student to basic algorithmic analysis techniques.

•  To familiarize the student with fundamental strategies in algorithmic design.

•  To teach the student implementation techniques for complex data structures such as graphs, trees, and networks, to familiarize the student with performance issues related to these structures, and to provide the student with a broad range of algorithms for manipulating them

•  To teach the student to handle asymptotic complexity bounds of algorithms.

•  To  prepare  the  student  for  additional  study  in computer science

Topics covered

Algorithm Analysis. How to characterize an algorithm's behavior and how to compare two algorithms? Quantification of resources used by algorithms. Asymptotic upper, lower, and tight bounds on time and space complexity of algorithms. (2h)

Case Studies in Algorithm Analysis. Abstract Data Type Definition. Complexity analysis of some well-known implementation solutions for basic ADTs (stack, queue, vector, list, sequence, set, tree, priority queue, heap, dictionary, hash table). (4h)

Analysis of Searching Algorithms. Ordered Dictionaries. Binary Search Trees. Balanced Binary Search Trees (Red-Black trees, B-Trees, 2-3 trees) (3h)

Analysis of Sorting and Selection Algorithms. Merge-Sort. Quick-Sort. A Lower Bound on Comparison-Based Sorting. Comparison of Sorting Algorithms. Selection. (4h)

Fundamental Techniques. The Greedy Method. Divide-and-Conquer. Dynamic Programming. (4h)

Graphs. The Graph Abstract Data Type. Data Structures for Graphs. Graph Traversal. Directed Graphs. (4h)

Weighted Graphs. Single-Source Shortest Paths. All-Pairs Shortest Paths. Minimum Spanning Trees. Dijkstra's Algorithm. (4h)

Networks. Flows and Cuts. Maximum Flow. Maximum Bipartite Matching. Minimum-Cost Flow. (2h)

Foundations of algorithms. Models of algorithmic process and their universality: Church-Turing hypothesis. Polynomial versus Non-Polynomial time complexity. (2h)

NP-completeness. Important NP-Complete problems. Approximation algorithms. Backtracking and Branch-and-Bound (3h)

Laboratory consists of discussion, problem solving, and presentation of homework solutions. Pre-reading of the lecture notes and class attendance is essential and students are expected to be prepared and to actively participate in class activities. There are about 7 assignments, due two weeks after the student get them. Assignments should be prepared for the next class period. Some may be collected for grading; others will be reviewed in class.


Grading will be as follows:

60% Final exam (individual quiz + a set of small problems)

40% Homework assignments, unannounced quizzes and personal contribution to laboratory classes.
Professional significance

The topic of algorithmic analysis is central to computer science. Its goal is to explore and examine a range of algorithms that can be used to solve practical problems. As we know, each algorithm possesses strengths and weaknesses. Moreover, the performance or any particular algorithm typically varies according to the size and nature of the input data. Students need a thorough understanding of the tools of analysis in order to select the right algorithm for the job. This is exactly what this course intends to offer.