Ryan Farrell
2216 TMCB
Office Hours: By appointment

Teaching Assistants

1156 TMCB
TA Office Hours

Meeting Time & Place

1:35–2:50 Tu/Th (sec 1)
3:00-4:15 Tu/Th (sec 2)
1170 TMCB

The Schedule has dates and deadlines for
lectures, reading, assignments, and exams.


Course Description

We will study several general approaches to algorithm design, including Divide and Conquer, Graph-based, Greedy, Dynamic Programming, Linear Programming, Intelligent Search, as well as *briefly* treat some advanced topics. We will discuss canonical problems, abstraction and reduction as tools for problem solving, and we will also consider how to tell if an algorithm is correct and how to analyze it's complexity.

Text & Reading

The text for the class is Algorithms by Dasgupta, Papadimitriou, and Vazirani. We will cover much of the text following the provided schedule. You are responsible for reading the material for a given day prior to that day's lecture. Because class time is limited, we may not cover everything in the text. However, except where specifically noted otherwise, you are responsible for the entire text.

Attendance & Participation

Class attendance and participation are expected. This is not because I feel the need to have students in class; instead, it is because your attendance and participation guarantee you a better learning experience.

Make sure you have done the reading and tried to understand on your own before you ask questions. If you do not, it is usually readily apparent. When you don't understand something, ask; there are no dumb questions—unless you haven't done your reading.

Homework Assignments

A few problems will be assigned (typically from the text) each class period and will be due at the beginning of class the following period. It is very important to stay current in this class and this homework schedule is designed to help you do so.

Communicating clearly and concisely what you have to say is an important skill you will use throughout your career. All written assignments are to be neat and professional. If you cannot clearly communicate something, there is a good chance that you do not yet understand it well. Good writing, grammar, punctuation, etc. are important and can affect your grade.

Programming Projects

There will be 5 individual programming projects throughout the semester and one final group project. For each project, you will solve a concrete problem by implementing an algorithm in such a way as to meet a conservative performance requirement. A reasonable implementation will sail through the performance requirement. You will prepare a typed report electronically according to the guidelines for each project. You will answer questions posed in the project guidelines and usually report the results of an empirical analysis of your algorithm. All project reports should include a copy of your documented source code and a screenshot demonstrating the working algorithm. Each project except the last (group) project will include an initial "design experience" to encourage you to think before you code. These experiences are worth 10% of your project grade and will be evaluated using an online quiz and are typically due about a 10 days before the finished project. More information on projects and design experiences can be found here.

Late Policy

All homework assignments are due at the beginning of class on the date indicated. All programming assignments and design experiences are due electronically by 11:59:00PM on the date indicated. Late work is not accepted.

Note that although the deadlines are always 11:59:00PM on the due date, waiting until the last minute to submit through LearningSuite can be unreliable, so plan to submit early. It is in your best interest to submit whatever you can before that time. Probably the best way to make sure you are not unpleasantly surprised is to submit incrementally: submit what you have early, and then continue to improve your work and resubmit as you make improvements, up until the deadline.

Note that the schedule is carefully designed to give you plenty of time between when we discuss in class the concepts needed for a project and when it is due. Please start early and make use of that time to do a good job. If you do not get the entire project completed by the deadline, make sure you submit what you have.

In my experience, one key to success, in this class, in our profession and in life in general, is being organized and meeting deadlines. The no-late-work-policy is in large part to help you be successful and be able to continue progressing and focusing on new material. Please submit your work on time!

Of course, if you have extenuating circumstances that warrant an exception to the no late work policy, please talk to me as soon as possible.


There will be one mid-term (administered in the testing center) and one final (administered in class). These tests will be timed, you will be allowed one single-sided page of notes (two single-sided or one double-sided for the final), and they will consist of written problems similar to those encountered on the homework. If you put in the time to understand the learning labs and programming assignments, the tests should not be too difficult. Explicitly, the final will be largely weighted toward material not covered on the midterm; however, it will be comprehensive in that it will assume you understand the material covered throughout the course. A brief study guide for the midterm exam can be found here, and one for the final exam can be found here.


Grading will be on a weighted curve. An approximate breakdown is as follows:

15% Homework
40% Programming Assignments
22.5% Midterm Exam
22.5% Final Exam

Because the first programming assignment is simpler than the others, it will be worth concomitantly fewer points. Although your final class grade will not be available until the end of the term, a cumulative point total will be available online and will be updated regularly. You should check this periodically to ensure that my records are in accordance with the work you have done. Please bring any discrepancies to my attention immediately, as these things are usually easily resolved early and are often much more difficult as time passes.

Appealing grades on assignments and on tests begins with you. Make an effort to understand why you received the score that you did and make sure that you have a good reason to appeal. If after making these efforts, you still feel like you have a concern, the next step is to calmly and intelligently discuss it with TA. If after taking both of these steps you still are not satisfied, come see me.

Working Together

You may work together with other members of the class; in fact, you are strongly encouraged to do so; however, do NOT turn in other people's work. This is a fine line that may require some judgment on your part. Examples of acceptable collaboration: discussing homework problems and solutions with others in the class; posting questions and/or answers to questions on the class newsgroup; comparing learning results and conclusions from programming assignments with other class members. Unacceptable collaboration would be simply copying homework, code or test answers from a friend or allowing someone else to copy homework, code or test answers. Academic dishonesty will be grounds for failure of the course; however, I do not anticipate that we will have any questions or problems in this area.

Preventing & Responding to Sexual Misconduct

In accordance with Title IX of the Education Amendments of 1972, Brigham Young University prohibits unlawful sex discrimination against any participant in its education programs or activities. The university also prohibits sexual harassment—including sexual violence—committed by or against students, university employees, and visitors to campus. As outlined in university policy, sexual harassment, dating violence, domestic violence, sexual assault, and stalking are considered forms of "Sexual Misconduct" prohibited by the university.

University policy requires all university employees in a teaching, managerial, or supervisory role to report all incidents of Sexual Misconduct that come to their attention in any way, including but not limited to face-to-face conversations, a written class assignment or paper, class discussion, email, text, or social media post. Incidents of Sexual Misconduct should be reported to the Title IX Coordinator at or (801) 422-8692. Reports may also be submitted through EthicsPoint at or 1-888-238-1062 (24-hours a day).

BYU offers confidential resources for those affected by Sexual Misconduct, including the university’s Victim Advocate, as well as a number of non-confidential resources and services that may be helpful. Additional information about Title IX, the university’s Sexual Misconduct Policy, reporting requirements, and resources can be found at or by contacting the university’s Title IX Coordinator.

Students With Disabilities

BYU is committed to providing reasonable accommodation to qualified persons with disabilities. If you have any disability that may adversely affect your success in this course, please contact the University Accessibility Center at 422-2767. Services deemed appropriate will be coordinated with the student and instructor by that office.

Retake Policy

Students are allowed only one retake of any class. If a student withdraws from or fails a class a second time, the student will not be allowed to register for any CS course for one semester (or one term, if in spring or summer). This policy does not apply to classes dropped before the add/drop deadline.

After one semester (or term), a student must petition to be allowed to take CS courses again. The petition must provide evidence of a substantive change that makes success in future CS classes much more likely. For example, a student may have demonstrated success in technology, math, or science-based courses. The petition will be reviewed by the undergraduate advisor.

Petitions for non-academic (e.g., medical or military) exceptions to the one semester/term waiting period may be granted according to university policies. Information about filing a petition can be found here: