**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:**

- receive help from the professor and the TA.
- discuss the requirements of the assignments, the meaning of programs, or high-level algorithms with other students or outside sources. If you have any doubt with respect to what is acceptable to discuss, speak with the professor first.

**Students may NOT:**

- look at another student's code.
- look at another student's solutions to homework problems.
- receive unapproved help from an outside source including a tutor or a family member.
- submit code which has, in whole or in part, been copied from
*any*other source (including another student, a web page, or another text). - submit solutions to problems which have, in whole or in part, been
copied from
*any*other source (including another student, a web page, or another text).

**Requirements**

- Any help from a source other than the professor, the lab assistant, or a TA must acknowledged. Example sources that must be cited are a parent, a family friend, and an outside tutor.
- If you wish to get a tutor in the course, speak with the professor.
- Any code submitted by a student must be completely original. No portion of a student's code may be copied from any other source (including, but not limited to, another student, a web page, or another text).

**Penalties**

- Students caught violating the academic honesty policy will face severe penalty. A first offense will result in a 0 on an assignment and a report to the Dean's office.

**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:

- Analyze the O() and Theta() running times of both imperative and recursive algrithms
- Write larger and more complex Java applications
- 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

- Understand the basics of dynamic programming, and write a memoized version of an algorithm