CSE 247 502N Data Structures and Algorithms: course objectives - bsiever/WUSTL-CSE-Curriculum GitHub Wiki
Week 0: Array Expansion
- Have a better understanding of simple data structures
- Understand the concept of time complexity
- Know how to contact or find your instructor and TAs
- Navigate the course web site
- Understand the course structure
- Know how to use the Eclipse programming environment to:
- check out a project from your repository
- edit Java source code
- correct compilation errors
- execute programs
- commit your work
- Know how to use the 'Ticker' class to quantify complexity
Week 1: Asymptotic Complexity
- Be able to count statements in simple nested loops
- Have an understanding of what asymptotic complexity is
- Be able to determine the leading term of a polynomial
- Have an understanding of what Big-O time-complexity is
- Be able to compare the asymptotic growth rates of two functions
Week 2: Simple Data Structures
- Be able to apply limit tests to compare the asymptotic growth of two functions
- Be able to distinguish the fastest/slowest among several algorithms given their asymptotic complexities
- Describe the functionality of a collection abstract data type
- Describe the operation of some basic data structures that can implement a collection ADT
Week 3: Priority Queues
- Be able to describe the interface of a priority queue ADT
- Be able to discern good vs. bad implementations of priority queues
- Understand the implementation and use of heaps
- Be able to perform the fundamental heap operations
- Be able to create a heap from a set of ordered values
- Know how to implement a binary heap using an array
Weeks 4/5: Recurrences
- Know how to describe the running time of a recursive program with a recurrence
- Be able to use substitution to confirm a closed-form solution to a recurrence
- Know how binary search works
- Be able to sketch recursion trees and use them to solve a recurrence
- Be able to use the master method to solve recurrences
- Be able to determine when the master method is applicable to a recurrence
Week 6: Sorting
- Be able to enumerate some common sorting algorithms and their complexities
- Understand how the merge sort algorithm works
- Understand how the radix sort algorithm works
- Understand the basis of the comparison-sorting lower bound, and why it does not apply to radix sort
Weeks 7/8/9: Hashing
- Know why a direct table or hash table might be preferable to other implementations of a collection ADT
- Understand how to resolve collisions in a hash table by chaining
- Be able to explain the Simple Uniform Hashing assumption and why it is needed to ensure good average-case performance of hash table operations
- Know common strategies for converting integer-valued hashcodes to table indices, including both division and multiplicative hashing
- Know some strategies for converting non-integer objects to hashcodes
- Be able to articulate the difference in behavior between hashing a set and hashing a sequence
- Understand how to resolve collisions in a hash table by open addressing
- Be able to describe a hashDoS attack and to explain why most common hash functions are not resistant to a malicious attacker
Weeks 10/11: BSTs and Balanced BSTs
- List some fundamental operations supported by an ordered collection type
- Describe how to do these fundamental operations on a binary search tree
- Define "balance" in a tree and explain why it is important its performance as an ordered collection
- Explain how to efficiently maintain the height and/or size of each subtree in a tree under dynamic insertion and deletion
- List some properties that guarantee that a tree will be balanced
- Explain how to dynamically maintain these properties in a tree under insertion and deletion
- Explain how to do a rotation operation on a tree and why it is important for rebalancing
- Perform insertion and deletion in an AVL tree
- Perform insertion in a 234 tree
Week 12: Graph Searches (BFS and DFS)
- Understand graph terminology such as:
- simple
- connected
- directed and undirected
- dense and sparse
- Understand how to represent a graph using an
- adjacency list
- adjacency matrix
- Understand breadth-first and depth-first search
- Be able to perform both of these on a graph
- Know how to tell if a directed graph has a cycle
- Understand what a topological sort is
- Be able to apply topological sort to a directed acyclic graph
Week 13: Shortest Paths
- Understand how Dijkstra's shortest-paths algorithm works
- Be able to analyze its complexity on dense and sparse graphs, with a binary or Fibonacci heap
- Understand why priority queues are relevant to graph algorithms
Week 14: Greedy Algorithms
- Understand what is meant by term "greedy"
- Understand the definition of a minimum spanning tree for a graph
- Understand and be able to perform Prim's and Kruskal's MST algorithms
- Understand the asymptotic complexity of Prim's and Kruskal's algorithms
- Understand the general approach to proving a greedy algorithm correct