Design and Analysis of Algorithms
This course stresses the quantitative methods used in the design and analysis of algorithms. The main emphasis of this course is to help you develop the skills needed to analyze the running times of algorithms and to prove the correctness of algorithms. A secondary goal of this course is to familiarize you with a broad range of fundamental algorithms. The material covered in this course will include algorithms for sorting, order statistics, hashing, balanced binary trees, dynamic programming and graphs. If time permits, a selection of advanced topics (such as cryptographic algorithms, NP-completeness, Strassen's algorithm or parallel algorithms) may also be included.
Topics covered include:
to design new algorithms based on standard algorithm-design strategies (scanning, divide-and-conquer, dynamic programming, greedy, precomputation, time-space tradeoff, transformation, randomization, branch-and-bound, exhaustive search, approximationto analyze the time and space usage and correctness of new algorithms based on standard algorithm-analysis techniques (set up and solve summation, set up and solve recurrence, count by object vs. count by lines of code, proofs by induction, asymptotic notations)
to apply and adapt fundamental algorithms (sorting, searching, order statistics, graph algorithms, integer arithmetic, and selected combinatorial tasks) to new situations
to solve problems and to express your solutions using the language and concepts of algorithms and its mathematical tools.
Senior computer science students
You should have mastered the material covered in the following courses: Discrete Math, Data Structures and Calculus and Analytic Geometry II. The material in Appendix B, Chapter 10 and Chapter 12 of the textbook (covering sets, elementary data structures and binary search trees) should be familiar. Some knowledge of probability and counting (Appendix C of the textbook) is also expected. In addition, proficiency in the implementation of the elementary data structures (e.g. stacks, queues, linked lists, binary trees and graphs) in C/C++ or Java is assumed.
E-mail firstname.lastname@example.org or call (443) 692-6599:
- if you have any questions about this course,
- to be notified when this course and any closely related courses are scheduled for open enrollment,
- to request a quote for group training at your location or ours.