Scott Emrich
Office: 608 Min Kao Hall
Phone: (865) 9743891; Email: semrich at utk.edu
Office hours: whenever my office door is open; and by appointment
This course is a thirdsemester programming course that focuses on fundamental data structures and associated algorithms. The course reinforces objectoriented programming (OOP), and covers sorting algorithms, disjoint sets, basic graph algorithms including toplological sort, depthfirst search, and breadthfirst search, shortest path, minimum spanning trees, network flow / minimum cut, and dynamic programming. For the algorithms listed students are expected to design and implement C++ programs that solve related problems. All programming will take place in a Unix environment and will be reinforced by weekly assignments.
The syllabus can be found here
Date  Topic  Homework  Notes  
1/24/2023  (re)Intro to classes, const, interface vs. implementation  Challenge #1, due 1/30 Project #1, due 2/3 Reading 00/01 questions due 2/1 
[Github]  
1/26/2023  Classes and operator overloading  [Github]  
1/31/2023  Sorting: selection, bubble, insertion sort  Challenge #2, due 2/6 Project #2, due 2/17 
[Historical Notes]  
2/2/2023  Sorting: merge sort, quicksort  Reading 02, due 2/15  [Historical Notes]  
2/7/2023  Sorting: shell sort, heap sort, STL algorithms  [Notes]  
2/9/2023  Disjoint sets  Challenge #3, due 2/13  [Historical Notes]  
2/14/2023  Class choice #1: templating  Reading 03, due 3/3 

2/16/2023  Graphs  Challenge #4, due 3/6 Project #3, due 3/10 
[Historical Notes]  
2/21/2023  DFS/BFS  [Historical Notes]  
2/23/2023  Collaborative midterm review review; Dijkstra's shorest path  Challenge #5, due 2/27  see Piazza  
2/28/2023  Minimum Spanning Trees (MSTs)  Project #4, due 3/31  [Historical Notes]  
3/2/2023  Inclass midterm  Challenge #6, due 3/10  
3/7/2023  Intro to software eng/final projects  see Piazza  
3/9/2023  Templates (review)  Challenge #7, due 3/27  [PDF]  
Spring Break!  
3/21/2023  Topological sort  Challenge #8, due 4/3  
3/23/2023  Network flow  [Notes]  
3/28/2023  maxflow, mincut  Project # 5, due 4/21  [Notes]  
3/30/2023  Special topic: Dynamic programming in bioinformatics  Final project progress report #1 due  [Notes]  
4/4/2023  Dynamic programming (cont)  Challenge #9, due 4/17  [Notes] [HackerRank video] 

4/11/2023  Computability and NP completeness  [Notes] [Add. video] 

4/13/2023  Special topic: Parallel sorting (outside)  
4/18/2023  Class choice #2: dimensionality reduction for machine learning (guest lecture)  Final project progress report #2 due  
4/20/2023  BYODS group presentations (set 1)  
4/25/2023  BYODS group presentations (set 2)  
4/27/2023  BYODS group presentations (set 3)  
5/2/2023  BYODS group presentations (set 4)  
5/4/2023  Exam review, final push inc. presentations if needed  
5/9/2023  Demo day release party! 
All are required to abide by the EECS and University honor code. Discussions are encouraged, but all answers/programs must be written/developed individually. Final projects will be performed as a group.