pattern-recognition algorithms