Computer Science 245: Data Structures and Algorithms

Spring 2017 Syllabus         Class # 0203-245-01

Time: MWF 9:15 - 10:20
Location: LS 307
Professor: David Galles
Office: HR 542
Office Hours:   T/TR 10-12 or by appointment
                        Though these are my stated office hours, I am in my office most of the day.
                        If my door is open (and it usually is), I am happy to talk with students.
Phone: 422-5951
Email: galles@usfca.edu

TA: Cole Howard

Text:
A class reader is available at the bookstore

Prerequisite:
Computer Science 112, Introduction to Computer Science II
Math 201 Discrete Math or Math 235 Formal Methods

Finals and Midterms:
Both midterms and the final will be closed notes.

Test Dates:

Assignment Weight Date
Project 1
10%
2/22/2017
Project 2
10%
3/22/2017
Project 3
10%
4/19/2016
Project 4
10%
5/10/2017
Homework
10%
Approximately Weekly
Midterm #1 15% 3/8/2016
Midterm #2 15% 4/26/2016
Final: 20% Section 1: 5/17/2017 (Wednesday) 10:00 am

If there are any problems with the above midterm dates, if you let me know about them in the first week of school then the timing can be flexible.  The earlier we know about problems, the easier it will be to resolve them to everyone's satisfaction.

Academic Honesty:

Students are required to follow the University's Honor Code: "As a Jesuit institution committed to cura personalis- the care and education of the whole person- USF has an obligation to embody and foster the values of honesty and integrity. USF upholds the standards of honesty and integrity from all members of the academic community. All students are expected to know and adhere to the University's Honor Code. "

This includes but is not limited to the following:

ALL assignments are to be completed individually unless specified, in writing, on the assignment. Academic dishonesty will NOT be tolerated. This is your warning! Students are encouraged to meet with me if they have questions regarding assignments or this policy. Students caught cheating will face severe penalty.

Students may: Students may NOT: Requirements Penalties

Late Policy:
Late projects will be accepted on the next class meeting after the due date for up to 75% credit. Projects will not be accepted later than one class meeting after the deadline.

Grading:
Grades will be assigned on a straight scale, with Approximately

90-100% A
80-89% B
70-79% C
60-69% D
0-59% F

Attendance:
Students are expected to attend class. Topics that are discussed in class but are not in the course notes and do not appear online are fair game for the midterms and final.

Topics to be covered (partial list):

Analysis of Algorithms
Rate of growth: O(n), o(n), Ω(n) ω(n) Θ(n)
Time vs. Space
Stacks & Queues
Arrays vs. Linked Lists
Binary Trees
Binary Tree Manipulation
Ordered Binary Trees / Binary Search Trees
Heaps
Priority Queues
Sorting
Insertion Sort / Selection Sort
Merge Sort / Quicksort
Heapsort
Bucket Sort
Radix Sort
Hash Tables
Hash Functions
Open Hashing
Closed Hashing
B Trees
Graph Algorithms
Dijkstra’s Algorithm
Prim’s Algorithm
Kruskal’s Algorithm
Depth First Search
Connected Components
Maximum Flow
Dynamic Programming
AVL Trees (Time permitting)
NP-Completeness (Time permitting)
Binomial Heaps (Time permitting)

Learning Outcomes:

Students who complete this course will be able to:
  1. Analyze the O() and Theta() running times of both imperative and recursive algrithms
  2. Write larger and more complex Java applications
  3. Understand all of the following algorithms, and implement them in Java:

    Stacks/Queues/Lists
    Binary Search Trees
    General Trees
    Heaps (Priority Queues)
    Hash Tables
    B-Trees
    Sorting Algorithms
         Insertion sort
         Quicksort
         Mergesort
         Bucket Sort
         Radix Sort
    Graph Algorithms
         Dijkstra's Algorithm
         Prim's Algorithm
         DFS/BFS
         Topoligical Sort
         Connected Components
  4. Understand the basics of dynamic programming, and write a memoized version of an algorithm