Advanced data structures and algorithms

COSC 302/307 - Spring 2025

Instructor

Scott Emrich
Office: 608 Min Kao Hall
Phone: (865) 974-3891; E-mail: semrich at utk.edu
Office hours: whenever my office door is open; and by appointment

Overview

This course is a third-semester programming course that focuses on fundamental data structures and associated algorithms. The course reinforces object-oriented programming (OOP), and covers sorting algorithms, disjoint sets, basic graph algorithms including toplological sort, depth-first search, and breadth-first 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.

Text and syllabus

Data Structures and Other Objects using C++ by Main and Savitch.

The syllabus can be found here

Schedule

Date Topic Homework Notes
1/21/2025 (re)Intro to classes, const, interface vs. implementation   Challenge #1, due 1/24
Project #1, due 1/29
Reading 00/01 questions due 1/27
[Github]
1/23/2025 Classes and operator overloading   [Github]
1/28/2025 Sorting: selection, bubble, insertion sort Challenge #2, due 1/31 [Historical Notes]
1/30/2025 Sorting: merge sort, quicksort Project #2, due 2/12
Reading 02, due 2/6
[Historical Notes]
2/04/2025 Sorting: shell sort, heap sort, STL algorithms Challenge #3, due 2/7 [Notes]
2/06/2025 Graphs Reading 03, due 9/19 [Historical Notes]
2/11/2025 DFS/BFS Challenge #4, due 2/19 [Historical Notes]
2/13/2025 Class choice #1: final project info    
2/18/2025 Disjoint sets Project #3, due 3/3 [Historical Notes]
2/20/2025 Priority queues (a review)   [Historical Notes]
2/25/2025 Minimum Spanning Trees (MSTs) Challenge #5, due 3/5 3pm
[Historical Notes]
2/27/2025 Collaborative midterm review review; DFS/BFS (Again)   see Canvas
3/4/2025 Topological sort    
3/6/2025 In-class midterm    
3/11/2025 Computability and NP completeness Challenge #6, due 3/14 [Notes]
[Add. video]
3/13/2025 Intro to software eng/final projects   [PDF]
Spring Break!
3/25/2025 Dijkstra's shortest path Challenge #7, due 3/31
Project #4, due 4/4
see Canvas
3/27/2025 Network flow   [Notes]
4/1/2025 max-flow, min-cut   [Notes]
4/3/2025 Special topic: Dynamic programming in bioinformatics Project # 5, due 4/23 [Notes]
4/8/2025 Dynamic programming (cont) Final project progress report #1 due
Challenge #8, due 4/14
[Notes]
[HackerRank video]
4/10/2025 Class choice #2: Grad school and grad student research (Zack)
4/15/2025 Class choice #3: "study hall"; no formal class but Dr. Emrich will be in his office    
4/22/2025 BYODS group presentations (set 1) Final project progress report #2 due  
4/24/2025 BYODS group presentations (set 2)    
4/29/2025 BYODS group presentations (set 3)    
5/1/2025 Exam review, final push inc. presentations if needed    
5/6/2025 Demo day release party!    

Academic dishonesty

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.