To introduce students to language and methods of the area of Discrete Mathematics. The focus of the module is on basic mathematical concepts in discrete mathematics and on applications of discrete mathematics in algortihms and data structures. To show students how discrete mathematics can be used in modern computer science (with the focus on algorithmic applications).
On completion of the module the student should be able to:
- Understand the notion of mathematical thinking, mathematical proofs, and algorithmic thinking, and be able to apply them in problem solving.
- Understand the basics of discrete probability and number theory, and be able to apply the methods from these subjects in problem solving.
- Use effectively algebraic techniques to analyse basic discrete structures and algorithms.
- Understand asymptotic notation, its significance, and be able to use it to analyse asymptotic performance for some basic algorithmic examples.
- Understand some basic properties of graphs and related discrete structures, and be able to relate these to practical examples.
- Introduction to combinatorics: counting techniques, pigeonhole principle, inclusion-exclusion.
- Recurrence relations, solving recurrences using generating functions.
- Master Theorem for solving recurrences.
- Graphs. Basic graph algorithms. Trees. Applications of graphs.
- Applications of linear algebra and matrix algebra in algorithms (e.g., in web searching).
- Algorithmic applications of random processes and Markov chains, for example, cover time in graphs and card shuffling.
- Partitions, enumerations with symmetries.