Pattern recognition techniques