COMP2211
This course introduces the student to techniques for designing and analysing efficient algorithms. The emphasis is on the principles at work in algorithms that solve some common problems in a variety of topics, and on techniques for analysing algorithm performance. Students who take this course should already be familiar with writing Mathematical proofs, and be able to argue rigorously about abstract objects such as numbers, functions and graphs.
- Analysing algorithms (solving recurrence equations with the Master Theorem);
- Algorithm strategies (brute force, greedy, divide, and conquer, branch-and-bound, heuristic; Iterated approximations (Newton = Raphson method, searching for roots of a polynomial {in one variable});
- Fast exponentiation;
- Euclid’s algorithm;
- Discrete logarithm;
- RSA cryptography;
- Heaps as implementations for priority queues;
- Sorting;
- Binary search trees;
- Red-Black trees;
- Hashing;
- Graphs and graph algorithms;
- Distributed computing (introduction { consensus vs. election algorithms});
- NP Basic Computability: uncomputable functions, the halting problem implicated of uncomputability.
- Final Exam (2-hours long) 60%
- Coursework 40%
- 5 assignments
- 1 in-course test
- Weekly labs
Students will be required to pass both the coursework and the final examination to pass the course. Attendance at tutorials and lab sessions is mandatory.
COMP1126 - Introduction to Computing I,
COMP1127 - Introduction to Computing I,
COMP1161- Object-Oriented Programming AND COMP1210 - Mathematics for Computing.