Course SyllabusCS 3530 Design and Analysis
|
Instructor: Eugene Wallingford
- Office: 305 ITTC
- Phone: 273-5919
- E-Mail: wallingf@cs.uni.edu
- WWW: http://www.cs.uni.edu/~wallingf/
- Click here for my office hours and schedule
Resources:
- There is no required text for this course. I will provide links to on-line readings and occasional handouts in class.
Some of the course materials are based on a previous edition of Introduction to the Design and Analysis of Algorithms, by Anany Levitin.
- Electronic resources:
- The course web page, http://www.cs.uni.edu/~wallingf/teaching/cs3530/
- The course mailing list, cs3530@cs.uni.edu
Note that to send messages to the course mailing list, you must send from the mailing address from which you are subscribed. By default, that is your uni.edu e-mail address. If you'd like to be subscribed from some other address, let me know or send a request to listserv manager.
The study of algorithms is one of the oldest and most important elements of computer science. An algorithm describes how to solve a problem. Computer scientists have discovered families of algorithms for solving common, challenging problems. If you understand these patterns in problem solving, and can use them to design solutions to the problems you encounter, then you will be a more effective designer and implementer of software.
This course aims to help you develop a deep, hands-on understanding of the essentials of algorithms and their design. It does so by confronting you with challenging problems and helping you to see patterns in the algorithms that solve them. We will first lay the foundation for the analysis of algorithms and then use those ideas to explore several families of common problems and the algorithms that solve them.
By the end of the semester, you should feel comfortable:
Note that this course is not about any particular programming language, or style of programming. ...
You will earn your grade based on your performance on homework
assignments, exams, and the final examination. I assign final
grades using the following distribution:
Item | Number | Weight |
---|---|---|
Homework | 6-12 | 25% |
Exams | 3-5 | 45% |
Final exam | 1 | 30% |
Grades will be assigned using an absolute scale:
This means that there is no curve.
We will use computing resources in this course for two purposes: to communicate with one another and to implement programs, in particular your compiler.
Communication will be done by e-mail and the web. I will post materials for the course to the CS 3530 web page, and we will make use of other web-based resources when appropriate. We also have a class-wide mailing lists, cs3530@cs.uni.edu, by which we carry on discussion outside the confines of class meetings. Be sure that you remain current in your use of these resources!
You may write your programs in any language of your choice. In past semesters, students have written their programs in Java, C, Python, Scheme, Ruby, and Common Lisp. Each of these languages has specific advantages and disdvantages as the implementation language of a compiler. C and Java are relatively standard compiler-writing languages in the industry. Numerous language resources are available on the web, and implementations are available for all contemporary platforms, including Unix, Mac OS X, and Windows. I am open to implementations in other languages, including other scripting languages and system languages such as Ada.
My platforms for the course are Mac OS X 10.[5-6] and the CHAS Linux system for students. They provide Version 1.6.x of the Java Development Kit and standard gcc tools for working in C, as well as current versions of Python, Racket, Ruby, and many other languages.
You may develop in any environment you like, as long as I can compile and run your programs on these machines. I will be more or less helpful with programming issues depending on which language you choose, because I know some languages better than others.
The following schedule gives a rough sketch of the topics we will cover and the distinguished dates this semester. The exam dates a very tentative. If I decide to re-schedule a exam, I will notify you at least one week prior to the scheduled date.
Week | Dates | Topics | Special Events |
---|---|---|---|
1 | Introduction to course | . | |
2 | Design of algorithms | . | |
3 | Fundamental data structures | . | |
4 | Analysis of algorithms | . | |
5 | Brute force; Divide and conquer | Exam 1 (Tue) | |
6 | Decrease by one | . | |
7 | Decrease by one | . | |
8 | Decrease in other ways | . | |
9 | Instant simplification | Exam 2 (Tue) | |
. | Spring Break | . | |
10 | Representation change | . | |
11 | Space-time trade-offs | . | |
12 | Dynamic programming | . | |
13 | P, NP, and NP-complete problems | Exam 3 (Tue) | |
14 | Greedy algorithms | . | |
15 | Miscellaneous topics; course wrap-up | . |
The FINAL EXAM is Thursday, May 8, from 3:00 PM - 4:50 PM.