Lecture/Lab Schedule

ICS-46: Data Structure Implementation and Analysis


Course Expectations

Lectures and Labs

Programming is an intensive activity. We will have class every day of the week: MWF lectures and TuTh (open) labs. By staying on task 5-days per week, learning and practicing what we learn, we are more likely to master programming in C++ and using C++ to implement data structures. One learns programming by practicing programming.

Work Before, During, and After Lecture

I expect students to read the assigned lecture materials, either before class (as a way to preview the lecture) or after class (where the lecture previews the reading), to get the most out of both: cover the material twice. I will lecture during class, but I prefer discussing the material and answering questions; asking you questions about the material, and amplifying on those topics that need further discussion. I expect most "lectures" to be interactive, with students participating. Lecture mottoes: "Those who are ashamed of asking are ashamed of learning." and "The only stupid question is the one left unasked."

Carefully read the lectures and examine the code they contain. Test and explore this code in Clion to verify that you understand the material both theoretically and practically. Here understanding means "be able to use the information operationally to write code that solves problems". If you have difficultly with a concept, it indicates that you should probably go back over the related reading -or certainly ask a question about it on the Forum. One of the few advantages of a big class like this is the potental for peer-teaching.

Lecture Attendance and Decorum

I expect students to attend class daily, arriving on time, and settling down when class starts: I will wait until there is silence before starting class. The announcements made at the start of class are often very important. I expect students to neither carry on private conversations, nor use their computers to answer e-mail, surf the web, day trade stocks, or perform any other activities unrelated to this course.

Someone once said, "Distance education begins in the 8th row of the classroom". I recommend that student sit in the rows close to the front of the room. I once had the following comment on my final teaching evaluation, "Write bigger: I could never read what you wrote on the whiteboard from my seat in the back of the class." I have many deficiencies as an instructor; students should help themselves get what they need out of this class -like by sitting near the front if necessary.

Ringing cell phones disrupt my lectures. Unless you are responsible for someone's life, your cell phone should be turned off. Otherwise, you should set it to operate in some silent mode (as mine will be set); if it rings silently and you decide you must answer the call, please leave the class, with a minimum of disruption to the rest of the students. If your cell phone rings audibly in class, you will be asked to leave class for that day. Finally, if you know that you must leave early, please sit by a door, so that you can exit quietly and without disturbing other students in the class.

Overall, please strive to be a considerate class member, both to me and to your fellow students.

Studying for the Midterm and Final Exams

A few days before these exams, students often ask me how to study for them. This reminds me of a marathon runner who asks his/her coach a few days before a race how to prepare for it: by then, it is too late. The best way to study for the midterm and final exams is to keep current on all the readings. By doing so, you will not need to cram for these exams. Often I will suggest that students review the quizzes before these exams (and review the midterm before the final), and lightly review the programming assignments.


Schedule, Topics, Readings, and Problems

Week Activity Date Topic Materials
#0Lab 9/28 Start Program #0: CLion/Clang C++, Course/GoogleTest Libraries, and Checkmate  
 Lecture 9/29 Course Overview (all) Notes
#1Lecture 10/2 The ICS-46 Template Library: Stack, Queue, Priority Queue, Set, and Map Notes
test_itl
cross_reference
 Lab 10/3 Work on Program #0:CLion/C++, Course/GoogleTest Libraries, and Checkmate  
 Lecture 10/4 The ICS-46 Template Library: Stack, Queue, Priority Queue, Set, and Map (continued) Notes
test_itl
cross_reference
 Lab 10/5 Start Program #1: Using the ICS-46 Template Library  
 Lecture 10/6 Array Implementations of ICS-46 Template Library Classes Notes
Iterator Worksheet
#2Lecture 10/9 Linked Lists and Linked List Processing Linked Lists and Linked List Processing Notes
Pictures
Driver
 Lab 10/10 Work on Program #1: Using the ICS-46 Template Library  
 Lecture 10/11 Special Linked Lists: Circular, Header, Trailer, Doubly-linked Notes
Pictures
 Lab 10/12 Work on Program #1: Using the ICS-46 Template Library  
 Lecture 10/13 Recursion: General, Strings, Linked Lists Notes
Pictures
#3Lecture 10/16 Analysis of Algorithms I: Complexity Classes and big-O Notation Notes
 Lab 10/17 Start Program #2: Implementing Queue/Priority Queue/Set with Linked Lists  
 Lecture 10/18 Analysis of Algorithms II: Composing Complexity Classes: examples; Ω (big-Omega) and Θ (big-Theta) Notations Notes
 Lab 10/19 Work on Program #2: Implementing Queue/Priority Queue/Set with Linked Lists  
 Lecture 10/20 Introducing Binary Trees Notes
Pictures
#4Lecture 10/23 Binary Search Tree: Processing and Traversals Notes
Pictures
Driver
Empirical Program Empirical Text
 Lab 10/24 Work on Program #2: Implementing Queue/Priority Queue/Set with Linked Lists  
 Lecture 10/25 Heap Trees and Special Trees Notes
Pictures
 Lab 10/26 Work on Program #2: Implementing Queue/Priority Queue/Set with Linked Lists  
 Lecture 10/27 AVL (and other self-balancing) Trees Notes
#5Lecture 10/30 General Trees (set, etc. children), Binary embedding, Quad trees, Digital Trees, Structure Trees Notes
Pictures
 Lab 10/31 Start Program #3: Implementing Priority Queues and Maps with Binary Trees  
 Lecture 11/1 Hash Tables: Hashing, Chaining, Probing, Iterators Notes
Empirical Program Empirical Text
 Lab 11/2 Work on Program #3: Implementing Priority Queues and Maps with Binary Trees  
 Lecture 11/3 Problem Solving and Search Trees: Backtracking
Notes
Backtracking Program Graph
#6Lecture 11/6 Problem Solving and Search Trees: State-Space Searching
Notes State-Space Program
 Lab 11/7 Work on Program #3: Implementing Priority Queues and Maps with Binary Trees  
 Lecture 11/8 Midterm Exam
Topics: ICS-46 Template Library and Iterators; Linked Lists (iterative and recursive); Analysis of Algorithms Trees: Binary/BST/Heap/AVL/N-ary/Digital/..., Hash Table concepts
 
 Lab 11/9 Work on Program #3: Implementing Priority Queues and Maps with Binary Trees  
 Lecture 11/10 Holiday (No Classes): Veterans Day  
#7Lecture 11/13 Sorting 1: Time/Space/Stability, O(N^2) Sorts Notes
 Lab 11/14 Start Program #4: Implementing Maps and Sets via Hash Tables  
 Lecture 11/15 Sorting 2: O(N Log N) Sorts, lower bounds for comparison sorts Notes
 Lab 11/16 Work on Program #4: Implementing Maps and Sets via Hash Tables  
 Lecture 11/17 Sorting 3: Sorting without Comparisons: Bucket and Radix Sort Notes
#8Lecture 11/20 Equivalences Notes
 Lab 11/21 Work on Program #4: Implementing Maps and Sets via Hash Tables  
 Lecture 11/22 Graphs: Terminology and Representations Notes
Pictures
 Lab 11/23 Holiday (No Classes): Thanksgiving
 Lecture 11/24 Holiday (No Classes): Thanksgiving
#9Lecture 11/27 Graph Algorithms I: Topological Sorting, Connected Components, and Spanning Trees Notes
Graph for MST
 Lab 11/28 Start Program #5: Implementing Graphs and Dijkstra's Algorithm  
 Lecture 11/29 Graph Algorithms II: Extended Dijkstra's Algorithm (Shortest Paths) Notes
Graph
Example
 Lab 11/30 Work on Program #5: Implementing Graphs and Dijkstra's Algorithm  
 Lecture 12/1 Speeding-up code without changing its algorithm/complexity class Notes
#10Lecture 12/4 Computer Memory: Introduction Notes
 Lab 12/5 Work on Program #5: Implementing Graphs and Dijkstra's Algorithm  
 Lecture 12/6 Computer Memory: Data Structures and Algorithms for Searching Notes
Picture
 Lab 12/7 Work on Program #5: Implementing Graphs and Dijkstra's Algorithm  
 Lecture 12/8 Computer Memory: Algorithms for Sorting Notes
Final Exams Week12/15 We will have a comprehensive 2-hour written final exam on Friday, December 15th, 8:00am - 10:am (see the Final Exam Schedule). Bring a photo ID with a legible name and picture (UCI, drivers license, passport, etc.) I will send email when I have computed/entered final grades, which are due to UCI by Thursday, December 21st at 5pm.