CSS 343 — Data Structures and Algorithms (Autumn 2013)

See: tentative schedule below.

Description & Goals

This core computer science course covers the internal workings of algorithms and data structures, 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.

The objective of the course is to refine and extend the concepts and practical skills introduced in CSS 342.

The subject matter is highly technical so plan to put in considerable time and effort master the material. Expect to spend 10-15 hours or more outside of class per week.

Prerequisite: CSS 342 with a grade of 2.0 or better

Administrivia

Location & Time

Professor: Morris Bernstein

Textbooks

Supplementary Texts

Data Structures and Algorithms

C++

Books

Web Pages

Additional Topics

Assignments and Grading

Assignments (best 3 of 4) 60%
Midterm 20%
Final 20%
Total 100%

Optional supplementary assignments may be offered at the instructor's discretion for students wishing to improve their grade.

Final grades may be adjusted at the instructor's discretion.

Assignments

Assignments are to be handed in using catalyst by 11:30pm on the due date. The dropboxes for assignments will be linked from the course web site.

Your code should compile and run properly using the Linux g++ compiler on the Linux Lab (UW1-320) machines. Compile-time errors will not be looked upon kindly.

Solutions will be run against the instructor's test data, but submit your own test data to confirm that you've thought about testing.

Include a script named Run to build the program and run your unit tests (this need not be your own work, but do give proper credit in the comments; do not claim someone else's work as your own).

Optionally, include a text file named README containing any relevant notes. Avoid using the Catalyst comments section.

As the purpose of the assignments is to demonstrate understanding of the algorithmic techniques discussed in class, it is not necessary to sanity-check input or to be overly concerned with checking library-call return codes. This is, of course, an essential consideration for production-grade code, but is outside the scope of this class.

While your code will not be held to any particular style convention, do write your code to be readable with proper use of white space, reasonable naming conventions, and useful comments. Above all, be consistent. You will be dinged if you force your hapless marker to spend extra time trying to figure out what you did there.

Do review and think about the rationale behind various published style guides, such as:

Policies

Live lectures are inherently interactive. Questions during class are encouraged. Please raise your hand to get the instructor's attention. At the instructor's discretion, answers may be tabled until the end of class if they are too far off topic.

Limit computer use during class to note-taking so as to not distract or disturb your classmates or your instructor. Since a large part of the presentation involves diagrams, it may be more convenient to turn off the computer and take notes the old fashioned way. Quill pens are optional.

Flash photography is not permitted. Non-flash photography to capture the white board will be permitted as long as it is not disruptive or distracting. Don't even think about video.

Silence your cell phones.

If you arrive late or have to leave in the middle of class, do so quietly without causing disruption.

The assignments and project are to be done independently unless otherwise indicated. The purpose of the assignments is to help you understand deeply technical material. You may discuss the problem statement with each other and help debug, but do your own design and coding. See the student honor code.

Simple email questions may get a response. Complex questions are best saved for office hours.

Special-needs students:

To request academic accommodations due to a disability, please contact Disabled Student Services (DSS) at 425.352.5307, 425.352.5303 TDD, 425.352.5455 FAX, or at dss@uwb.edu. You will need to provide documentation of your disability as part of the review process prior to receiving any accommodations (by the third week of the quarter).

Tentative Schedule

Subject to change as the quarter progresses.

Week Date Lecture # Topic Assignment
1 Sep 26 1
  • Introduction & Review
    • complexity theory (performance)
    • software complexity (cognitive load)
    • tool chain
      • preprocessor & linker
  • Low-Level Concepts
    • pointers
    • memory management
2 Oct 1 2
  • Sequential Processing & Binary Search Revisited
  • Binary Trees
  • Dictionaries
Oct 3 3
  • Tree Balancing Techniques
    • 2-3 tree
3 Oct 8 4
  • Tree Balancing (cont.)
    • AVL or red-black tree
Oct 10 5
  • Priority Queues
  • Heapsort
Assignment 1 due
4 Oct 15 6
  • Huffman Coding
  • Radix Tree (Trie)
Oct 17 7
  • Midterm Review
5 Oct 22 8 Midterm
Oct 24 9
  • Hashing
6 Oct 29 10
  • Graphs & Graph Algorithms
    • depth-first search
    • breadth-first search
Assignment 2 due
Oct 31 11
  • Graphs & Graph Algorithms (cont.)
    • Dijkstra's algorithm
    • network flow
    • coloring
7 Nov 5 12
  • Object-Oriented Techniques
    • abstract data types
    • inheritance (is-a)
    • polymorphism
Nov 7 13
  • Object-Oriented Techniques (cont.)
    • templates
    • standard template library
8 Nov 12 14
  • C++ Idioms & Patterns
Nov 14 15
  • C++ Idioms & Patterns (cont.)
Assignment 3 due
9 Nov 19 16
  • Finite-State Machines
Nov 21 17
  • Regular Expressions
10 Nov 26 18
  • Context-Free Grammars
Nov 28
  • Holiday (Thanksgiving)
11 Dec 3 19
  • Turing Machines
Assignment 4 due
Dec 5 20
  • Final Review
12 Dec 10 Final Exam