## Intermediate Class:The intermediate class is intended for people who can program but are not completely comfortable with algorithms. Ideally, you should attend every lecture as this class follows a curriculum. Held in CS302 from 4:30PM to 6:00PM. ## First Term:- 24/02 - Recursion 1
- 03/03 - Sorting and Searching
- 10/03 - Basic Asymptotic Analysis
- 17/03 - Basic Data Structures and when to use them
- 24/03 - Linked Lists, Stacks and Queues
## Second Term:- 07/04 - Basic Number Theory
- 14/04 - Recursion 2 (and Brute Force)
- 21/04 - Greedy Strategies
- 28/04 - More Advanced Asymptotic Analysis
- 05/05 - Basic DP
- 12/05 - Basic combinatorics
## Third and Fourth Term:More Recurrences, Graph Theory and other odds and ends. |

The advanced class is more interest-based and is intended for people who have a firm grasp of the material covered by the intermediate classes. Lectures are mostly independent of each other, so you can safely choose to attend individual lectures.

Held in CS2A from 4:30PM to 6:00PM.

- 24/02 - Probabilistic Algorithms: Quickly checking whether a number is prime with a high certainty and others.
- 03/03 - Sorting: Basic sorts, Proof that comparison sorting is O(nlogn) and other types of sorts.
- 10/03 - Advanced Sorting Continued
- 17/03 - Heaps: A quick rehash of the basics to Fibonacci and Min-Max Heaps.
- 24/03 - Collision Detection: Narrow Phase and Broad Phase algorithms.

- 07/04 - Succint Data Structures: A space and time efficient way to represent tries, binary tree and more.
- 14/04 - Lambda Calculus: A basic functional model of computation.
- 21/04 - Markov Chains: Generating text using statistical modeling.
- 28/04 - Computational Models: From the well-known Turing Machine and more.
- 05/05 - Cache Aware and Cache Oblivious Algorithms: Different techniques algorithms use to make use of the cache to maximise performance.
- 12/05 - Natural Language Processing: Teaching computers to communicate with us.

TBA - If you have any topics that you would be interested in being covered please email admins@algorithm.cs.uct.ac.za with your ideas.

Sometimes the topics we want to teach don't fit into the format of a weekly 90 minute class. This semester we're planning to hold a Haskell course. Haskell is a functional programming language, making it fundamentally different from many other languages which you are likely to have used (Java, Python and C++).

We have tentatively scheduled the course over two Saturdays: the 5th and 19th of March. With 2 weeks in between to give you time to practice the material from the first section of the course.

If you're interested in the course but can't make the given days, please email admins@algorithm.cs.uct.ac.za and we'll see if we can make a plan.