Previous version of this site.
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/syllabus.html
Please submit assignments to the course dropbox (zip or compressed tarball, please): https://catalyst.uw.edu/collectit/dropbox/morrisb9/25684
Lecture #1 |
Lecture #6
btree-animation.zip |
Lecture #11 | Lecture #16 |
Lecture #2 | Lecture #7 |
Lecture #12
Midterm |
Lecture #17 |
Lecture #3 | Lecture #8 | Lecture #13 |
Lecture #18
sample recursive descent parser |
Lecture #4 | Lecture #9 | Lecture #14 | Lecture #19 |
Lecture #5
red-black.zip |
Lecture #10 | Lecture #15 | Lecture #20 |
Often, the best way to understand some feature of a programming language is to write a small program that exercises the feature:
voyeur.cc
:
using a cast to access and modify private const member
ptr_math.cc
:
pointer arithmetic
inverted_array.cc
:
pointer-array equivalence
sizes.cc
:
sizes of different things
args.cc
:
command-line argument processing
destructor.cc
:
constructor & destructors with inheritance
func_ptr.cc
:
function pointer example (call with command-line arguments)
-DUSE_TYPEDEFS
inheritance.cc
:
calling virtual/nonvirtual functions via base pointers
constructor.cc
:
constructor/initializer syntax & semantics
single-dispatch.cc
:
single dispatch
A->Func(B)
(function chosen based on dynamic type of A but static type of B)
dispatch.cc
:
simulating double dispatch
(A, B)->Func()
(function chosen based on dynamic type of A and B)
Under construction...
See also: Professor Zander's CSS343 homepage.
There are many aspects to a Linux system.
man
).
man
pages).
man
pages).
sh
written by
Stephen Bourne,
and
One of the key concepts in Unix-based systems is the pipeline, where output from one program can be fed as input to another. A filter is a (typically small, single-function) utility program that is designed to work in a pipeline with other program.
The Perl programming language was insprired by the Unix utilities and many of the utilities can be replaced by a short, often single-line, Perl script.
It's worthwhile to learn both vi (or its modern incarnation, vim) and emacs because both are designed to maximize programmer efficiency, based on different approaches (vi based on minimizing keystrokes and emacs based on programmability). With minimal understanding, vi looks ugly and confusion; with deeper understanding it looks positively elegant. Even if you prefer an IDE like Visual Studio or Eclipse, it is worthwhile learning vim.
Coming soon...
Coming soon...