An algorithm is a set of instructions used to solve a problem. Good algorithms have key qualities: Inputs must be clearly defined, must always produce a valid output, must deal with invalid inputs, must always reach a stopping condition, must be well-documented for reference, must be well-commented for easy modifications