Syllabus

CS 528 Advanced Data Structures and Algorithms

Fall 2015

 Meeting Times Lect: 12:00 - 12:50 M, Tu, Wed,  HB 112 Lab: 12:00 – 12:50 Th, HB 204 Instructor Dr. Razvan Andonie, HB 214-E, Office hours TA Joseph Lemley, lemleyj@cwu.edu Textbooks Introduction to Algorithms, 3 rd Edition, by Thomas Cormen, Charles Leiserson, Ronald Rivest, and Clifford Stein. A Primer on Scientific Programming with Python, 4th Edition, by Hans Petter Langtangen, Springer, 2014.

# Objectives

This course is a continuation of previous undergraduate classes (programming, data structures, and algorithms) and has the role of reviewing but also introducing more advanced topics. As a first computer science course in the Computational Science Master’s Program, it will bring students which may come with different computational background to the same basic level. It focuses on the understanding and design of fundamental algorithms, with a more thorough presentation of time and space complexity.

Topics

Growth of functions: asymptotic notation.

Divide-and conquer: the maximum-subarray problem, Strassen’s algorithm for matrix multiplication, solving recurrences, the master theorem for solving recurrences.

Probabilistic analysis and randomized algorithms.

Sorting and order statistics: heapsort, quicksort, sorting in linear time, median and order statistics

Data structures: stacks, queues, linked lists, hash tables, binary search trees, red-black trees, augmented data structures.

Dynamic programming: matrix-chain multiplication, longest common subsequence, optimal binary search trees.

Greedy algorithms: Huffman codes, matroids and greedy methods, task-scheduling as a matroid.

 Homeworks 40% Projects 30% Final project 30%

95 - 100   A

90 - 94     A-

87 - 89     B+

83 - 86     B

80 - 82     B-

77 - 79     C+

73 - 76     C

70 - 72     C-

67 - 69     D+

63 - 66     D

60 - 62     D-

0  - 59      F

If you must miss an exam, contact your instructor prior to the exam to schedule a time to make it up. Late submission of assignments is generally not accepted. No partial credit for late assignments will be offered.

# Lecture Resources

Some excellent video lectures following this textbook are available from MIT's Open Courseware, along with assignments, readings, solutions, and so forth. The same videos are also available for download through iTunes University in iPod/iPhone-ready formats. MIT OpenCourseWare (MIT OCW) is an initiative of the Massachusetts Institute of Technology (MIT) to put all of the educational materials from its undergraduate- and graduate-level courses online. The lectures of many courses are available in video format, freely downloadable.

Very interesting are also the MIT Open Courseware on the mathematics of computational science. We are not going to focus on these topics, since they will be subject of other courses.

# Laboratory & Software

The Laboratory serves as a first introduction to computer programming of scientific applications, using the high-level Python language. The applications are taken from mathematics, numerical calculus, statistics, physics, biology, and finance. By blending programming, mathematics and scientific applications, the laboratory projects lay a solid foundation for practicing computational science.

We use Python. To install Python, use the WinPython installation package. Use the included Spyder scientific development environment. You may install the 32 or 64 bit version, but it is better to install Python 2 (not 3). This software is available in the lab. Scientific computing with Python still goes mostly with version 2. A widely used strategy for software developers who want to write Python code that works with both versions, is to develop for version 2.7, which is very close to what is found version 3.4, and then use the translation tool 2to3 to automatically translate from Python 2 to Python 3. A good link for scientific programming in Python is Numeric & Scientific Computation with Python. Here are some excellent Python Scientific lecture notes.

# Final Project

The Final Project should be submitted as a technical report and presented in class. It will be graded as follows: 1/3 Python code, 1/3document, and 1/3 presentation. The report document should contain: problem description, benchmarking, figures, and discussion. Tables and a list of references are a plus. Using LaTeX brings an extra-credit of 10% to the project’s grade. Guidelines can be found at here. The presentation should be made with 10-15 slides, in about 15 minutes, including questions and answers. Presentation guidelines can be found here. Submit the report, source code and slides by email.

# Laboratory Schedule

 Date Topic Readings Textbook: Langtangen Assignments 9/24 Introduction to Python Introduce Project 0 (not graded): Exercises 1.1 – 1.4 Ch. 1-2 10/1 Introduce Project 1 (graded): Exercises 2.20, , 3.13, 3.15, 3.18 Ch. 3-4 Project 0 due 10/8 Introduce Project 2 (graded): Exercises 5.31 & 5.38. Ch. 5 Project 1 due 10/15 Project 2 10/22 Introduce Project 3 (graded): Exercises 8.18 & 8.24. Ch. 8 Project 2 due 10/29 Project 3 11/5 Introduce Project 4 (graded): Exercises A.16 & A.24. Appendix A Project 3 due 11/12 Introduce Final Project (graded). Choose one of the following exercises: 8.36 or 8.40. Project 4 due 11/19 Final Project 11/26 Thanksgiving No classes No classes 12/3 Final Project presentations Final Project due