Dan Ventura (sec 1 & 2) Email
2214 TMCB
(801) 422-9075
Hours: By appointment

Gordon Bean (sec 3 & 4) Email
2252 TMCB
(801) 422-1419
Hours: Th 10-10:50, F 1-2:45, or by appointment

Teaching Assistants (Email)

Jack Demke
Brad Spendlove
Jared Rydalch
Robert Morain
Connor Wilhelm
1156 TMCB

TA Schedule and Zoom links

Meeting Time & Place

8:00–9:15 TTH (Sec 1)
9:30-10:45 TTH (Sec 2)
130 MARB
2:00-3:15 TTH (Sec 3)
3:30-4:45 TTH (Sec 4)
ESC C215

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 we 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 in PDF format by 7:30:00AM on the date indicated. If your homework is a scanned PDF, it is your responsibility to ensure that it is clear and readable; it is also your responsibility to ensure that uploads to Learning Suite completed correctly (i.e., double check after you've submitted to make sure it shows up in Learning Suite correctly and is a valid PDF). All programming assignments (PDF) and design experiences (simple quiz format) are due by 11:00:00PM on the date indicated. As with homework assignments, it is your responsibility to verify uploaded PDFs. Late work is not accepted.

All assignments must be submitted through Learning Suite. Note that waiting until the last minute to submit through Learning Suite can be unreliable, so plan to submit early. It is in your best interest to submit whatever you can before the deadline. 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 our 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, and they will consist of written problems similar to those encountered on the homework. If you put in the time to understand the homework and programming assignments, the tests should not be too difficult. The final exam will be heavily 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. For both exams, The exam is closed book and will have a time limit of three hours. You will be allowed a page of notes (you may use both sides). This is NOT meant to try to cram in all the information from the semester. The purpose of the page of notes is two fold: 1) to enhance your preparation through your deciding what to include and how to represent it, and 2) to obviate the need for memorizing details. The content of this page must be in large enough font (or similar concept if handwritten), to be easily readable. 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 the standard scale. An approximate breakdown of assignment weighting 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 our records are in accordance with the work you have done. Please bring any discrepancies to our 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 (of course, this includes material you might find on the internet). 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, using online API documentation to learn syntax, searching stackoverflow for examples of how to use a language feature. Unacceptable collaboration would be simply copying homework, code or test answers from a friend (or the internet) or allowing someone else to copy homework, code or test answers. Academic dishonesty will be grounds for failure of the course; however, we 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.

Diversity and Inclusion

As a university community we strive to foster an educational environment that promotes the personal dignity of every student and accept individual responsibility to eliminate racism, sexism, and nationalism. We create learning environments in which every individual is motivated to express their opinions and perspectives and ask questions to augment discussions and learning. We listen to, learn from, and strive to consider thoughtfully the opinions of others. We use language that is polite, considerate, and courteous—even when we strongly disagree. We seek unity in higher principles of equity, charity, collaboration, and inclusiveness in order to build an environment in which all students, faculty, and staff can participate in, contribute to, and benefit equally from the academic community.

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.

General Education

Succesful completion of this course fulfills the Physical Science requirement in the Arts, Letters and Sciences area of the university general education core. By the time a student takes cs312 they have had a significant experience with the scientific method, in the sense that the processes of creating a hypothesis for why a problem solution (or program) is or is not working, creating tests to show that the hypothesis is correct and then analyzing the output provide a unique and very general approach to applying scientific principles and reasoning. The class directly addresses learning outcomes from Sound Thinking and Problem Solving and, to some extent, also those from Communication and Life-Long Learning in the BYU GE foundation documents learning outcomes.