# Computer Science (COMP) 372

## Design and Analysis of Algorithms (Revision 1)

Delivery Mode: Individualized study online

Credits: 3

Area of Study: Science

Prerequisite: COMP 272 or an equivalent data structures course. Knowledge and skills in Java or C or Python programming. Knowledge of high school mathematics (MATH 30 level) is assumed.

COMP 372 has a Challenge for Credit option.

**Note: Students who are concerned about not meeting the prerequisites for this course are encouraged to contact the course coordinator before registering

## Overview

Algorithms are the core of most technologies used in contemporary computers. Practical applications of algorithms are ubiquitous.

COMP 372 introduces the fundamental techniques for designing and analyzing algorithms, including asymptotic analysis; divide-and-conquer algorithms, greedy algorithms, dynamic programming, multithreaded algorithms, number-theoretic algorithms and RSA cryptosystem, NP-completeness, and approximation algorithms. This senior-level course emphasizes techniques for constructing efficient algorithms and for analyzing the efficiency of an algorithm.

The algorithms in the course are described in English and in pseudocode that is readable by anyone who has done a little programming.

## Course Outline

The course consists of the following nine units.

Unit 0 - Orientation

Unit 1 - Foundations

• Problems
• Complexity
• Analysis
• Asymptotic notation

Unit 2 - Divide-and-Conquer Algorithms

• The maximum-subarray problem
• Strassen’s algorithm for matrix multiplication
• Methods for solving recurrences

Unit 3 - Dynamic Programming and Longest Common Subsequence

• Rod cutting
• Matrix-chain multiplication
• Elements of dynamic programming
• Longest common subsequence

Unit 4 - Greedy Algorithms

• Greedy approach
• Data-compression (Huffman) codes

• Metrics of work, span, and parallelism

Unit 6 - Number-theoretic Algorithms and RSA Cryptosystem

• Basic concepts
• Euclid's algorithm
• Modular algorithm
• Repeated-squaring algorithm
• RSA public-key cryptosystem

Unit 7 - NP-completeness

• NP question
• NP-completeness

Unit 8 - Approximation Algorithms

• Performance ratio
• The vertex-cover problem
• The set-covering problem
• The subset-sum problem

## Learning Outcomes

Upon successful completion of this course, you should be able to

• describe the major modern algorithms and selected techniques that are essential to today’s computers.
• identify the key characteristics of a given problem and analyze the suitability of a specific algorithm design technique for the problem.
• apply the algorithms and design techniques to solve problems, and mathematically evaluate the quality of the solutions, typically using the following algorithms:
• dynamic programming
• greedy
• number-theoretic
• approximation
• analyze NP-complete problems and develop algorithms to solve the problems.
• implement a solution for a given problem and algorithm in high-level programming languages.

## Evaluation

To receive credit for COMP 372, you must achieve a course composite grade of at least D (50 percent), and a grade of at least 50 percent on the invigilated final examination, and an average grade of at least 50 percent from the combined marks of the Assignments and Project. The weighting of the composite grade is as follows:

Activity Weighting
Assignment 1 (problem set 1) 10%
Assignment 2 (problem set 2) 15%
Assignment 3 (problem set 3) 15%
Assignment 4 (problem set 4) 15%
Assignment 5 (project) 15%
Participation 5%
Final Exam 25%
Total 100%

## Course Materials

### Textbook

Cormen, T. H., Leiserson, C. E., Rivest, R. L., & Stein, C. (2009). Introduction to Algorithms (3rd ed.). MIT Press.

### Other Resources

The remaining learning materials are also distributed in electronic format. At this time, those materials include

• the units of the study guide
• detailed descriptions of the requirements for the individual assignments
• a course evaluation form

Additional supporting materials of interest to students may be made available through the course website.

### Special Course Features

Computer Science 372: Design and Analysis of Algorithms is offered in unpaced electronic mode. Electronic unpaced study is facilitated through a variety of computer-mediated communication options and can be completed at the student's workplace or home.

## Challenge for Credit Overview

The Challenge for Credit process allows you to demonstrate that you have acquired a command of the general subject matter, knowledge, intellectual and/or other skills that would normally be found in a university-level course.

Full information about Challenge for Credit can be found in the Undergraduate Calendar.

## Challenge Evaluation

To receive credit for the COMP 372 challenge registration, you must achieve a grade of at least 75% on the assignment and B (75 percent) on the challenge examination. The weighting of the composite grade is as follows:

Activity Weighting
Assignment 50%
Final Examination 50%
Total 100%

### Undergraduate Challenge for Credit Course Registration Form

Athabasca University reserves the right to amend course outlines occasionally and without notice. Courses offered by other delivery methods may vary from their individualized-study counterparts.

Opened in Revision 1, March 3, 2014.