CSS 343 — Data Structures and Algorithms (Autumn 2013)

New

Syllabus

This core computer science course is about how algorithms and data structures work from mathematical principles to implementation in C++. Topics include trees and graphs, hashing, greedy algorithms, dynamic programming, abstract data types & object-oriented design, regular expressions, context-free grammars, and theoretical (mathematical) models of computation.

http://courses.washington.edu/css343/bernstein/current/syllabus.html

Assignments

Please submit assignments to the course dropbox (zip or compressed tarball, please): https://catalyst.uw.edu/collectit/dropbox/morrisb9/28568

Hackathons

To be announced.

Study Questions

Lecture Notes

Lecture notes and supplemental materials will be posted here as instructor time permits.

Lecture #1
  • Introduction & Review
  • Complexity Theory (Performance)
  • Complexity (Cognitive Load)
Lecture #6
  • Priority Queues
Lecture #11
  • Network Flow Problems
  • Shortest-Path Problem (unweighted & weighted)
    • Breadth-First Search
    • Dijkstra's Algorithm
Lecture #16
  • Iterators
  • Finite-State Automata
Lecture #2
  • The Tool Chain
  • Nasal Demons (Undefined Behavior)
  • Pointers & Memory Management
Lecture #7
  • Huffman Coding
Lecture #12
  • Dijkstra's Algorithm
  • Hashing
Lecture #17
  • Pointers & Virtual Functions
  • Finite-State Automata (cont.)
  • Regular Expressions
Lecture #3
  • Type Casting
  • Sequential Processing
  • Random Access
  • Dictionaries
  • Binary Search
  • Binary Search Tree
Lecture #8
  • Graphs & Graph Algorithms: Intro
Lecture #13
  • Bit Twiddling
  • Hashing (cont.)
  • Delving Deeper into C++
Lecture #18
  • Context-Free Grammars
Lecture #4 Lecture #9
Midterm Review: no notes
Lecture #14
  • virtual functions
Lecture #19
Lecture #5
  • Tree Rotations
  • AVL Tree
  • BST Deletion
  • Red-Black Tree
Lecture #10
Midterm: no notes
Lecture #15
  • Resource Management: RAII
  • Object-Oriented Design Principles
Lecture #20
Final review: no notes

Code Snippets

Often, the best way to understand some feature of a programming language is to write a small program that exercises the feature:

Resources

See also: Professor Zander's CSS343 homepage.

Programming Style Guidelines

TODO

Additional Advice

TODO