## Learning Outcomes

At the end of this lecture, you’ll be able to:

- Define what is means by
**comparison-based algorithms**. - Understand and explain what
**lower bounds**are for. - Justify $\Omega(\lg n)$ is the lower bound for comparison-based searching algorithms.
- Justify $\Omega(n \lg n)$ is the lower bound for comparison-based sorting algorithms.
- Identify which comparison-based searching/sorting algorithms are
**optimal**. - Understand and explain how we can beat $\Omega(n \lg n)$ lower bound in
**linear-time sorting algorithms**. - Explain and trace
**Counting sort**,**Bucket sort**, and**Radix sort**, on a given sequence of data. - Justify the time and space complexity of these algorithms in the worst case, based on the data size and data range.

## Lecture Plan

In this lecture, we'll cover the following lessons:

- Lower Bounds: Optimal Solution to Searching/Sorting
- Lower Bounds: Comparison-based Algorithms
- Comparison-based Algorithm: Decision Tree
- Binary Decision Tree⚡
- Binary Decision Tree: Analysis
- Binary Decision Tree: Linearithmic sorts are optimal!
- Linear Sorts: Beating the lower bound
- Counting Sort: Integer sorting
- More Linear Sorts⚡

Lessons marked with ⚡ contain exercise/activity.