College of Engineering and Computer Science (CECS) Research School of Computer Science

# COMP3600/COMP6466: Algorithms

(6 units) Group C

Thirty lectures and four two-hour tutorial/laboratory sessions

Lecturers: A/Prof Weifa Liang and Dr Beata Faller

## Prerequisites

COMP1110 or or COMP1140 or COMP1510; and 6 units of 2000-level COMP courses and 6 units of 2000-level MATH courses or COMP2600.

## Syllabus

This course deals with the study of algorithms for solving practical problems and the data structures used in the implementations of algorithms. Detailed analysis of the resource requirements of algorithms will be an important issue.

A large variety of algorithms are candidates for study. These include, but are not limited to, the following: greedy algorithms, dynamic programming, divide-and-conquer paradigm, basic graph algorithms like BFS and DFS trees, minimum spanning trees, single source shortest path algorithms, all pairs of shortest paths algorithms, advanced data structures such as hash tables, binary search trees, and red-black trees, etc. The mathematical tools used to study the resource usage of algorithms will be considered too.

## Description

A good knowledge of algorithms and algorithmic theory is essential for finding efficient solutions to real life problems, and for determining whether such a solution exists in the first place. This course aims to expose students to a variety of algorithms that have practical applications, while conducting detailed analysis of the resource requirements required by the algorithms.

## Rationale

Aims to give the students an exposure to a variety of algorithms that can be used for solving real life problems. This should help them acquire the necessary skills to recognize problem scenarios where such algorithms can be used, to modify an existing algorithm or develop a new one for new problems, and to show that the given problem does not lead itself to an efficient solution, if such be the case. It will also provide further experience in the development of efficient software for nontrivial purposes.

## Ideas

This course will carry the main responsibility for:
• expose students to a variety of algorithms that can be used to solve real problems, as well as doing a detailed resource analysis of each one
• give them examples of where such algorithms can be used
• provide them the knowledge of how to design, select and evaluate new algorithms

## Topics

The topics covered could include the following:
• Graph algorithms: connected components, minimum spanning trees, a single source shortest path, all pairs of shortest paths, minimum cut and maximum flow, transitive closure, and topological sort
• General algorithm paradigms: divide-and-conquer, greedy algorithms, and dynamic programming
• Data structures: hash tables, heaps, binary search trees, and red-black trees
• Analysis of algorithm resource usage, by counting and recurrence techniques

## Skills

Will acquire a good knowledge of a variety of algorithms that have real-life applications; will further develop skills in the analysis of algorithms; will get some hands-on experience in the design, analysis and implementation of algorithms for some nontrivial problems; will get an exposure to the theory of intractability; will get some experience in how one can go about showing that certain problems are intractable.

## Objectives

Upon completion of this course, the student will:
• have a thorough understanding of a variety of algorithms with real-life applications and the resource requirements
• be able to apply the algorithmic techniques including dynamic programming, greedy policy, and divide-and-conquer, to solve some practical problems
• be able to analyze time and space complexities of algorithms.
• have some experience in the design and implementation of algorithms for practical problems, using languages like C, C++
• have a basic understanding of the theory of intractability and have some experience in proving that certain kinds of problems are intractable
• ## Assessment

There will be six quizzes (Q), two assignments (A), one mid-semester exam (M), and one final exam (F). The overall assessment will be based on a 15:35:20:30 weighting for the quizzes, assignments, and the examinations. The final mark is calculated using the following formula:

Total = 0.15Q+0.35A+0.2M+0.3F,

subject to necessary adjustment during the School examination meeting. The school policy on plagiarism will be enforced.