Course Description

In this course, you will gain a strong theoretical and conceptual understanding of common data structures and algorithms, as well as how to apply them within larger programming projects.

Specific topics we will cover include:

  • Asymptotic analysis, Algorithm Analysis, Recursion, and recurrence relations.
  • Sorting and divide-and-conquer.
  • Data structures and ADTs: lists, stacks, queues, sets, dictionaries, linked lists, arrays, trees, balanced trees, AVL trees, Red Black Trees, Maps and Hash tables, Priority queues, binary heaps, and disjoint sets. Tries, Skip Lists, Huffman Coding.
  • Graphs and graph algorithms: graph search, shortest path, and minimum spanning trees. A* Search, Theta* Search.

This course is also designed to have a practical component to help you gain basic familiarity with techniques used within industry. You’ll be asked to:

  • Work on programming projects and integrate your work in an existing codebase.
  • Learn how to use an IDE.
  • Learn techniques for checking correctness: using our unit tests with PyCharm debugging, designing, and checking invariants, etc.
  • What are the course objectives?
  • Students completing this course are expected to be able to:
  • Understand several significant algorithms
  • Compare and select among fundamental data structures
  • Apply general algorithms to practical problems
  • Analysis algorithm complexity
  • Study of common complexity classes
  • Greedy Algorithms: Dijkstra's algorithm, Prim’s, Knuth’s algorithm, Minimum spanning trees
  • Divide and conquer Dynamic programming