**Time:** MW 11:45-1:30 (section 2) MW 4:45-6:20 (section 1)

**Location:** LS 307 (section 2), Harney 435 (section 1)

**Professor:** EJ Jung

**Office:** Harney 403A

** Office Hours**: MW 10-11:30am, or by appointment

I highly encourage you to make an appointment with me, and I'm available on Zoom (video conference) too.

**Email:** ejung@cs.usfca.edu (include 673 in the subject) - Piazza preferred

**Teaching Assistants:** Chengcheng Wang, Bingkun Yang

**Contact:** Use Piazza!

**Office Hours:** Bingkun - Mondays 6:30-8:30pm, Fridays 4-6pm in CSI 307
Chengcheng - Wednesdays 1:30-2:10pm, 3:25-3:55pm CSI 307
4:05-4:40pm CSI G12

**Tutoring Center**

You may also visit the CS Tutoring Center for help with this course.

**Prerequisite:**

Graduate standing

**Text**:

Required: Cormen, Leiserson, Rivest, Stein *Introduction to Algorithms, 3rd Edition*

**External Resources**

**Grading Policy**

Grades will be given according to scores on written homework assignments, midterms and finals, according to the following percentages.

Assignment | Percentage | Date |

Homework | 40% | Approx. Weekly |

Midterm 1 | 15% | 10/04/2017 |

Midterm 2 | 15% | 11/15/2017 |

Final (Comprehensive) | 30% | Saturday, December 9th, 2017 5:30pm - 7:30pm (both sections) |

A+ >100% | B+ ≥87% | C+ ≥77% |

A ≥94% | B ≥84% | C ≥74% |

A- ≥90% | B- ≥80% | C- ≥70% |

F < 70% |

**Academic Honesty**

All students are expected to know and adhere to the University of San Francisco's Academic Honor Code. Go to https://myusf.usfca.edu/academic-integrity/honor-code for details.
You must never represent another person’s work as your own.
Any student may be asked to reproduce any of his/her work at any time. Failure to reproduce work in a timely manner will be considered academic dishonesty.
Copying answers from other students or sources during an exam or homework assignment is a violation of the university’s honor code. This includes copying answers or other material from the web, and having anyone other than yourself complete your assignments. It also includes working too closely with another student. Collaboration or discussion that results in the same or very similar answer indicates that you have not placed enough independent work into your solution and is a violation of the honor code.
Flagrant or repeat violations of the honor code will result in an F in the course, a report to the University Academic Integrity Committee, and a report to the Dean.
At the discretion of the instructor, a less severe penalty may be imposed for minor or first offenses. This is at the sole discretion of the instructor and any violation may result in an F in the course.
Examples of honor code violations include but are not limited to:

- Giving your homework answer(s) to another student.
- Submitting homework written by anyone other than yourself as your own.
- Copying text from the web.

**Academic Honesty**

You are not allowed to search the web for solutions to the homework assignments. You are not allowed to use any solutions to previous version of this class in completing your homework assignments -- if you have any old solutions, throw them out now! While it is acceptable to discuss the homework problems *at a high level* with other students, you should not get into details, or tell another student the solution to a problem. You should write up the solutions to your homework problems * entierly on your own.* You should never look at the solutions of other students, or allow them to use your solutions.

**Late Policy**

Late homeworks WILL NOT BE ACCEPTED. If you have difficulty with an assignment, or some type of time conflict, the correct time to see me is *before* it is due. Trying to get an extension on the due date itself will lead to sympathy from the instructor, but no extension.

**Exams**

The exam portion of your grade will be based on two exams administered throughout the semester and one exam administered during the final exam period. You are responsible for being in class on the day of the exam. Make-up exams will be given only in the case of a medical emergency verified by a doctor's note.

**Exam Policy**

If a student earns less than 60% on any two out of the three exams the student will get an automatic F for the class.

**Students with Disabilities**

If you are a student with a disability or disabling condition, or if you think you may have a disability, please contact USF Student Disability Services (SDS) at (415) 422-2613 within the first week of class, or immediately upon onset of disability, to speak with a disability specialist. If you are determined eligible for reasonable accommodations, please provide me with your SDS Verified Individualized Services and Accommodations (VISA) form, and we will discus your needs for this course. For more information, please visit: http://www.usfca.edu/sds or call (415) 422-2613.

I would like to hear from anyone who has a disability which may require seating modifications or testing accommodations or accommodations of other class requirements, so that appropriate arrangements may be made. Please contact me during my office hours or make an appointment.

**Learning Objectives**

Upon successful completion of this course, you should be able analyze the running time and space requirements for complex algorithms, both recursive and iterative. You will understand a variety of fundamental computer science algorithms, and be able to modify them to solve related problems. Most importantly, you will improve your "algorithmic thinking" skills, and be better able to create novel algorithms for new problems.

*Tentative* Course Outline

The following is subject to change, given the interests/knowledge of the students

Introductions

Algorithm Basics

Mathematical Foundations

O(), Ω(), o(), ω() Θ()

Recurrence Relations

Proof Techniques

Randomized Algorithms

Sorting & Selection

Heapsort, Quicksort, Randomized Quicksort, Mergesort

Selection Problem

O(n lg n) Quicksort (worst case)

sub-O(n lg n) sorting

counting sorts, radix sort, bucket sort

Modifying Data Structures

Read/Black Trees & Interval Trees

Leftest Heaps

Fibonacci Heaps

Dynamic Programming

Relation to Divide and Conquer

Fibonacci Numbers

Matrix Chain Multiplication

Longest Common Subsequence

Polygon Triangulation

Greedy Algorithms

Scheduling

Huffman Codes

Proving Correctness

Matroids

Amortized Analysis

Basic Concepts

Aggregate method

Accounting method

Potential Method

Graph Algorithms

Graph representations

BFS / DFS

Spanning Trees

Shortest Path

Maximum Flow

Other Topics (Time permitting)

String Matching

RSA & Encription

Computational Geometry

Approximation Algorithms