Presents an introduction to the techniques for designing efficient computer algorithms and analyzing their complexity using the Python programming language. Students will gain insight into principles and data-structures useful in algorithm design. General topics include asymptotics, sorting and searching, hashing, algorithm design techniques, graph algorithms, and dynamic programming.