Use ArrayList for candidate storage (should bemore memory friendly).
Use a cache for results (much lower memory usage).
Allow different deformation bounds for each round.