CS 312: Algorithm Analysis: Syllabus, Fall 2008
CS 312: Algorithm Analysis: Syllabus, Fall 2008
Section Information
Staff Listing
The textbook for the course will be Algorithms by Dasgupta, Papadimitriou, and
Vazirani. An on-line draft is currently available at
www.cs.berkeley.edu/~vazirani/algorithms.html.
We will also draw on excerpts from other texts that will be made available on the course
website on Blackboard.
Overview
CS 312 is a course about problems and their solutions; it is a course about information
and how it is organized to meet specific objectives. The material is very deep, and it can
launch a career of learning about how to be an expert problem solver. This expertise
begins with a precise and concrete understanding of what is meant by a problem, how to
formulate it technically, and how to analyze the nature of a well-formulated problem (e.g.
does it have a solution, is the solution unique, can a solution be computed in a reasonable
amount of time and with reasonable computational resources?). Likewise, such expertise
also demands an equally precise and concrete understanding of what is meant by a
solution to a well-formulated problem, and how to characterize and analyze a well-
defined solution (e.g. what is the difference between an algorithmic and analytical
solution, what is the nature of a computation device that can execute an algorithmic
solution or compute an analytical solution, how is the correctness of the solution
measured, how is the efficiency of the solution measured?) This course lays the
foundation for answering such questions by exploring a rich set of examples and
techniques, and by giving students the opportunity to design, analyze, and implement a
number of concrete solutions to important problems.
Because the career of an expert problem solver can follow a variety of paths, the set of
examples and practice problems in CS 312 are intentionally chosen from a broad range of
application areas. Students will be exposed to problems from Scientific Computing,
Computer Science, Engineering, Data Communications, Medicine, Cryptography, Media
and Entertainment, Computational Biology, Operations Research and Management,
Business Intelligence, Finance, or other applications. Moreover, although the course will
focus on algorithms designed to execute on discrete sequential machines, we will also
discuss the implications of designing algorithms to execute on other types of computers,
such as analog computers, parallel machines, quantum computers, biological systems,
and even human organizations. In this way, students may appreciate the fundamental
nature of the ideas and skills they are developing about information and its organization,
about problems and their solutions. Moreover, by exposing students to a wide arena of
applications of algorithm analysis and design, we hope that students may find areas of
interest and inspiration where they can target their career objectives and subsequent
educational preparation.
Enrolling in the honors section of CS 312 allows a student to substitute a different, more
independently designed activity for the out-of-class participation experiences requirement
of the regular class. Any student, whether enrolled in BYU’s Honors Program or not,
may enroll in the honors section of the course. These students meet with the regular
section of CS 312 of their choice (Section 001 or Section 002) for lectures, and they
complete all the regular assignments except the out-of-class participation requirements.
Instead of the regular out-of-class participation exercises, students in the honors section
each design their own “response” to a “great idea” from computer science. This response
will include a historical context, critical analysis, and a personal response. Note that
these responses can be very creative, including, for example, application development,
independent research, etc. or they may be a very simple, but thoughtful, written response
(see https://honors.byu.edu:443/Main/files/GreatWorksResponseGuidelinesForm.pdf for
more information). Moreover, honors students will have the opportunity to present their
responses at the end of the semester and, for those who decide to pursue honors
graduation, they may include their responses in their great works portfolio.
Sources for “Great Ideas” from computer science include (but are not limited to):
1. Any one of the topics from The New Turing Omnibus, by A.K. Dewdney
2. “Richard Bellman on the Birth of Dynamic Programming”, Stuart Dreyfus
3. Extractions from the Theory of Games and Economic Behavior, Von Neumann
and Morgenstern,
4. Chaos: Making a New Science, by James Gleick
5. Classics from http://www.cs.berkeley.edu/~christos/classics/cs298.html
6. Any one of the five units from Information Science, by David Luenberger
a. Entropy: The measure of information
b. Economics: The value of information
c. Encryption: The securing of information
d. Extraction: The manipulation of information
e. Emission: The transmission of information
7. Other ideas—propose something!
Honors section students propose their extended participation experience early in the
semester and, upon approval from the course instructor, work all semester in their project.
Once a month there is an optional “Honors Lunch” planned where honors students and
the instructor may discuss the progress of their projects over lunch. Grades between the
regular and honors sections are determined in exactly the same way, except that the
honors response and presentation are graded and substituted for the out-of-class
participation experiences of the regular sections.
I. Foundational Knowledge
1. Problems and Solutions: Understand what is meant by a technical problem
formulation and the difference between an analytical vs. an algorithmic solution
to a problem.
a. Models: Appreciate the role of mathematics as a way of efficiently
describing and reasoning about a problem or a solution concept.
b. Analysis: Appreciate the nature of analysis, or mathematical reasoning
about models of algorithms, models of computing machines, and possibly
models of the computing environment, in characterizing properties of
solutions, especially correctness, stability, and efficiency.
c. Synthesis: Appreciate the power and limitations of computation for
implementing algorithmic solutions to problems, as well as various stages
of synthesis—problem formulation, algorithm design, implementation on
a specific computing machine, and verification or testing.
2. Analysis Tools: Develop fluency with three analysis tools and understand how
other analytic disciplines such as mathematics, probability, and statistics
interrelate.
a. Asymptotic Notation: Understand the process of modeling the efficiency
of an algorithm and classifications based on those models (P, NP, etc.)
b. Elementary Probability Theory: Understand definitions of sample space,
probability measure, random variables, and expectation for use in average
case analysis and the analysis of randomized algorithms. Especially note
how assumptions about probability measure impact analysis results.
c. Difference Equations: Know how to solve linear constant coefficient
difference equations and understand their role in modeling recursive
structures, characterizing amortization, describing numerical methods, and
representing dynamic programs (why they are called dynamic…).
3. Synthesis Paradigms: Develop fluency with categories of algorithms that are
unified by the way they process information, including greedy algorithms, divide-
and-conquer algorithms, randomized algorithms, dynamic programs, graph-search
algorithms, and linear programs. This fluency includes
a. Exposure to a broad array of specific applications of algorithm design
such as Data Compression (Huffman Codes), Image Processing (Fast
Fourier Transform, Intelligent Scissors), Security (Public Key
Cryptography), Graphics (Monte Carlo Integration), Computational
Biology (DNA Sequence Alignment, RNA Secondary Structure
Estimation), Operations Research (Project Selection, Airline Scheduling,
Inventory Management, Transportation Networks, Scheduling),
Computational Economics and Finance (Matching, Clustering,
Regression, Time Series Analysis, Portfolio Optimization), etc.
b. Practice with implementation issues, such as choice of data structures and
code constructs (e.g. recursive vs. iterative implementations), by
programming a solution to a specific problem for each synthesis paradigm
in the Microsoft Visual Studio programming environment.
II. Application and Integration
1. Apply problem formulation, solution development and analysis skills outside
the classroom.
2. Understand applications of algorithms to a variety of disciplines including those
listed in objective I.3.a.
3. Understand connections between mathematics, statistics, and probability to
algorithms and the ways we organize information and computation to solve well
formulated problems.
III. Human Dimension, Caring, and Learning to Learn
1. Learn more about which fields and applications of algorithm analysis and design
the student finds inspiring, enjoyable, and important.
2. Begin (or continue) to develop the attitudes, desires, and skills necessary to be an
independent learner and thinker.
3. Consider the moral and spiritual implications of ideas from this course.
Learning Activities
Learning activities for this course begin with in-class activities including lecture,
discussion, group and individual problem solving exercises, and exams. Out-of-class
activities include reading assignments, homework problems, programming projects, and
“out-of-class participation” experiences. An average student should budget 2+ hours
outside of class for every hour in class to earn an average grade (6+ hours/week).
Students are encouraged to work in groups to learn and master the material. However,
each assignment should reflect the student’s own understanding of the material and be his
or her own work. When working in groups, students should list their collaborators on
their write-ups and properly reference all sources.
Reading Assignments
Reading assignments are listed on the course schedule, although they may be modified in
class as the learning experience is tailored to each group of students. It is the student’s
responsibility to read ahead and come to class prepared for the discussion that day.
“Jumping off” points will also typically be highlighted as places where students can go to
learn more about a particular topic and dig deeper into the material. Students are
encouraged to come to class prepared to share insights they gleaned from their
preparation and reading.
Homework Problems
Homework will frequently be assigned. These problems are collected from various
sources to give students practice thinking about and using the ideas discussed in class.
Homework is due at the beginning of class on the scheduled due date as listed in the
schedule; late assignments will not be accepted without prior arrangements having been
made.
Programming Projects
There are five programming projects this semester. Each project will be described in a
handout that outlines the problem to be solved and offers some direction about the design
of a solution. Each student is expected to complete the projects in C# using the Visual
Studio environment. Grades are based on the completion of a working program and a
brief report describing your solution and addressing any questions or analyses described
in the project description.
Note that, as with other assignments, students are encouraged to work in groups to learn
the material and understand the concepts. Nevertheless, your code should be your own; if
you can’t explain everything about it or if you copied code from a friend, then you are
cheating. Also, note that all projects must be completed to pass the class.
Out-of-class Participation Experiences
The content of this class, algorithmic analysis and synthesis, has been described as the
backbone of Computer Science. In fact, it is the backbone of all of science and
engineering; the ways we organize information to solve problems is the heart of the
scientific endeavor.
As a result, you will be given credit for connecting material from this class to other
professional activities. These experiences are student selected “extra-mile” activities that
tie course material with other educational pursuits and interests. This can include
attending Computer Science or other appropriate professional colloquia, augmenting a
project from another class to include an algorithm analysis or novel synthesis component
using ideas from CS 312, participating in the student chapter of ACM or other
professional organizations that enable you to teach about Computer Science and the role
algorithms play in our world today (e.g. though high school or grade school outreach
programs, etc.), watching a relevant documentary on themes related to algorithms and
their history (e.g. Nova, Scientific American Frontiers, etc.), using your training to solve
problems of personal interest (e.g. matching algorithms for various purposes, personal
finance calculator, visiting teaching route assignment, etc.), pursuing extra reading on an
algorithms topic of personal interest (e.g. classic papers in CS, famous algorithms such as
Google’s page rank, etc.), etc. The idea behind these experiences is not to give you more
to do. Instead, it is to recognize you for things that you are already doing (or should be
doing), and encouraging you to bring your CS education to the table when you do them.
You are given credit for these experiences by turning in simple (but professional) reports
on your activities. You should briefly describe what you did and the connection to CS
312. There is no set length of the report, but use good technical writing technique; don’t
ramble but include enough information to be complete. For example, a report on a CS
Colloquium might be about a page in length and give a brief summary of the talk
followed by a critical analysis section where the student may elaborate a personal critique
or appraisal of the results that were presented. On the other hand, a report on an
augmentation to another class project might be 5 pages in length and go into extensive
detail about the extra effort made to conduct a theoretical and empirical analysis of the
algorithmic efficiency of a particular procedure, or it may include a rigorous formulation
of the problem followed by a proof of correctness of the chosen solution. Each student
will be expected to turn in a total of 5 single-spaced pages reporting on their participation
experiences. Writing quality and professionalism will affect the grade.
Exams
There will be two midterms and a final. The midterm exams will be proctored in the
testing center, have a three hour time limit, and will be closed-book closed-notes. The
final exam will be in-class according to the University Calendar. Students registered for
the honors section of the course may take their final at either time and will present their
final reports on Friday December 19th. The final exam will be comprehensive, and one
page of hand-written notes will be allowed.
Recitation
Frequently, a Friday recitation will be provided by the TA’s as outlined on the schedule.
The exact location and times of the recitation will depend on the class and be announced.
These meetings are optional and simply give the student additional exposure and practice
with many of the ideas from the lecture, reading material, or homework exercises.
Study Groups
On the first day of class, every student will be assigned to a study group. This group can
be an additional resource to master the material and excel in the class.
Honors Lunch
The First Friday of each month will be a “brown-bag” lunch for the students enrolled in
the honors section. This is a time for the students to discuss their projects with both the
instructor and with each other. This is also a great time to talk about post-graduation
plans, graduate schools, career possibilities, etc. and get the perspectives of both ones
peers and the instructor.
Course Policies
There are a number of university and course policies that impact the learning experience
in CS 312. We highlight some important ones below.
Grades
We reserve the right to curve grades in your favor. The University policies on UW and I
grades will be strictly followed.
Students in CS 312 are encouraged to work together to learn concepts and master the
material. Nevertheless, every student is expected to write their own code, do their own
work, and write up their own reports. If you do happen to work closely with other
students on a particular assignment, please be sure to list them as collaborators on your
report. Likewise, if you find ideas and concepts from Google or another source that you
integrate into your solutions, always remember to properly cite your sources.
Harassment
Disabilities