{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "0ce1e285",
   "metadata": {},
   "source": "# Algorithms\n\n<!-- chapter-intro -->\n\nAn algorithm is a step-by-step procedure for solving a problem. This chapter covers the two most fundamental algorithmic tasks — **searching** and **sorting** — and the mathematical framework used to compare their efficiency."
  },
  {
   "cell_type": "markdown",
   "id": "306adf68",
   "metadata": {},
   "outputs": [],
   "source": "<h2>Why this chapter matters</h2>\n\nKnowing an algorithm's behavior under different inputs separates guessing from engineering:\n\n- linear search is simple but slow for large sorted data\n- binary search cuts the problem in half with every comparison\n- sorting algorithms trade simplicity for speed depending on input size\n- Big-O notation gives a hardware-independent language for comparing algorithms"
  },
  {
   "cell_type": "markdown",
   "id": "01333b69",
   "metadata": {},
   "outputs": [],
   "source": "<h2>Learning goals</h2>\n\nBy the end of this chapter, you should be able to:\n\n- implement and compare linear and binary search\n- trace through bubble, selection, and insertion sort\n- explain what O(N), O(N log N), and O(N²) mean\n- measure and interpret actual runtime performance\n\n<h2>Chapter flow</h2>\n\n```{tableofcontents}\n```\n"
  }
 ],
 "metadata": {
  "language_info": {
   "name": "python"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
