This document discusses algorithms and their analysis. It defines an algorithm as a well-defined computational procedure that takes inputs and produces outputs. Examples of algorithms include procedures for returning web pages with keywords and various sorting algorithms. The document emphasizes the importance of analyzing algorithms for correctness and efficiency. It introduces pseudocode as a way to describe algorithms at a high level. The analysis focuses on determining the worst-case number of primitive operations like assignments and comparisons as a function of the input size using the random access machine model of computation. Counting the operations provides a way to evaluate an algorithm's speed independently of hardware.