scratch算法