Algorithms and OOD (CSC 207 2014S) : Handouts
Primary: [Front Door] [Schedule] - [Academic Honesty] [Disabilities] [Email] - [FAQ] [Teaching & Learning] [Grading] [Rubric] - [Calendar]
Current: [Assignment] [EBoard] [Lab] [Outline] [Reading]
Sections: [Assignments] [EBoards] [Examples] [Handouts] [Labs] [Outlines] [Partners] [Readings]
Reference: [Java 7 API] [Java Code Conventions] [GNU Code Conventions]
Related Courses: [CSC 152 2006S (Rebelsky)] [CSC 207 2013F (Rebelsky)] [CSC 207 2013S (Walker)] [CSC 207 2011S (Weinman)]
Misc: [SamR] [Glimmer Labs] [CS@Grinnell] [Grinnell] [Issue Tracker (Course)] [Issue Tracker (Textbook)]
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 <http://bit.ly/207gcal>.
| 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. | |||
Primary: [Front Door] [Schedule] - [Academic Honesty] [Disabilities] [Email] - [FAQ] [Teaching & Learning] [Grading] [Rubric] - [Calendar]
Current: [Assignment] [EBoard] [Lab] [Outline] [Reading]
Sections: [Assignments] [EBoards] [Examples] [Handouts] [Labs] [Outlines] [Partners] [Readings]
Reference: [Java 7 API] [Java Code Conventions] [GNU Code Conventions]
Related Courses: [CSC 152 2006S (Rebelsky)] [CSC 207 2013F (Rebelsky)] [CSC 207 2013S (Walker)] [CSC 207 2011S (Weinman)]
Misc: [SamR] [Glimmer Labs] [CS@Grinnell] [Grinnell] [Issue Tracker (Course)] [Issue Tracker (Textbook)]
Copyright (c) 2013-14 Samuel A. Rebelsky.

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