600.226: Data Structures
Fall Semester 2005: September 8, 2005 - December 12, 2005
Contents
Catalog Description:
This course covers
the design and implementation of data structures
including collections, sequences, trees, and graphs.
Other topics include
sorting, searching, and hashing.
Course work involves both
written homework and
Java programming assignments.
An overview of Java will be provided.
Prerequisite(s):
600.107: Introduction to Programming in Java (preferred) or
600.109: Introduction to Programming in C/C++;
600.120: Intermediate Programming can be helpful as well.
Academic Honesty:
It is your responsibility to adhere to the
Department
Integrity Code and other applicable university regulations.
Feel free to email us your questions or concerns.
Discussion List:
cs226-discuss@bloat.org
(open discussion, but subscribe
here
first)
Staff List:
cs226-staff@bloat.org
(to contact all of us, but only staff can subscribe)
Submit Assignment:
cs226-submit@bloat.org
(we grade your last submission
before the deadline)
Instructor:
Peter Fröhlich
Office Hours:
Thursday & Friday, 4:00 pm - 5:00 pm
Location:
326
New Engineering Building
Lecture:
Thursday & Friday, 2:30 pm - 3:45 pm
Location:
301
Shaffer Hall
Teaching Assistant:
Ryan Gardner
Office Hours:
Tuesday, 2:00 pm - 4:00 pm;
Wednesday, noon - 2:00 pm
Location:
225
New Engineering Building
Course Assistant:
Michael An
Office Hours:
Monday, 2:00 pm - 4:00 pm
Location:
317
Clark Hall
Course Assistant:
Chris Weiland
Office Hours:
TBD
Location:
225
New Engineering Building
Week 1: Introduction and Overview (9/5-9/11)
Lecture:
- Thursday: Welcome to Data Structures (and Algorithms :-)
- Friday: Review of Java and Object-Oriented Programming
Reading:
Deadlines:
-
Thursday:
Grab Assignment 1 and get started.
-
Friday:
Introduce yourself on the course mailing list.
(Graded)
Week 2: Theoretical Background (9/12-9/18)
Lecture:
- Thursday: Basics of Algorithm Analysis
-
Friday: Specification of Abstract Data Types
[Handout]
Reading:
Deadlines:
-
Wednesday:
Turn in your solution to Assignment 1.
-
Thursday:
Grab Assignment 2 and get started.
-
Friday:
Take and defend a position regarding "What's better? Asymptotic or Experimental Analysis?" on the course mailing list; discuss.
(Graded)
Week 3: Fundamental Data Structures (9/19-9/25)
Lecture:
- Thursday: Stacks (Specification and Implementation)
- Friday: Queues and Deques
Reading:
Deadlines:
Week 4: Linear Data Structures (9/26-10/2)
Lecture:
- Thursday: Position-based Data Structures, Random vs. Sequential Access, Basic Lists
- Friday: More Lists, Iterators, Reference Counting
Reading:
Deadlines:
-
Wednesday:
Turn in your solution to Assignment 3.
-
Thursday:
Grab Assignment 4 and get started.
-
Friday:
Read up on XOR
Linked Lists.
Discuss on the mailing list under what circumstances it might be a
good idea to use this data structure.
How would you implement the position or iterator abstraction?
Is it possible to implement this data structure in Java?
(Graded)
Week 5: Hierarchical Data Structures (10/3-10/9)
Lecture:
- Thursday: General Trees, Binary Trees, Tree Traversals
-
Friday:
[Midterm 1]
[Solution],
Implementations, Iterators
Reading:
-
Required: Goodrich 7: Trees
-
Optional:
Review Goodrich 1-6 for Midterm
-
Optional:
Ancient exams from 2002
[Quiz 0]
[Quiz 1]
[Quiz 2]
Deadlines:
Week 6: Graph Data Structures (10/10-10/16)
Lecture:
-
Thursday:
Introduction, Terminology, Interface Design
-
Friday:
Implementation, Traversals (Depth First Search, Breadth First Search)
Reading:
Deadlines:
Week 7: Sets and Priority Queues (10/17-10/23)
Lecture:
-
Thursday:
Sets as Abstract Data Types, Interface Design, Basic Implementations
-
Friday:
Sets with Minimum and Maximum, Heaps, Priority Queues, Shortest Paths
Reading:
-
Required:
Goodrich 8: Priority Queues;
13.6 and 13.7 to see where priority queues are useful
-
Optional:
Goodrich 11.6 for a different take on sets
Deadlines:
Week 8: Maps and Hash Tables (10/24-10/30)
Lecture:
-
Thursday:
Maps as Abstract Data Types, Interface Design, Introduction to Hash Tables
-
Friday:
Hash Table Implementation, Hash Functions, Collisions
Reading:
-
Required:
Goodrich 9: Maps and Hash Tables
-
Optional:
Bloom Filters
are another cool data structure based on hashing
Deadlines:
-
Thursday:
Turn in your solution to Assignment 7.
-
Thursday:
Grab Assignment 8 and get started.
-
Friday:
Can you come up with a good data structure to implement sets
with both minimum and maximum
operations? Explain your idea for a good data structure on the
discussion list, and feel free to point out the shortcomings of
other proposals.
(Graded).
Week 9: Search Trees (10/31-11/6)
Lecture:
-
Thursday:
Introduction to Search Trees,
Binary Search Trees,
Introduction to Balanced AVL Trees
-
Friday:
Details on AVL Trees,
Introduction to (2,4) Trees (see discussion list)
Reading:
-
Required:
Goodrich 10: Search Trees
Deadlines:
Week 10: Sorting and Selection (11/7-11/13)
Lecture:
-
Thursday:
Project Introduction, Subversion, Heap Sort
-
Friday:
[Midterm 2]
[Solution],
Quick Sort, Merge Sort
Reading:
-
Required: Goodrich 11: Sorting and Selection
-
Optional:
Review Goodrich 1-10, 13 for Midterm
-
Optional:
Ancient exams from 2002
[Quiz 3]
[Quiz 4]
[Quiz 5]
Deadlines:
-
Wednesday:
Turn in your solution to Assignment 9.
-
Thursday:
Grab Assignment 10, the first part of
the "big project," and get started.
-
Thursday:
Email us your team
registration:
Name of your team,
names and email addresses for all members
(three members in a team),
URL for your team website
(doesn't have to be fancy yet, just a placeholder),
and three possible meeting time slots
(as detailed on the mailing list)
in order of preference.
(Graded)
Week 11: Text Processing (11/14-11/20)
Lecture:
-
Thursday:
String Matching, Knuth-Morris-Pratt, Review of Tries
-
Friday:
Details for Knuth-Morris-Pratt, Introduction to Compression
(Huffman, Lempel-Ziv)
Reading:
-
Required: Goodrich 12: Text Processing
Deadlines:
-
Thursday:
Turn in your team's solution to
Assignment 10.
-
Sunday:
Grab Assignment 11, the second part of
the "big project," and get started.
Thanksgiving: No Class (11/21-11/27)
Nevertheless it's probably a good idea to work on the project.
Week 12: Memory Management & File Processing (11/28-12/4)
Lecture:
-
Thursday:
Overview of Memory Management & Garbage Collection
-
Friday:
More Garbage Collection, Caching, Sorting Files, Outline of Indexed
Files and B-Trees
Reading:
Deadlines:
-
Thursday:
Turn in your team's solution to
Assignment 11.
-
Friday:
Grab Assignment 12, the third and final
part of the "big project," and get started.
-
Friday:
Vote on whether to have final presentations next week or not; vote
either on the
discussion list
(as some have done already, not sure why) or in private to the
staff list. (Graded)
Week 13: Review and Outlook (12/5-12/11)
Lecture:
- Thursday: Course Evaluations, Outlook on Even More Data Structures
- Friday: Final Presentations, Q&A Session for Final Exam
Reading:
Deadlines:
-
Sunday:
Grab Assignment 13, the very last
assignment in the course, and get started.
Week 13+1: Deadline Week (12/12)
Deadlines:
Books
While there are lots of useful books for this course, the most
important one is the following required text
on algorithms and data structures.
We will be using Java exclusively, so getting the Java version
is highly recommended.
The following books are not required but make
for good reading anyway.
The first is a recent classic, and a reference that can serve
you throughout your career (or at least in 600.363/463 :-).
It uses pseudo-code throughout and takes quite a different approach
overall; it is also much, much longer.
Comparatively few people seem to know about the following book,
but I like it quite a bit.
It also uses pseudo-code instead of any particular language, but
it is relatively concise.
Speaking of concise, the following book is the most
concise text on advanced data structures that I know of; it is also
a joy to read, although not necessarily the first time you try.
Since we will be using Java exclusively in the course, and
since the required text only introduces the bare minimum,
it might be a good idea to have some Java text handy as
well. Here are a few options, the first one probably being
the most useful.
The following is a popular Java text as well, and it's
available for free. In don't like big books very much,
but at least this one has a decent reputation. :-)
The official language specification for Java is a good
resource to have around, but you can easily access it
online, no need to shell out money.
The official tutorial is slightly out-of-date, but if
you have a lot of catching up to do, you won't really
care.
-
James Gosling,
Bill Joy,
Guy L. Steele Jr.,
Gilad Bracha:
The Java Language Specification,
Addison-Wesley, 3rd edition, 2005.
[Buy]
-
Mary Campione, Kathy Walrath, Alison Huml:
The Java Tutorial,
Addison-Wesley, 3rd edition, 2000.
[Buy]
If you already know Java but need a concise reference to
carry around without building up more muscle (i.e. something
that actually fits into the proverbial
nutshell) check this one out:
If you are looking for a concise summary of good Java programming
style, the following short booklet comes in handy.
Finally two more general books on programming and software
development, both highly recommended (not just for this course).
This list is hardly exhaustive.
Feel free to email me suggestions if you find a good book on any of
the topics we deal with in the course. :-)
Previous Offerings
Standards
Programming Style
When it comes to issues of programming style, it's more important
to develop some consistent style than to develop
any particular style; this is different in team
projects of course, here everyone should agree on a common style.
In terms of grading, the safest thing is to pick a style advocated
by some "authoritative" entity (without "mixing and matching" of
course); here are some possible style guides.
If you are thinking "Safety first!" pick either the first or the
second. The fourth has lots of nice reasoning in
it, useful if you are ever asked to define a style for a team.
Animations
Miscellaneous
Tools
The following teams are currently registered.
If there are any changes in your team (and of course
there shouldn't be any), or if any
information below is wrong, be sure to let us know.
Code Busters
- Website: Code Busters
- People: Andrew, Andy, Daniel
- Meeting: Wednesday, 5:00 - 5:30 pm
- Coach: Ryan
- Code:
codebusters
I.M.P.
- Website: I.M.P. (doesn't work yet, get back to me)
- People: Ian, Nick, Ryan
- Meeting: Thursday, 5:30 - 6:00 pm
- Coach: Michael
- Code:
imp
J.Y.A.
- Website: J.Y.A.
- People: Arthur, Joshua, Yedidya
- Meeting: Thursday, 11:00 - 11:30 am
- Coach: Chris
- Code:
jya
Legion of Doom
- Website: Legion of Doom
- People: Davneet, Matthew, Rich
- Meeting: Friday, 1:00 - 1:30 pm, NEB 326
- Coach: Peter
- Code:
legion
MaxHeaps
- Website: MaxHeaps
- People: David, Josh, Tym
- Meeting: Wednesday, 4:00 - 4:30 pm
- Coach: Ryan
- Code:
maxheaps
Stack Overflow
- Website: Stack Overflow
- People: Aru, Kailash, Sanjay
- Meeting: Thursday, 1:00 - 1:30 pm, NEB 326
- Coach: Peter
- Code:
overflow
Tirodan
- Website: Tirodan
- People: Dan, Rod, Tianxing
- Meeting: Wednesday, 3:30 - 4:00 pm
- Coach: Ryan
- Code:
tirodan
Two Girls and a Guy
Workless Recrossed Conquistador
Assignments (13): 50%,
Midterms (2): 20%,
Final (1): 20%,
Miscellaneous (unknown number): 10%.
Class Picture
Updated:
$Id: index.html 283 2005-12-18 20:29:59Z phf $
Validate:
XHTML
CSS
Copyright © 2002-2005
Peter H. Fröhlich.
All rights reserved.