Skip to main content

Schedule

The schedule below shows the tentative dates for all class topics, readings, and assignments. You should complete all assigned reading before class on the day it is listed. Labs will be available shortly before the assigned lab day. There may be some revisions to the schedule during the semester, but I will make sure to announce these changes in class.

If you view this page with JavaScript enabled you can jump to the current week on the schedule, and you should see the next day of class highlighted in the schedule below.

Week 1
W
Jan 23
class 1

Getting started

We begin the course by exploring some key ideas.

Topics: Course goals. Course structure. Academic honesty. ADTs and data structures. Designing a stack ADT (an exercise). A bit about OOP.


F
Jan 25
class 2

Programming in the small with Java

We consider some basic issues of Java programming.

Topics: From C to Java. The structure of a Java program. Compiling and running Java programs. Strings in Java. Numeric types in Java. Arrays in Java. Basic output in Java. Basic input in Java.

Week 2
M
Jan 28
class 3

Getting started with Java development

We consider tools for developing programs in Java, particularly the Eclipse integrated development environment (IDE) and the Git version control system.

Topics: IDEs. Eclipse basics. Version control. Git basics.



F
Feb 1
class 4

Objects and classes

We consider Java’s approach to objects, the primary building block of object-oriented programming. We also explore Java’s classes.

Topics: Object basics. Modeling objects with classes. An exercise.

Week 3
M
Feb 4
class 5

Unit testing and debugging

We return to concepts of unit testing and habits of debugging that you first learned in CSC 151. We also introduce the concept of test-driven development, common among agile developers.

Topics: A few thoughts on testing. An example. Test-driven development. Why use debuggers. Debugging vs. print statements. Debugging in Eclipse.


W
Feb 6
class 6

Object semantics

We consider some underlying issues in the design and implementation of objects in Java. We explore some ways to represent objects visually.

Topics: References. The stack and the heap. Representing objects.


Th
Feb 7

F
Feb 8
class 7

Interfaces and subtype polymorphism

We consider interfaces, which serve as specifications of expected behavior for classes. We also explore how interfaces support one form of polymorphism, a key aspect of object-oriented programming.

Topics: Interfaces. The building blocks of OOP. Subtype polymorphism.

Week 4
M
Feb 11
class 8

Parametric polymorphism

We continue our explortation of polymorphism by considering a second type of polymorphism, parametric polymorphism, and its realization in Java’s generics.

Topics: Subtype polymorphism, revisited. Parametric polymorphism. Java generics. Generic classes. Generic interfaces. Generic methods. Generics and arrays.


W
Feb 13
class 9

Pause for Breath

We pause to consider the topics we have covered to date and to quickly introduce exceptions..

Topics: Object-oriented design. Exceptions.



F
Feb 15
class 10

Inheritance

We consider inheritance, the third core aspect of object-oriented design.

Topics: Inheritance basics. Inheritance and polymorphism. Compile time vs. run time.

Week 5
M
Feb 18
class 11

List ADTs

We consider lists and ways to think about them. We practice ADT design.

Topics: The design of ADTs, revisited. Scheme lists. Java lists. Quick notes on implementation.

Reading
  • No reading
Lab
  • No lab
Due
  • Quiz 4

W
Feb 20
class 12

Linear structures

We consider linear structures, such as queues and stacks. We explore ways in which arrays and simple linked objects can be used to implement linear structures.

Topics: Linear structures. Stacks. Queues. Other linear structures. Implementing linear structures with arrays. Implementing linear structures as linked structures.



F
Feb 22
class 13

Array-based linear structures

We explore ways in which arrays can be used to implement linear structures.

Topics: Detour: Wrappers. Implementing linear structures with arrays. Array-based queues. Priority queues and their implementation.

Week 6
M
Feb 25
class 14

Iterators

We consider iterators, a standard mechanism for accessing the elements of a collection. We explore the use of Java’s anonymous inner classes to build iterators.

Topics: Iterators. Iterating array-based structures. Iterating linked linear structures. Named iterators. Anonymous inner classes.

Lab
Due
  • Quiz 5

W
Feb 27
class 15

Analyzing algorithms

We consider ways to analyze the resource use of algorithms, including formal notation for describing that use.

Topics: Comparing algorithms. Empirical analysis. Asymptotic analysis. Counting steps. Big-O, formalized. Implications of Big-O.


Th
Feb 28
 

F
Mar 1
class 16

Analyzing algorithms, continued

We continue our exploration of the analysis of algorithms.

Topics: Practice with Big-O. Comparing Big-O and empirical approaches.

Week 7
M
Mar 4
class 17

Analyzing recursive algorithms

We consider techniques for analyzing recursive algorithms.

Topics: Iterative analysis, revisited. Recurrence relations. Approaches to recurrence relations.


W
Mar 6
class 18

Anonymous functions

We consider Java’s support for anonymous functions.

Topics: Anonymous functions reviewed. Anonymous functions in Java. Functional interfaces.


Th
Mar 7
 

F
Mar 8
class 19

Searching

We consider the problem of searching a collection and techniques for searching various kinds of collections.

Topics: Modeling the problem of searching. Sequential search. Predicates. Binary search. Comparators. Testing binary search.

Week 8
M
Mar 11
class 20

Loop invariants

We consider loop invariants, an important technique for designing iterative algorithms.

Topics: Reasoning about iterative algorithms. The state of a program. Loop invariants. Loop termination. An exercise: Binary search.

Lab
  • No lab
Due
  • Quiz 7

W
Mar 13
class 21

Sorting

We return to the problem of sorting a list or array.

Topics: The problem of sorting. Testing sorting algorithms. Insertion sort. Selection sort. Generic sorts.



F
Mar 15
class 22

Merge sort

We consider the classic merge sort algorithm.

Topics: Lower bounds on sorting. Divide-and-conquer algorithms. An introduction to merge sort. Analyzing merge sort.

Spring Break
Week 9
M
Apr 1
class 23

Quicksort

We consider the classic Quicksort algorithm.

Topics: A quick introduction to Quicksort. Partitioning. Partitioning with invariants. Key ideas from Quicksort.


W
Apr 3
class 24

Pause for breath

We pause to discuss the first examination and to explore current complexities and confusions

Topics: Testing. Linked structures and iterators. Additional issues.

Reading
  • No reading
Lab
  • No lab


F
Apr 5
class 25

Pause for breath

We continue to discuss the first examination and to explore current complexities and confusions

Topics: Array-based queues. More testing.

Reading
  • No reading
Lab
  • No lab
Week 10
M
Apr 8
class 26

Array-based lists

We return to the list ADT and explore how to implement lists using arrays.

Topics: A simple list interface. The java.util.List interface. The java.util.ListIterator interace.


W
Apr 10
class 27

Doubly-linked lists

We explore more sophisticated versions of the linked-list data structure

Topics: Linked lists, reviewed. Doubly-linked lists. Circularly-linked lists. Other list issues.



F
Apr 12
class 28

The Map ADT

We introduce the Map (a.k.a. Dictionary) abstract data type and some simple implementations.

Topics: Maps and dictionaries. Associative arrays. Association lists.

Readings
Lab
  • No lab
Week 11
M
Apr 15
class 29

Trees and tree traversal

We introduce the tree structure and mechanisms for iterating trees.

Topics: Representing hierarchical information. Tree terminology. Depth-first and breadth-first traversal. Recursive depth-first traversal. Iterative breadth-first traversal. Iterative depth-first traversal. Pre-order, in-order, and post-order traversals.

Readings
Due
  • Quiz 10

W
Apr 17
class 30

Binary search trees I

We consider binary search trees, one of the standard implementations of the Map abstract data type.

Topics: Organizing binary search trees. Adding elements to BSTs.



F
Apr 19
class 31

Binary search trees II

We continue our exploration of binary search trees.

Topics: Deletion in BSTs.

Reading
  • No reading
Assigned
  • Assignment 8
Week 12
M
Apr 22
class 32

Hash tables

We consider hash tables, one of the most powerful implementations of the Map abstract data type. We also explore the issue of hash functions.

Topics: Integer maps. From objects to integers. Handling collisions. Rebuilding hash tables. Hash functions.

Lab
  • No lab
Due
  • Quiz 11

W
Apr 24
class 33

Probing in hash tables

We explore one of the two primary collision-resolution mechansims in hash tables.

Topics: Collisions. Linear probing. Quadratic probing.

Reading
  • No reading

Th
Apr 25
 
Due
  • Assignment 8

F
Apr 26
class 34

Chaining in hash tables

We explore the second of two primary collision-resolution mechanisms in hash tables.

Topics: Buckets and chaining.

Week 13
M
Apr 29
class 35

Priority queues, heaps, and heap sort

We return to the subject of priority queues and consider heaps, one of the more efficient ways to represent priority queues.

Topics: Priority queues, revisited. The heap structure. Adding elements to heaps. Removing elements from heaps. Storing trees in arrays.

Reading
Lab
  • TBD
Due
  • Quiz 12

W
May 1
class 36

The Graph ADT

We consider the graph abstract data type and some common implementations of graphs.

Topics: Modeling problems with graphs. Graph terminology. Weighted graphs. Directed graphs. Implementing graphs with adjacency matrices. Implementing graphs with adjacency lists. Implementing graphs with edge tables.

Reading
  • No reading
Lab
  • No lab


F
May 3
class 37

Traversing graphs

We consider the problem of visiting all the nodes in a graph, expanding the approaches we used for trees.

Topics: Review of tree traversal. Breadth-first traversal. Depth-first traversal.

Assigned
  • Assignment 9
Week 14
M
May 6
class 38

Minimum spanning trees

We consider how to build minimum spanning trees in graphs

Topics: Minimum spanning trees. Strategies for building minimum spanning trees. Kruskal’s algorithm. Prim’s algorithm. Greed as an approach to algorithm design.


W
May 8
class 39

Shortest paths in graphs

We consider the problem of finding the shortest path between two nodes in a graph

Topics: The shortest path problem. Shortest paths in unweighted graphs. Shortest paths in weighted graphs. Dijkstra’s algorithm.


Th
May 9
 
Due
  • Assignment 9

F
May 10
class 40

Wrapup

We conclude the course.

Topics: The subject matter(s) of the course. Looking ahead. Course evaluation.

Reading
  • No reading
Lab
  • No lab
Finals Week
F
May 17

Final Examination