Schedule (Tentative!)
- Stuff listed in bold indicates a due date of some sort, attached to a grade item that will influence your final grade. See Assessment for more details.
Week 1: Introduction and Overview (September 6 – September 9)
Lecture:
- Thursday: Welcome to Data Structures (and Algorithms :-)
- Friday: Classes, Generics, Exceptions, Interfaces: Hacking Arrays in Java
Resources:
- Code from Lecture 2 (edited and extended)
Reading:
- Required: Goodrich 1: Java Programming Basics; 2: Object-Oriented Design
- Recommended: Java 5.0 in a Nutshell
- Optional: ACM Code of Ethics and Professional Conduct
Tasks:
- Thursday: Grab Assignment 1 and get started.
- Friday: Introduce yourself on the course mailing list.
Week 2: Theoretical Background (September 10 – September 16)
Lecture:
- Thursday: Algebraic Specification of Abstract Data Types (Variables, Arrays)
- Friday: Basics of Algorithm Analysis (linear search, binary search, selection sort, matrix multiplication)
Resources:
Reading:
- Required: Goodrich 3: Arrays, Linked Lists, and Recursion; 4: Analysis Tools
- Recommended: Generics in the Java Programming Language (PDF)
- Optional: A Brief History of the Green Project
Tasks:
- Thursday: 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. (You may want to wait until after Friday's lecture for this.)
Week 3: Fundamental Data Structures (September 17 – September 23)
Lecture:
-
Thursday:
ADT Wrapup (programming by contract, formal versus informal specs,
proving versus testing, blackbox versus whitebox testing,
axiomatic pre/post/invariant style specs,
assert, assertions versus exceptions); Specification of Stacks; Bounded versus Unbounded Stacks (Part 1) - Friday: Bounded versus Unbounded Stacks (Part 2); Implementation of Stacks; Growing Arrays and Amortized Analysis; Queues and Deques (Interface and Implementation)
Reading:
- Required: Goodrich 5: Stacks and Queues; Wikipedia article on The Liskov Substitution Principle (links from there are recommended as well)
- Recommended: A longer article by Robert Martin on The Liskov Substitution Principle (includes examples); Programming with Assertions
- Optional: Barbara Liskov; Wikipedia article on the Java Virtual Machine (and links from there); Wikipedia article on Stack-oriented programming languages (and links from there, especially Forth)
Tasks:
- Thursday: Turn in your solution to Assignment 2.
- Thursday: Grab Assignment 3 and get started.
- Friday: Take and defend a position regarding "Peter is nuts! Distinguishing bounded and unbounded stacks with separate Java interfaces is overkill!" on the course mailing list; discuss. The code for this is in the archive for Assignment 3 while the Liskov Substitution Principle provides the theoretical background. (You may want to wait until after Friday's lecture for this.)
Week 4: Linear Data Structures (September 23 – September 30)
Lecture:
- Thursday: Position-based versus Value-based Data Structures; Positions for Stack, Queue, Array; Overview of Lists and Abstract Positions; Random vs. Sequential Access; Design of List and Position Interfaces; Implementation using Nested Classes
- Friday: More List Stuff; Iterators; Robust Iterators and Reference Counting
Reading:
- Required: Goodrich 6: Lists and Iterators; Unrolled Linked Lists; XOR Linked Lists
- Recommended: Sun's tutorial on Nested Classes; another tutorial on Nested Classes
- Optional: In Scheme (almost) everything is a list (or a function, depending on how you look at it :-)
Tasks:
- Thursday: Turn in your solution to Assignment 3.
- Thursday: Grab Assignment 4 and get started.
- Friday: Read up on Unrolled Linked Lists and XOR Linked Lists on Wikipedia. Post your impressions of these variations to the discussion list. Some things to consider: When are the variations useful compared to regular linked lists? What kinds of problems do you see for implementing them in Java? How are positions different for those variations? And so on, and so forth. Let's see what you can come up with! :-) Oh, if you can find (or think of) further variations of linked lists, you can describe those as well! Just be sure to cite your sources...
Week 5: Hierarchical Data Structures (October 1 – October 7)
Lecture:
- Thursday: Introduction to Trees, Terminology, General Trees, Binary Trees, Implementation Sketch, Interface Design
- Friday: Midterm 1; Tree Traversals (preorder, inorder, postorder, level order); Parameterized Traversals; Template Method Pattern
Resources:
Reading:
- Required: Goodrich 7: Trees; Template Method Pattern
- Recommended: Review Goodrich 1–6 (and everything else we have done) for the Midterm
Tasks:
- Thursday: Turn in your solution to Assignment 4.
- Thursday: Grab Assignment 5 and get started.
- Saturday: Hate the Midterm! :-) On the discussion list, post an appropriate (or inappropriate) evaluation of the midterm exam. How ridiculous was it? Could you do it in your sleep? Could you not sleep at all while doing it? What? Have fun... :-)
Week 6: Graph Data Structures (October 8 – October 14)
Lecture:
- Thursday: Introduction to Graphs, Applications, Terminology, Interface Design
- Friday: Implementation Options, Graph Traversals (Depth First Search, Breadth First Search), Connectivity
Reading:
- Required: Goodrich 13: Graphs (except 13.6 and 13.7)
- Recommended: Six Degrees of Separation; Social Networks; Social Network Analysis
- Optional: Five Reasons Social Networking Doesn't Work; Another more personal take on Social Network Analysis; The Erdös Number Project; Six Degrees of Kevin Bacon
Tasks:
- Thursday: Turn in your solution to Assignment 5.
- Thursday: Grab Assignment 6 and get started.
- Friday: Present an application of graphs on the course mailing list. It's up to you which application to present, but you have to present something that nobody else has presented on the mailing list before. If you post something and then find that someone else posted the same application earlier (perhaps while you were still working on your email) you have to find a new application to present. However, once you have presented an application, you can post more details about it any time before Friday is over. But eventually you have to provide the details, a buzzword by itself is not enough! If you get your application from an online source, cite the source and give a URL for it. BTW, it's okay to present an application from the text book or from lecture as well...
Week 7: Sets and Priority Queues (October 15 – October 21)
Lecture:
- Thursday: Sets as Abstract Data Types, Interface for Sets, Basic Implementations (array and lists, with or without duplicates, etc.), Self-Organizing Sets: Move-to-Front and Transpose Heuristics, Multisets (aka Bags), Ordered Sets (introduction)
- Friday: Ordered Sets (in depth), Idea of Ordered Multisets, Priority Queues, Heaps, Outline of Heapsort
Reading:
- Required: Goodrich 8: Priority Queues; 11.6 for a different take on sets; 13.6 and 13.7 to see where priority queues are useful
- Recommended: Check out this representation for sets of integers; think about how to do this in Java maybe? :-)
- Optional: A broader overview of sets pointing to stuff we'll cover later.
Tasks:
- Thursday: Turn in your solution to Assignment 6.
- Thursday: Grab Assignment 7 and get started.
- Friday: Email us a confirmation that you found your partner for Assignment 7. The subject should be "Partners (Your Name)" and you should CC: your partner as well. We need mutual confirmation, so everybody needs to send this, not just one person of the pair.
Week 8: Search Trees (October 22 – October 28)
Lecture:
- Thursday: Maps and Ordered Maps as Abstract Data Types, Interface Design, Binary Search Trees, (2,3) Trees
- Friday: AVL Trees
Reading:
- Required: Goodrich 10: Search Trees
- Optional: Check out Randomized Binary Search Trees (which are very different from plain binary search trees on which insertions are performed in random order). Nice applet too... :-) Speaking of applets, check out this Beautiful Balanced Tree Applet, it can be quite helpful...
Tasks:
- Thursday: Turn in your solution to Assignment 7.
- Thursday: Grab Assignment 8 and get started.
-
Friday:
Email us
your
peer review
for
Assignment 7.
The subject should be
cs226-peer-7-loginwhereloginis replaced by your login name on theugradx.cs.jhu.eduserver. Read the instructions carefully and don't forget to give yourself a score as well. - Friday: Email us a confirmation that you found your partner for Assignment 8. The subject should be "Partners (Your Name)" and you should CC: your partner as well. We need mutual confirmation, so everybody needs to send this, not just one person of the pair.
Week 9: Hash Tables (October 29 – November 4)
Lecture:
- Thursday: Introduction to Hash Tables, Keys and Hash Functions, Hash Table Implementation, Collisions and their Resolution, Load Factors and Rehashing
- Friday: Visit by Tim Sweeney, CEO and Chief Architect at Epic Games!
Reading:
- Required: Goodrich 9: Maps and Hash Tables
- Recommended: Bloom Filters are another cool data structure based on hashing
- Optional: Tim mentioned that Binary Space Partitioning Trees are his favorite data structure.
Tasks:
- Thursday: Grab Assignment 9 and get started.
- Friday (extension!): Turn in your solution to Assignment 8.
-
Friday:
Email us
your
peer review
for
Assignment 8.
The subject should be
cs226-peer-8-loginwhereloginis replaced by your login name on theugradx.cs.jhu.eduserver. Read the instructions carefully and don't forget to give yourself a score as well. - Friday: Email us a confirmation that you found your partner for Assignment 9. The subject should be "Partners (Your Name)" and you should CC: your partner as well. We need mutual confirmation, so everybody needs to send this, not just one person of the pair.
- Friday: Post your idea for a final project in the course to the discussion list! Be sure to describe it in enough detail for others to understand what you're suggesting. Don't just say "MapQuest" for example, explain with a few sentences what the system you'd like to build would do for users. Don't just say "some game" but give details instead, maybe pointing to existing games and telling us what would be different for your version.
Week 10: Sorting and Selection (November 5 – November 11)
Lecture:
- Thursday: Project Introduction, Subversion, Heap Sort, Lower Bounds for Sorting with Comparisons, Outline of Bucket Sort for Integers
- Friday: Merge Sort, Quick Sort
Reading:
- Required: Goodrich 11: Sorting and Selection
- Recommended: Version Control with Subversion
- Optional: Jon Bentley's Google Talk on Quicksort (can't beat that, an hour well spent!); Bentley and McIlroy's Engineering a Sort Function gives some insight into the nasty details; McIlroy's A Killer Adversary to Quicksort shoots it all down again... :-)
Tasks:
- Thursday: Turn in your solution to Assignment 9.
- Thursday: Grab Assignment 10 and get started.
-
Friday:
Email us
your
peer review
for
Assignment 9.
The subject should be
cs226-peer-9-loginwhereloginis replaced by your login name on theugradx.cs.jhu.eduserver. Read the instructions carefully and don't forget to give yourself a score as well. - Friday: Email us registration information for your team! Each team member has to email us with the names of the other two partners to ensure that you all really want to be on one team together! At least one team member has to include (a) the team name and (b) three possible time slots (day and time, in order of preference) for your team to meet with your coach; of course those meeting times should be during regular university hours. Until you hear back from Peter, you are not officially a team, but once you get confirmation, you're set. :-)
Week 11: Text Processing (November 12 – November 18)
Lecture:
- Thursday: Introduction to Coding and Compression, Fixed Length Codes, Run-Length Encoding, Variable Length Codes (Morse Code, Huffman Coding), Adaptive Coding (Lempel-Ziv-Welsh)
- Friday: Simple Pattern Matching in Strings, Naive String Matching, Horspool String Matching (book calls it Boyer-Moore), Tries, Using Tries to Index Documents, Suffix Tries for String Matching
Reading:
- Required: Goodrich 12: Text Processing
- Recommended: Wikipedia articles on Huffman Coding and Lempel-Ziv-Welsh
- Optional: Wikipedia articles on Move-To-Front Transform, Burrows-Wheeler Transform, and Arithmetic Coding
Tasks:
- Friday: Turn in your team's solution to Assignment 10.
- Friday: Grab Assignment 11 and get started.
-
Friday:
Email us
your
peer review
for
Assignment 10.
The subject should be
cs226-peer-10-loginwhereloginis replaced by your login name on theugradx.cs.jhu.eduserver. Read the instructions carefully and don't forget to give yourself a score as well.
Week 12: Thanksgiving! (November 19 – November 25)
Thanksgiving Vacation is November 22 – November 25! You still have classes Monday, Tuesday, and Wednesday, don't miss those!
Week 13: Memory Management and File Processing (November 26 – December 2)
Lecture:
- Thursday: Memory Management, Garbage Collection
- Friday: Midterm 2; Index Structures for Files, Sorting Files
Resources:
Reading:
- Required: Goodrich 14: Memory
- Recommended: Wikipedia article on B-Trees, Wikipedia article on External Sorting
Tasks:
- Thursday: Turn in your team's solution to Assignment 11.
- Thursday: Grab Assignment 12 and get started.
-
Friday:
Email us
your
peer review
for
Assignment 11.
The subject should be
cs226-peer-11-loginwhereloginis replaced by your login name on theugradx.cs.jhu.eduserver. Read the instructions carefully and don't forget to give yourself a score as well.
Week 14: Review and Outlook (December 3 – December 9)
Lecture:
- Thursday: Review and Outlook, Stump the Chump
- Friday: Final Presentations
Reading:
- Required: Review Goodrich 1-14 for the Final Exam
- Recommended: Review other readings, lecture notes, mailing list discussions, and assignments for the Final Exam
Tasks:
- Thursday: Turn in your team's solution to Assignment 12. You're done! :-)
-
Friday:
Email us
your
peer review
for
Assignment 12.
The subject should be
cs226-peer-12-loginwhereloginis replaced by your login name on theugradx.cs.jhu.eduserver. Read the instructions carefully and don't forget to give yourself a score as well.