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