### Overview

This course discusses the design and analysis of algorithms. It insists on important paradigms in algorithm design, illustrating the ideas through many examples and introducing data structures when needed. As much as possible, the examples will be implemented in Python, with which the students will experiment.

The provisional organisation is as follows:

Week 1: Overview and Basics

Part I. Divide and Conquer (Weeks 2--5)

Part II. Randomization (Weeks 6--8)

Part III. Amortization, balancing (Weeks 9--10)

Examples: string algorithms (Weeks 11--12)

Part IV. P vs NP (Weeks 13--14)

Week 15. Context