An algorithm has three characteristics:

  • Has a finite description of a computation in terms of elementary instructions
  • Is a deterministic procedure: next step is uniquely defined
  • Always produces a result no matter the input (i.e. halts)