应该有更好的算法