w00t. Remember that algorithm where the easy implementation ate 5gb RAM? (Actually, I've increased the scope since then - the easy implementation would eat 10gb now.) It's down to 40mb peak during initialization, and 20mb during the main calculation phase, and I've still got more to do.
Plus it's at least an order of magnitude faster - in the time it used to take it to run the initialization on the first task, the new version had *completed* the first *four* tasks.