An interesting problem

Paul Orrock paulo at digitalcraftsmen.net
Thu Jan 4 10:25:45 GMT 2007


Thanks everyone for your input. I wrote a script to brute force it using 
Spreadsheet::Perl and summing every possible range. I've attached a 
sample sheet. As you can see there are large blocks of zero values so 
I've managed to cut it down quite a lot by working out where the first 
and last point of non zero data are and just iterating over the blocks 
between them. In the attached dataset this means it only works over the 
ranges between U11 to BC55.

It works but it is incredibly slow, like over a hour for 650,000 ranges 
on a P4. I'm sure the Spreadsheet::Perl range sum calculation is taking 
the time so I'll rip it out and write one myself. For the attached sheet 
my code makes AH34 to AP32 the most positive range at 97.57.

McGlinchy, Alistair wrote:
>> I think that the previous mention of a 2D autocorrelation will be  
>> good to explore, but you can use the "moving average" trick to avoid  
>> lots of extra cycles while summing neighborhoods.  I've implemented  
>> this in C before and gotten speedups of 1x to 50x, depending on the  
>> neighborhood size.
> 
> Aye, That's the trick. Run time from 10 mins to 16secs for the 30x100
> case. Great fun!

Wow, that's a big difference.

> Code available if anyone else was interested.

Yes please,

regards,

Paul


More information about the london.pm mailing list