Syllabus

[top]

Description & Goals

This core computer science course covers the workings of data structures and algorithms, from mathematical principles to implementation in C++. Topics include trees and graphs, hashing, greedy algorithms, 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 to master the material. Expect to spend 10-15 hours per week or more outside the classroom.

Prerequisite: CSS 342 with a grade of 2.0 or better

[top]

Administrivia

Location & Time

Professor: Morris Bernstein

[top]

Textbooks

Data Abstraction & Problem Solving with C++, Frank M. Carrano, Addison‐Wesley

In recognition of the high cost of textbooks, the instructor does not specifically require the use of the recommended text. Earlier editions are quite acceptable. See also recommended supplementary texts & videos.

[top]

Assignments and Grading

Assignments (3 @ 20%) 60%
Midterm 20%
Final 20%
Total 100%

Do not leave assignments to the last minute. Don't be like Nerwin. The assignments are substantial and the only way to make them manageable is to break them into smaller subtasks. Each one has logical milestones that can help you gauge your progress. Think of them as mini projects.

Compile and test after making small changes. It is so much easier to debug a program in which you only changed a dozen lines than to debug a program of 100s or 1000s of lines.

Use the -std=c++14 dialect of C++. Source code should be compiled with the -Wall (warn on common conditions) -Wextra (extra warnings), -Werror (treat warnings as errors), and -pedantic. Experience shows that the things the compiler tends to warn you about are probably bugs.

Turn in your assignments using Canvas. Submit a single compressed tar or zip archive containing all source code and sample input & output files. Include a README file with relevant notes and discussion, (basically, as much or as little as necessary to show you got the pedagogical value of the assignment, generally no more than a page or so). Do not include compiled executables or large data files.

Submit assignments by 11:30 pm on the due date. Acceptance of late assignments will be determined on a case-by-case basis. Generally, it won't be a problem if it's only a few days due to demands of your day job, as long as the privilege is not abused.

Assignments must be runnable on the machines in the Linux Lab (UW1-320). You may develop your solutions under Mac or Windows but do your final testing on a Linux machine. The assignments will be graded on the instructor's Linux laptop, but any subtle conflicts or incompatabilities will be resolved using the lab machines.

While you are encouraged to discuss the assignments with your peers, do not crib off each other. Make sure you know where to draw the line. Blindly copying something you found on some website is an example of cargo cult programming and is never a good thing. In addition to citing sources, do make sure you understand the solution. You will be tested on it—if not in class, then in your future job interviews.

Generic feedback about assignments will be provided in class. Individual feedback will given on request during office hours.

If a grade is egregiously out of whack with your expectation, feel free to ask for another look. With limited time available for grading1, overlooking something is easy to do. Just be aware that a re-evaluation may cause the grade to go up or down.

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

[top]

Policies

See the common STEM policies document: http://www.uwb.edu/getattachment/stem/about/stem-policies/classroom-policies-stem-fc-1-12-17.pdf for information on:

Class Conduct

Live lectures are inherently interactive. Questions during class are encouraged. Raise your hand or dance like a chicken to get the instructor's attention. At the instructor's discretion, answers may be tabled until the end of class or office hours if they veer 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 as quietly as possible without causing disruption.

As this course focuses on technical knowledge vital to your future career in software development, the classroom is a politics-free zone. As in the workplace, you may find yourself working with people who hold differing views on many controversial subjects outside the realm of software engineering. There are times and places to discuss such topics but the software engineering classroom is neither. You may be asked to cover or put away clothing, electronics, or other gear decorated with controversial, offensive, inflamatory, or simply distracting slogans.

Attendance and Class Participation

While attendence is not taken, to get the most out of the course, plan to attend class and be actively engaged. If you have to miss any classes, it's your responsibility to keep up with the material. Get lecture notes from a peer or see the instructor during office hours. Do not email the instructor just to tell him you won't be able to attend a lecture.

Illness

If you're sick, stay home. Do not selfishly infect others.

If you have to miss an assignment due to illness, let the instructor know as soon as practical. Generally, a few days shouldn't be a problem, but do not abuse the policy. Anything longer will probably require a doctor's note.

A missed exam will require a doctor's note for make-up accommodation.

Email

Simple email questions might get a response if it is so urgent (in the instructor's opinion) that it cannot wait for the next class day or office hours. Complex questions are best saved for office hours.

The instructor has generous office hours. Please respect the instructor's time by not inundating him with email.

[top]

Special-Needs Students

To request academic accommodations due to a disability, please contact Disability Resources for Students at 425.352.5307, 425.352.5303 TDD, 425.352.5455 FAX, or at uwbdrs@uw.edu.

[top]

Academic Conduct

Please review the Student Guide to Academic Integrity.

Assignments and projects are to be done independently unless otherwise indicated. Their purpose is to help you understand technical material that will aid your future career prospects. If you cheat and get caught, at the very least you will receive a failing grade for the assignment and a misconduct letter in your file. At worst, you may face expulsion. If you do manage to cheat and get away with it, you may pass the course but you will surely fail your job interviews because you didn't learn material you needed to know. Either way, it's not a good outcome.

There is a lot of good reference material on the interwebs. Refrain from looking for exact solutions to the assignments. If you happen to stumble upon anything suspiciously similar, let the instructor know as soon as practical. If it was in good faith, there should be no problem (possibly with some additional work assigned to be fair). Bad faith leads to consequences. Attempting to disguise copying is evidence of bad faith. When in doubt, cite your references.

In general, you will be graded on your own work, not on your ability to use a search engine. You won't be penalized for being resourceful, but you will be for not doing your own work. Use good judgement to figure out where to draw the line.

Do not post assignments and solutions to any public websites or forums. Doing so potentially helps someone else cheat. Don't tempt them; it makes you an accomplice. Facilitating plagiarism is also plagiarism.

By all means, do discuss the problem statement and help each other debug, but do your own design and coding. See the student honor code, particularly the section on academic misconduct. Know where to draw the line.

Worst of all, if you do cheat, you are wasting your instructor's time. University policy requires the instructor to fill out paperwork to ensure due process. Your instructor hates filling out this kind of paperwork and it makes him grumpy. Avoid making your instructor grumpy.

Integrity is about what you do when no-one is watching.

[top]

Tentative Schedule

Subject to change as the quarter progresses.

Week Date Lecture # Topic Assignment
1 Mar 27 1
  • Introduction & Review
    • complexity theory (performance)
    • software complexity (cognitive load)
    • C++ toolchain
      • separate compilation
      • preprocessor
Mar 29 2
  • Dictionaries
    • binary search
    • binary search trees
2 Apr 3 3
  • Dictionaries (cont.)
    • balanced binary search trees
      • AVL
      • red-black
Apr 5 4
  • Dictionaries (cont.)
    • B-trees
3 Apr 10 5
  • Dictionaries (cont.)
    • tries
Assignment 1
due Apr 11
Apr 12 6
  • Dictionaries (cont.)
    • hashing
4 Apr 17 7
  • Priority Queues
    • binary heaps
Apr 19 8
  • Data Compression
    • Huffman coding
5 Apr 24 9
  • Midterm Review
Apr 26 10
  • Midterm
6 May 1 11
  • Post-Midterm
Assignment 2
due May 2
May 3 12
  • Graphs
    • depth-first search
    • breadth-first search
7 May 8 13
  • Graphs (cont.)
    • Dijkstra's algorithm
May 10 14
  • Object-Orientation
    • pointers
    • inheritance & polymorphism
8 May 15 15
  • Object Orientation (cont.)
    • SOLID design principles
    • refactoring
May 17 16
  • C++ Idioms
  • Patterns
9 May 22 17
  • Regular Expressions
Assignment 3
due May 23
May 24 18
  • Finite-State Automata
10 May 29 19
  • Context-Free Grammars
  • Turing Machines
May 31 20
  • Wrap-Up & Final Review
Jun 5
  • Final Exam

Footnotes