**Description:**

This course emphasizes the understanding of data structures and algorithms from an analytical perspective rather than an implementation standpoint. The concepts developed allow discussion of the efficiency of an algorithm and the comparison of two or more algorithms with respect to space and run-time requirements. Analytical methods are used to describe theoretical bounds as well as practical ones. In general, this course addresses the constraints that affect problem solvability.

Having successfully completed this course, the student will be able to:

- Apply algorithm analysis to the design, coding, and testing of programs to determine important runtime characteristics of software;
- Apply mathematical techniques such as recurrence relations to determine the upper bounds for algorithms;
- Apply the concepts of upper and lower bounds to recognize when an algorithm is a good solution for a problem;
- Abstract away details that hinder problem analysis and solution formulation;
- Apply the fundamental concepts of NP-completeness and tractable vs. intractable problems to distinguish tractable from intractable problems;
- Build upon the acquired foundation for further theoretical studies in computer science.

**Prerequisites:** A grade of C or better required in CS3114. Also MATH 3134 or MATH 3034.

**Recent Offerings**:

- Spring 2017: T. M. Murali
- Spring 2016: T. M. Murali
- Spring 2015: Lenwood S. Heath
- Spring 2014: T. M. Murali
- Fall 2013: Lenwood S. Heath
- Spring 2013: Lenwood S. Heath
- Fall 2011: Lenwood S. Heath
- Spring 2011: Lenwood S. Heath
- Fall 2010: Cliff Shaffer
- Fall 2009: T. M. Murali
- Spring 2008: Adrian Sandu
- Spring 2007: Cliff Shaffer
- Fall 2006: Lenwood Heath
- Spring 2006: Lenwood Heath
- Spring 2005: Lenwood Heath
- Fall 2004: Cliff Shaffer
- Spring 2004: Lenwood Heath
- Fall 2002: Donald Allison