This course provides a review of mathematical techniques for analysis of computer algorithms, techniques for design of efficient algorithms, description and analysis of both well-established and recently developed algorithms.
The objective of this course is for students to become aware of the appropriateness of algorithms as solutions to given problems, of their efficiency, and to be able to discuss and justify solving techniques. Students will be able to implement algorithms adapted to the problems at hand. They will know how to communicate to team members the features of a given problem along with the solution they propose with its justification.
The syllabus can be found here.
Assignment 1: In any reasonable programming language write the following functions
void multiply_schoolbook(uint32_t *c, const uint32_t *a, const uint32_t *b, size_t n, void (*mul)(uint32_t *h, uint32_t *l, uint32_t a, uint32_t b), void (*add)(uint32_t *h, uint32_t *l, uint32_t a, uint32_t b));
Your function needs to work in any radix beta. Its complexity can be O(n^2).void multiply_faster(uint32_t *c, const uint32_t *a, const uint32_t *b, size_t n, void (*mul)(uint32_t *h, uint32_t *l, uint32_t a, uint32_t b), void (*add)(uint32_t *h, uint32_t *l, uint32_t a, uint32_t b), void (*sub)(uint32_t *h, uint32_t *l, uint32_t a, uint32_t b), int (*cmp)(uint32_t a, uint32_t b));
Your function needs to work in any radix beta. Its complexity needs to be O(n^(log2(3))). You should base your function on the techniques discussed here.Assignment 2 is described in this PDF document. The assignment is due October 2nd, 2023, 05:59MDT. It must be submitted by email to advancedalgorithms@christoph-lauter.org.
Assignment 4 is described in this PDF document. The assignment is based on code and data found here. The assignment is due October 30th, 2023, 05:59MDT. It must be submitted by email to advancedalgorithms@christoph-lauter.org.
Assignment 5 is consists in implementing and testing all functions required for Red-Black Binary Search Trees as stubbed out in the boilerplate section of this archive file. Student can find inspiration by looking at the code for classical (unbalanced) binary search trees, as programmed in class, and provided in the code section of the archive file. Students should test the different functions for correctness thoroughly, which includes testing the red-black properties that make the tree balanced. Students must include a description of their testing strategy, with a comparison of classical and red-black binary search trees, in their submissions (as a text or PDF file). The assignment is due November 5th, 2023, 02:59MST. It must be submitted by email to advancedalgorithms@christoph-lauter.org.
The final exam was on strings and edit lists. A solution for the programming part can be found here.
Copyright (C) 2023 Christoph Lauter