Algorithms and OOD (CSC 207 2014S) : Handouts


This is an approximate schedule. Expect dates and topics to change. (I will try to keep due dates the same.)

Some of the information here can also be found in the Google calendar for the course, which is available at <>.

Week 01: Getting Started
Date Topic Reading Lab Work Due
01 Monday, 20 January 2014 An Introduction to the Course About the Course. ADTs and Data Structures. An Exercise: Designing a List ADT. No writeup
02 Tuesday, 21 January 2014 An Introduction to Java Development Tools for programmers. Eclipse. Git. An Introduction to Version Control with Git and The Eclipse IDE Getting Started with Eclipse and Getting Started with Command-Line Git Writeup: Email me the conficted code from exercise 14 of the git lab. HW 1: Course Details and RISC Survey
03 Wednesday, 22 January 2014 An Overview of Java Some notes on Java. Lab: Simple Code Reading (more or less). Reflection. Basics of Object-Oriented Problem Solving, An Introduction to Java, Simple Java for C Programmers, and Weiss 1 Reading Java Writeup: Extra 1
04 Friday, 24 January 2014 Unit Testing A few thoughts on testing. An example: Testing exponentiation. A few notes on test-driven development. Unit Testing Unit Testing Writeup: Exercises 3f and 4c
Week 02: Imperative Programming in Java
Date Topic Reading Lab Work Due
05 Monday, 27 January 2014 Classes and Objects A brief introduction to objects. An exercise: Counters. An exercise: Scheme lists. Writing Your Own Classes, Standard Object Methods, Weiss 2.2, and Weiss 3 No writeup
06 Tuesday, 28 January 2014 Arrays in Java ADT Design. Minimalist vs. maximalist design. Arrays. Arrays and Weiss 2.4 Arrays Writeup: Exercises 1b and 6
07 Wednesday, 29 January 2014 Some Basic Types: Numbers and Strings in Java Numbers. Boxing and unboxing. Strings. Numeric Values in Java, Strings in Java, and Weiss 2.3 Basic Types Writeup: Exercise 9 HW 2: Getting Started with Java and Testing (due 10:30 p.m.)
08 Friday, 31 January 2014 Input and Output A few notes on textual output and input. Output. Input. Input and Output in Java and Weiss 2.6 Input and Output Writeup: Exercise 6
Week 03: Object Oriented Programming and Design in Java
Date Topic Reading Lab Work Due
09 Monday, 3 February 2014 Classes and Objects, Revisited Writing fields. Writing constructors. Writing methods Standard methods. Writing Your Own Classes, Standard Object Methods, Weiss 2.2, and Weiss 3 Writing Your Own Classes Writeup: Exercises 2 and 4
10 Tuesday, 4 February 2014 Debugging A bit about debugging. Lab. Reflection (maybe). Debugging in Eclipse Debugging in Eclipse No writeup
11 Wednesday, 5 February 2014 Pause for Breath Notes on recent ideas. Questions on the homework. Other issues. No writeup HW 3: Basic Types in Java (due 10:30 p.m.)
12 Friday, 7 February 2014 Exceptional Programming Dealing with errors. Java's Exceptions. Writing your own Exceptions. Exceptions and Weiss 2.5 Exceptions Writeup: Exercise 11
Week 04: Java Tools
Date Topic Reading Lab Work Due
13 Monday, 10 February 2014 Some Subtleties: References and Automatic Boxing/Unboxing Reference values vs. primitive values. Some typical misunderstandings. Primitive types and their corresponding classes. Automatic boxing and unboxing. Reference Values in Java, Weiss 2.1, Automatic Boxing and Unboxing in Java, and Weiss 4.6.3 Reference Values and Automatic Boxing and Unboxing No writeup
14 Tuesday, 11 February 2014 Interfaces and Polymorphism Interfaces. Polymorphism. An example: Text blocks. Interfaces and Polymorphism, and Weiss 4 Polymorphism Writeup: Exercise 8
15 Wednesday, 12 February 2014 Inheritance Inheritance basics. Inheritance and polymorphism. Inheritance and Weiss 4 Inheritance No writeup HW 4: More Fun with Fractions (due 10:30 p.m.)
16 Friday, 14 February 2014 Inheritance, Continued Q and A. Reflection - What are benefits and issues of inheritance and polymorphism? Inheritance, Weiss 4, and Documentation and Javadoc Inheritance No writeup
Week 05: Analyzing Algorithms
Date Topic Reading Lab Work Due
17 Monday, 17 February 2014 Analyzing Algorithms Comparing algorithms. Potential problems in computing running time. Asymptotic analysis. Big-O, formalized. Implications of Big-O. Doing informal asymptotic analysis. Some recurrence relations. Experimental analysis. Analying Algorithms (not yet available) and Weiss 5
18 Tuesday, 18 February 2014 Using Java from the Command Line A brief overview. Ant and Maven. Lab. Java on the Command Line (not available) and Documentation and Javadoc Java on the Command Line and Javadoc
19 Wednesday, 19 February 2014 Linear and Binary Search Linear search. Binary search. Additional issues: Functions as parameters. Additional issues: Basic generics. Linear and Binary Search in Java Linear and Binary Search in Java Writeup: Exercise 3 Exam 1
20 Friday, 21 February 2014 Reasoning About Loops with Loop Invariants Writing correct iterative algorithms. The state of a program. Loop invariants. Loop termination. An exercise: Binary search. Loop Invariants (Not yet ready for prime time) Loop Invariants
Week 06: From Algorithms to Data Structures
Date Topic Reading Lab Work Due
21 Monday, 24 February 2014 Exam 1 Discussion Problem 1 - Testing. Problem 2 - Averaging. Problem 3 - Stringing. Problem 4 - Replacing. Additional issues. Makeup.
22 Tuesday, 25 February 2014 Detour: Anonymous Inner Classes Anonymous inner classes - the concept. Anonymous inner classes - the implementation. Some subtleties. Anonymous Inner Classes Anonymous Inner Classes
23 Wednesday, 26 February 2014 OOD in Practice: Designing a List Interface The design of ADTs, revisited. Exercise: Designing a list ADT. Quick notes on implementation. Designing a list interface (not available)
24 Friday, 28 February 2014 Java Generics Homogenous vs. heterogenous collections. Writing general code with type variables. Java's generics. Generic classes, interfaces, and methods. Handling multiple types. Java Generics Java Generics Writeup: Exercise 4
Week 07: Sorting
Date Topic Reading Lab Work Due
25 Monday, 3 March 2014 An Introduction to Sorting The problem of sorting. An object-oriented approach. Testing our sorting algorithm.
26 Tuesday, 4 March 2014 Quadratic Sorts Our sorting package. Testing sorts. Insertion sort. Selection sort. Sorting Basics Quadratic Sorts Writeup: Exercise 5e (indexOfSmallest)
27 Wednesday, 5 March 2014 Merge Sort Lower bounds on sorting. Divide and conquer algorithms. An introduction to merge sort. Analyzing merge sort. Merge sort Merge sort Writeup: Exercise 2a (invariants for merge) HW 5: Algorithm Design and Analysis (due 10:30 p.m.)
28 Friday, 7 March 2014 Quicksort A quick introduction to Quicksort. Key ideas from Quicksort. Quicksort Quicksort Writeup: Exercise 4
Week 08: Implementing Lists
Date Topic Reading Lab Work Due
29 Monday, 10 March 2014 Implementing Lists with Arrays Status of our List Interface. Implementing Lists with Arrays - The Basics. Implementing Lists with Arrays - Some Complications. Designing A List ADT and Implenting Lists with Arrays (not available) Implementing Lists with Arrays Writeup: Exercise 6
30 Tuesday, 11 March 2014 Linked Lists in Java Linked lists. Implementation details. Linked Lists in Java (not available) Linked Lists No writeup
31 Wednesday, 12 March 2014 Doubly-Linked Lists Review of singly-linked lists. Insertion and deletion in singly-linked lists. A trick for simplifying insertion and deletion. Doubly-linked lists. Circularly-linked lists.
32 Friday, 14 March 2014 Pause for Breath More notes on exam 2. Remaining DLL topics. Generics, revisited. Inner classes, revisited. The Java Tutorial: Generics, Inner Classes, Local Clases, and Anonymous Classes
Spring Break
Week 09: Linear Structures
Date Topic Reading Lab Work Due
33 Monday, 31 March 2014 An Introduction to Linear Structures Linear structures. Stacks. An application of stacks: Matching parens. Linear Structures and Stacks Stacks Writeup: Exercise 4
34 Tuesday, 1 April 2014 Implementing Queues with Arrays Wrappers, Adapters, Delegation, and such. Design patterns and terminology. Lab. Queues Array-Based Queues Writeup: Exercise 5
35 Wednesday, 2 April 2014 Priority Queues and their Basic Implementation A short introduction to priority queues. Array-based implementations. Running times. Sorting with priority queues. Priority Queues Priority Queues No writeup
36 Friday, 4 April 2014 Pause for Breath No writeup Exam 2
Week 10: Dictionaries and Trees
Date Topic Reading Lab Work Due
37 Monday, 7 April 2014 Designing a Dictionary API Review: Designing ADTs and Data Structures. A Dictionary ADT. Simple implementations of dictionaries. No writeup
38 Tuesday, 8 April 2014 Implementing Dictionaries A dictionary ADT, continued. Review: Thinking about data structures. Association lists. Techniques for improving the implementation. Binary search trees.
39 Wednesday, 9 April 2014 Implementing Dictionaries with Arrays or Lists Implementing dictionaries, mark I. Looking ahead: A better implementation. Association Lists (not available) Association Lists HW 6: Linear Structures (due 10:30 p.m.)
40 Friday, 11 April 2014 Implementing Dictionaries with Binary Search Trees About binary search trees. Basic analysis. Binary Search Trees (not available) Binary Search Trees
Week 11: Hash Tables
Date Topic Reading Lab Work Due
41 Monday, 14 April 2014 Tree Traversal Orders for traversing the tree. Implementating traversal algorithms. Tree Traversal Tree Traversal Writeup 41: Exercise 5
42 Tuesday, 15 April 2014 Implementing Dictionaries with Hash Tables An introduction to hash tables. Hash functions. An exercise. Handling collisions. Hashing in Java. Handling removal.
43 Wednesday, 16 April 2014 Hash Tables, Continued Questions. Lab. Hash tables Hash tables Writeup 43: Exercise 3b Project proposal (due 10:30 p.m.)
44 Friday, 18 April 2014 Hash Tables, Continued Questions. Lab. Hash tables Hash tables Writeup 44: Exercises 5c and 6d
Week 12: Additional Java and OOD Concepts
Date Topic Reading Lab Work Due
45 Monday, 21 April 2014 Heaps Priority queues, revisited. Recent implementation techniques. Heaps. Adding elements to heaps. Removing elements from heaps. Asymptotic analysis. Storing heaps in arrays. Heap sort. Heaps (not available) Heaps (not available)
46 Tuesday, 22 April 2014 Pause for Breath Possible extensions to the project. More notes on submitted work. Implementing heaps. Heapsort.
47 Wednesday, 23 April 2014 Heap Sort Heaps and heap sort, reconsidered. Heap Sort (not available) Heaps and Heap Sort Writeup 47: Exercise 5 Project (due 10:30 p.m.)
48 Friday, 25 April 2014 Dynamic Programming Fibonacci. Generalizing the idea. The stamps problem. Edit distance in strings. Dynamic Programming (not available) Dynamic Programming (not available)
Week 13: Android Development
Date Topic Reading Lab Work Due
49 Monday, 28 April 2014 Project Presentations Introduction. Presentations. Assessments.
50 Tuesday, 29 April 2014 An Introduction to Android Development Why build Android Apps? Issues in Android development. Warnings! An Introduction to Android Development Your First Android Project
51 Wednesday, 30 April 2014 Building Your First App (1) Reflections from your first encounters with Android development. Layouts. Adding images. Message handlers. Making Apps Do Things Making a Cat Go Meow HW 7: TO BE DETERMINED (due 10:30 p.m.)
52 Friday, 2 May 2014 Building Your First App (2) Android activities. Switching between activities. Additional info: Making lists. Making Apps Do More Things Expanding Your App
Week 14: Wrapup
Date Topic Reading Lab Work Due
53 Monday, 5 May 2014 Building Your First App (3) Lists. Debrief.
54 Tuesday, 6 May 2014 Patterns of Object and Algorithm Design Algorithm design. Object design. Code design. Exam 3
55 Wednesday, 7 May 2014 Course Evaluation The subject matter(s) of the course. Evaluations.
56 Friday, 9 May 2014 Review for Final Some questions on the course. Some things you didn't learn. Some final thoughts.

Copyright (c) 2013-14 Samuel A. Rebelsky.

Creative Commons License

This work is licensed under a Creative Commons Attribution 3.0 Unported License. To view a copy of this license, visit or send a letter to Creative Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA.