add more algorithm