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 Piazza Folders. One of the few advantages of a big class like this is the potental for peer-teaching.
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. Do not use your personal media in any way that would disturb students sitting near you. In fact, because I continually receive complaints about this issue, my policy is "All students who use their computers/personal media must sit on the right side of the classroom (right as you are facing the front)." Students not using computers/personal media should not sit in this area.
Someone once said, "Distance education begins in the 8th row of the classroom": once you are that far back, it is easy to stop paying attention. 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.
I am frequently busy before class setting up for lecture: if you need to talk to me, please come up after class rather than before. 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, I will ask you 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; doing so is especially important in large classes.
If you elect not to attend lectures, the notes that I provide will cover all the important topics (but you have to read them carefully). You will miss general purpose announcements, a small amount of live-coding, picture drawing, and questions/answers. I find only the most mature students can skip class and study by themself, but learning how to learn by yourself is an excellent higher-order skill to attain.
Another excellent way to learn the material is to create your own "study-guide", while you are reading the notes and running their code. By journaling, in your own words, the new/important information that you read (I estimate producing 1-2 pages for every reading), you will achieve a better understanding of the material; and, you can then review your journals before any exam.
Week | Activity | Date | Topic | Materials |
---|---|---|---|---|
#0 | Lab | 9/26 | Start Program #0: CLion/Clang C++, Course/GoogleTest Libraries, and Checkmate |   |
  | Lecture | 9/27 | Course Overview (all) | Notes |
#1 | Lecture | 9/30 | The ICS-46 Template Library: Stack, Queue, Priority Queue, Set, and Map |
Notes test_itl cross_reference |
Lab | 10/1 | Work on Program #0:CLion/C++, Course/GoogleTest Libraries, and Checkmate | ||
Lecture | 10/2 | The ICS-46 Template Library: Stack, Queue, Priority Queue, Set, and Map (continued) |
Notes test_itl cross_reference |
|
Lab | 10/3 | Start Program #1: Using the ICS-46 Template Library | ||
Lecture | 10/4 | Array Implementations of ICS-46 Template Library Classes |
Notes Iterator Worksheet |
|
#2 | Lecture | 10/7 | Linked Lists and Linked List Processing Linked Lists and Linked List Processing |
Notes Pictures Driver |
Lab | 10/8 | Work on Program #1: Using the ICS-46 Template Library | ||
Lecture | 10/9 | Special Linked Lists: Circular, Header, Trailer, Doubly-linked |
Notes Pictures |
|
Lab | 10/10 | Work on Program #1: Using the ICS-46 Template Library | ||
Lecture | 10/11 | Recursion: General, Strings, Linked Lists |
Notes Pictures |
|
#3 | Lecture | 10/14 | Analysis of Algorithms I: Complexity Classes and big-O Notation | Notes |
Lab | 10/15 | Start Program #2: Implementing Queue/Priority Queue/Set with Linked Lists | ||
Lecture | 10/16 | Analysis of Algorithms II: Composing Complexity Classes: examples; Ω (big-Omega) and Θ (big-Theta) Notations | Notes | |
Lab | 10/17 | Work on Program #2: Implementing Queue/Priority Queue/Set with Linked Lists | ||
Lecture | 10/18 | Introducing Binary Trees |
Notes Pictures |
|
#4 | Lecture | 10/21 | Binary Search Tree: Processing and Traversals |
Notes Pictures Driver Empirical Program Empirical Text |
Lab | 10/22 | Work on Program #2: Implementing Queue/Priority Queue/Set with Linked Lists | ||
Lecture | 10/23 | Heap Trees and Special Trees |
Notes Pictures |
|
Lab | 10/24 | Work on Program #2: Implementing Queue/Priority Queue/Set with Linked Lists | ||
  | Lecture | 10/25 | AVL (and other self-balancing) Trees | Notes |
#5 | Lecture | 10/28 | General Trees (set, etc. children), Binary embedding, Quad trees, Digital Trees, Structure Trees |
Notes Pictures |
Lab | 10/29 | Start Program #3: Implementing Priority Queues and Maps with Binary Trees | ||
Lecture | 10/30 | Hash Tables: Hashing, Chaining, Probing, Iterators |
Notes Empirical Program Empirical Text |
|
Lab | 10/31 | Work on Program #3: Implementing Priority Queues and Maps with Binary Trees | ||
Lecture | 11/1 | Problem Solving and Search Trees: Backtracking |
Notes Backtracking Program Graph |
|
#6 | Lecture | 11/4 | Problem Solving and Search Trees: State-Space Searching | Notes State-Space Program |
Lab | 11/5 | Work on Program #3: Implementing Priority Queues and Maps with Binary Trees | ||
Lecture | 11/6 |
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/7 | Work on Program #3: Implementing Priority Queues and Maps with Binary Trees | ||
Lecture | 11/8 | Sorting 1: Time/Space/Stability, O(N^2) Sorts | Notes | |
#7 | Lecture | 11/11 | Holiday (No Classes): Veterans Day | |
Lab | 11/12 | Start Program #4: Implementing Maps and Sets via Hash Tables | ||
Lecture | 11/13 | Sorting 2: O(N Log N) Sorts, lower bounds for comparison sorts | Notes | |
Lab | 11/14 | Work on Program #4: Implementing Maps and Sets via Hash Tables | ||
Lecture | 11/15 | Sorting 3: Sorting without Comparisons: Bucket and Radix Sort | Notes | |
#8 | Lecture | 11/18 | Equivalences | Notes |
Lab | 11/19 | Work on Program #4: Implementing Maps and Sets via Hash Tables | ||
Lecture | 11/20 | Graphs: Terminology and Representations |
Notes Pictures |
|
Lab | 11/21 | Work on Program #4: Implementing Maps and Sets via Hash Tables | ||
Lecture | 11/22 | Graph Algorithms I: Topological Sorting, Connected Components, and Spanning Trees |
Notes Graph for MST |
|
#9 | Lecture | 11/25 | Graph Algorithms II: Extended Dijkstra's Algorithm (Shortest Paths) |
Notes Graph Example |
Lab | 11/26 | Start Program #5: Implementing Graphs and Dijkstra's Algorithm | ||
Lecture | 11/27 | Speeding-up code without changing its algorithm/complexity class | Notes | |
Lab | 11/28 | Holiday (No Classes): Thanksgiving | ||
Lecture | 11/29 | Holiday (No Classes): Thanksgiving | ||
#10 | Lecture | 12/2 | Computer Memory: Introduction | Notes |
Lab | 12/3 | Work on Program #5: Implementing Graphs and Dijkstra's Algorithm | ||
Lecture | 12/4 | Computer Memory: Data Structures and Algorithms for Searching |
Notes Picture |
|
Lab | 12/5 | Work on Program #5: Implementing Graphs and Dijkstra's Algorithm | ||
Lecture | 12/6 | Computer Memory: Algorithms for Sorting | Notes | |
Final Exams Week | 12/9 | We will have a comprehensive 2-hour written
final exam on Monday, December 9th, 4:00pm - 6:00pm
in our classroom, ELH 100> (see the
Final Exam Schedule).
Bring a photo ID with a legible name and picture
(UCI, driver's license, passport, etc.)
I will send email when I have computed/entered final grades, which are due to UCI by Thursday, December 19th at 5pm. |