Lecture Schedule
Date  Topic  Materials 
Introduction. What is an algorithm? How do we express algorithms? What makes a good algorithm? Examples: adding fractions, finding the maximum in an array 
Lecture 1 typed notes in pdf, class presentation 

Algorithm examples: Intersection of student lists. Finding a student in a list. Abstraction 
Lecture 2 typed notes in opdf, class presentation 

More on the intersection of student lists. Binary search. Analysis of running time. Recursive version of binary search 
Lecture 3 typed notes in pdf, class presentation 

Basics of Java: variables, basic types, casting, loops and conditionals. Introduction to memory organization 
Lecture 4 class presentation Examples of Java code: Welcome.java, TestVariables.java, TestIf.java, TestWhile.java, TestFor.java 

Java: Arrays. Methods. More on memory management. 
Lecture 5 class presentation 

Java: Classes, objects, methods. Constructors. Public and private. A class for representing polynomials. 
Lecture 6 class presentation Poly.java andTestPoly.java 

More on methods, parameter passing. Inheritance 
Lecture 7 class presentation TestPoly.java, PositivePoly.java 

Java: More on inheritance, scope and visibility. Keywords: static, this. 
Lecture 8 class presentations TestCircular.java, Circle.java, Sphere.java, Circular.java 

Interfaces vs inheritance. Comparable. Generic types.  Lecture 9 class presentation  
BigOh: Examples, definition, properties.  Lecture 10 typed notes in pdf, class presentation  
Sorting. Selection Sort.  Lecture 11 typed notes in pdf, class presentation, Java code  
Proofs by induction. Proving correctness of recursive algorithms using induction 
Lecture 12 typed notes in pdf, class presentation 

Guest lecture: Inheritance vs interfaces (Prof. Prakash Panangaden) 
Lecture 13 notes in pdf 

Guest lecture: More on recursion (Prof. Prakash Panangaden)  Lecture 14 notes in pdf, Hilbert curve code, Sierpinski code  
Guest lecture: MergeSort (Prof. Michael Langer)  Lecture 15 typed notes in pdf, class presentation  
Proving correctness and running time of MergeSort  Lecture 16 typed noted in pdf, class presentation, Java code  
Quicksort: running time analysis  Lecture 17 typed noted in pdf, class presentation  
More on bigoh, counting and induction.  Lecture 18 class presentation  
Abstract Data Types: Lists  Lecture 19 class presentation. A package implementing single linked lists and a test class for this package.  
Abstract Data types: Lists (continued) 
Lecture 20 class presentation 

Abstract Data Types: Stacks  Lecture 21 class presentation Implementation using arrays, and a simple application for parenthesis balancing 

Guest Lecture: Prof. Mathieu Blanchette. Abstract Data Types: Queues  Lecture 22 class presentation  
More on linear data structures in Java. Using predefined classes.  Lecture 23 class presentation  
Abstract Data Types: Trees. Binary trees  Lecture 24 class presentation  
Binary Search Trees  Lecture 25 class presentation  
Inclass midterm exam, covering lectures 123  Lecture 26 sample exams folder  
More on binary Search Trees  Lecture 27 class presentation  
Heaps  Lecture 28 typed notes, code for heap data structure, testing class for the heap data structure, class presentation  
Hash tables  Lecture 29 typed notes, code to demonstrate the effect of the hash function on the spread of elements, class presentation  
Programming techniques: dynamic programming, greedy algorithms  Lecture 30 class presentation  
Graphs  Lecture 31 class presentation  
Graph traversal  Lecture 32 class presentation  
Lecture 33 class presentation  
Graph problems. Introduction to computational complexity. P vs NP problems  Lecture 34 class presentation  
More on NP problems. Introduction to computability  Lecture 35 class presentation  
Introduction to AI. Game search  Lecture 36 class presentation  
No class (Election Day)  
Machine learning  Lecture 37 class presentation  
Recap of class, final exam preparation  Lecture 38 sample exams folder, some more solved sample problems 