This chapter discusses limitations on algorithmic power and methods for establishing lower bounds on algorithms. It introduces lower bounds as estimates of the minimum amount of work needed to solve a problem. Several methods are presented for establishing lower bounds, including trivial lower bounds based on input/output sizes, decision trees to model comparisons, adversary arguments, and reducing one problem to another with a known lower bound. Examples are given for sorting, searching, and matrix multiplication.