Least Squares algorithm