Brian Jo
Syllabus for the class
- Algorithmic Thinking & Complexity
- Data Structures: Organizing Information
- Searching & Sorting
- Trees, Heaps & Priority Queues
- Graphs & Networks
- Algorithmic Problem Solving
How algorithms work, how we compare them, and why efficiency matters
What is an algorithm, breaking problems into precise steps, algorithm design and pseudocode, correctness and edge cases, measuring runtime and memory usage, Big-O notation, constant vs. linear vs. quadratic vs. logarithmic growth, computational tradeoffs
How computers organize and access collections of data
Arrays and dynamic arrays, linked lists, stacks and queues, LIFO and FIFO behavior, choosing the right data structure, time complexity of common operations, memory vs. speed tradeoffs, real-world applications of data structures
Algorithms for finding, ordering, and organizing data
Linear search and binary search, prerequisites for efficient searching, selection sort, insertion sort, merge sort, quicksort, comparing algorithmic efficiency, divide-and-conquer thinking, stable vs. unstable sorting, choosing an algorithm for a particular problem
Hierarchical data structures and efficient priority-based algorithms
Tree terminology and representations, binary trees, binary search trees, tree traversal, recursion, balanced vs. unbalanced trees, heaps, priority queues, heap operations, and applications such as scheduling and finding the highest-priority item
Modeling relationships, networks, paths, and connections
Graphs and networks, vertices and edges, directed vs. undirected graphs, weighted graphs, adjacency lists and matrices, breadth-first search, depth-first search, connected components, shortest-path problems, and applications including maps, social networks, and communication systems
Putting algorithms and data structures together to solve problems
Problem decomposition, choosing appropriate data structures, recursion, greedy algorithms, dynamic programming concepts, backtracking, algorithmic tradeoffs, recognizing common problem patterns, testing and debugging algorithms, and a final algorithm design challenge