puddles算法