-1-
Software Design and Analysis III
CSCI 335
Spring 2017
Tuesday/Thursday 5:35-6:50, HN C107
Instructor:
http://www.cs.hunter.cuny.edu/~ioannis
WWW:
Course related material can be found at blackboard
Visit it regularly
Office:
1090G, Hunter North
Tel:
(212) 772-5215 [office], (212) 772-5213 [CS department]
Office Hours:
Tuesdays 2-4
Textbook
Required: Data Structures and Algorithm Analysis in C++, 4th Edition, Mark Allen
Weiss.
Other books: (not required, but useful):
Cormen, Leiserson, and Rivest, Introduction to Algorithms, McGraw-Hill
(comprehensive and advanced).
Knuth, The Art of Computer Programming, Volumes I through III, Adison-Wesley
(valuable texts for computer scientists).
Algorithms in C++, Parts 14 and Part 5, Robert Sedgewick, Addison-Wesley (in-depth
algorithm analysis).
-2-
Course Content and Objectives
This course is the sequel to CSCI 235, and as such, a major objective is to deepen and
enhance your programming skills as well as knowledge of various advanced algorithms.
The course will cover Algorithm Analysis, Advanced Trees, Special Priority Queues,
Sorting Algorithms, Disjoint Sets, Graph Algorithms, Dynamic Programming,
Randomized Algorithms, and Amortized Analysis. Beware though, you are expected to
learn much of this material without much classroom time devoted to it.
Prerequisites
CSCI 235 and MATH 155.
Not Repeating This Course
If you do not want to repeat this course then you'd better do all of the following:
Do the assigned readings before the lecture, not after it.
Make a list of questions before the class.
Submit all assignments on time.
Be well prepared for your oral presentation.
Solve a set of problems at the end of each chapter.
Study for exams.
Do all assignments yourself!! Expect severe penalties for plagiarism (see related
section).
Syllabus and Readings
Which parts of the textbook and when they will be covered is described in the syllabus.
You are responsible for everything in the listed chapters regardless of how much time we
spend on them in class. As noted above, you should read ahead so that you can ask
questions in class to clear up anything you find confusing.
-3-
Assignments
No one can become proficient at programming without writing many programs. I will
assign five projects during the semester. Each project will contain one programming and
one theoretical part.
Every program must satisfy the programming rules stated in the Programming Rules
(check Blackboard) document. The rules governing lateness, plagiarism, and how they
are graded are also contained there. You are not allowed to work in groups! You can
discuss about the assignments. However, copying of pieces of code among peers is a
serious problem. It is critically important that all submitted program listings and
executions be thoroughly documented. Each assignment will count for 10% of your final
grade. That means that the five assignments will constitute 50% of your final grade. You
are allowed to use the source code that is provided by the book.
All programs must compile and run. Zero credit will be given for programs that do not
compile or do not run. Usually the homework assignments will only state the major
objectives of the program to be written; it will be often up to you to make design
decisions regarding I/O, efficiency, error handling, and so on. Make sure you provide
adequate test cases to indicate the correctness and robustness of your approaches. In
general, the failure of a grader to understand your work or to appreciate the thoroughness
of its testing will be considered to be your error.
Oral Presentation
One of the goals of this class is to prepare you for technical presentations. It is almost
certain that you will deliver a number of them in your future professional or academic
career. Each one of you needs to select a unique topic (i.e. no two students will present
the same topic) that has not been covered in class. A list of possible topics can be found
on chapter 12 of your book. However, you can also select a class-related topic from other
sources. You will present this topic in front of your peers at the end of the semester (see
schedule). Each presentation will last at least 8 minutes (the exact duration will be
determined when the final presentation schedule is in place). You will be graded based on
the style, clarity, preparation, and technical correctness of your presentation. You will
prepare slides (pdf or powerpoint) to aid your delivery. Note, that this is 10% of your
grade.
Grading
There will be one midterm exam and one final exam. The final exam is not
comprehensive (i.e. it will only cover material taught after the midterm). Your final
grade will be calculated as follows:
50% (5 assignments) + 15% (midterm) + 25% (final) + 10% (presentation).
-4-
Make-up Policy
All exams must be taken on time. Failure to take an exam counts as a zero grade on that
exam. If you miss the midterm or final exam for a legitimate, documented medical
emergency, I will find a way (if possible) to assist you.
Resources
Source code can be found at:
http://users.cs.fiu.edu/~weiss/
STL:
http://www.sgi.com/tech/stl/
http://www.cppreference.com/wiki/stl/start
http://www.yolinux.com/TUTORIALS/LinuxTutorialC++STL.html
STL exceptions:
http://www.aoc.nrao.edu/~tjuerges/ALMA/STL/html/classstd_1_1exception.html
Source code documentation generating tool (Doxygen):
http://www.stack.nl/~dimitri/doxygen/
Learning goals
This class satisfies the following learning goals as set forth by the Computer Science
department:
(2a): Deep practical knowledge of one widely used programming language (C++).
(2b): Be experienced in working in at least two widely used operating system
environments.
(2c): Be able to apply principles of design and analysis in creating substantial programs.
(1b): Understand the relationship between computer architectures and software systems.
(3a): Be able to communicate technical ideas effectively, both in writing and in oral
presentations.
(3c): Be able to perform competitively on the Computer Science GRE exam.
-5-
Academic Integrity
Hunter College regards acts of academic dishonesty (e.g., plagiarism, cheating on
examinations, obtaining unfair advantage, and falsification of records and official
documents) as serious offenses against the values of intellectual honesty. The college is
committed to enforcing the CUNY Policy on Academic Integrity and will pursue cases of
academic dishonesty according to the Hunter College Academic Integrity Procedures.
Special attention is given to CONTRACT CHEATING (this is where students have work
completed on their behalf which is then submitted for academic credit). Projects will be
thoroughly checked for authenticity/originality with Turnitin.com.
ADA Compliance
In compliance with the American Disability Act of 1990 (ADA) and with Section 504 of
the Rehabilitation Act of 1973, Hunter College is committed to ensuring educational
parity and accommodations for all students with documented disabilities and / or medical
conditions. It is recommended that all students with documented disabilities (Emotional,
Medical, Physical and / or Learning) consult the Office of AccessABILITY located in
Room E1124 to secure necessary academic accommodations. For further information and
assistance please call (212-772-4857)/TTY (212-650-3230).
-6CSCI 335 -- SYLLABUS & TENTATIVE SCHEDULE (SPRING 17)
Date
Topics
Readings
Tu, 1/31
L1.
Th, 2/2
L2. Algorithm Analysis (I)
Chapter 2
Tu, 2/7
L3. Algorithm Analysis (II)
-//-
Th, 2/9
L4. Review of List/Stack/Queue + Iterators
Chapter 3
Tu, 2/14
L5. Review (continue)
Th, 2/16
L6. Trees (AVL)
Tu, 2/21
L7. Trees (cont)
Th, 2/23
L8. Trees (Splay Trees,B-Trees)
4.5, 4.64.7
Tu, 2/28
L9. Sets/Maps
4.8
Th, 3/2
L10. Hashing
Chapter 5
T, 3/7
L11. Heaps
Chapter 6
Th, 3/9
L12. Heaps
Chapter 6
Tu, 3/14
Midterm
Th, 3/16
L13. Sorting
7.1-7.7
Tu, 3/21
L14. Sorting
7.8-7.9
Th, 3/23
L15. Union/Find
Chapter 8
Tu, 3/28
L16. Graph Algorithms
9.1-9.3
Th, 3/30
L17. -//-
9.4-9.6
Tu, 4/4
L18. -//-
Th, 4/6
L19.Greedy Algorithms
9.7
10.1
Tu, 4/11
Th, 4/14
Tu, 4/18
Spring Break
Th, 4/20
Monday Schedule No class
Tu, 4/25
L18.Divide and Conquer
Th, 4/27
L20.Divide and Conquer (cont)
Tu, 5/2
L19. Dynamic Programming
10.3
Th, 5/4
L21. Randomized Algorithms
10.4
Tu, 5/9
L22. Backtracking Algorithms
10.5
Th, 5/11
L23. Student Presentations
Tu, 5/16
L24. Student Presentations
Th, 5/18
L25. Student Presentations
T, 5/23
Final Exam: 5:20 - 7:20
Introduction
Deadlines
Chapter 1
#1 due
4.1-4.3
#2 due
#3 due
10.2
#4 due
#5 due
-7-