add a new algorithm , need to improve