[OT] n-way union

Frits van Bommel fvbommel at REMwOVExCAPSs.nl
Tue May 26 08:27:46 PDT 2009


Andrei Alexandrescu wrote:
> Jason House wrote:
>> This conversation made me realize a simple optimization (forgive me
>> if it's what Don was implying)
>>
>> Instead of storing m ranges in a heap, store only m-1 ranges. The
>> range that would be the min if the heap is kept separate. Each pop
>> operation will compare the new front with the min heap element. This
>> allows avoiding the re-heaping when the next element comes from the
>> same range. If s is the number of times the source range must switch,
>> then the performance is O( s*log(m) + n - s). The initial heaping is
>> O(m*log(m)), but that's never worse than O(s*log(m)).  Technically,
>> the re-heaping steps are log(m-1), but that isn't important with big
>> O.
> 
> Cool! That can actually be implemented as a micro-optimization with the 
> classic heap: right after you extract from the top (arr[0]), you look at 
> its children (which are arr[1] and arr[2]). If both front()'s are still 
> no less than yours, everything stays as it was and you're home free.
> 
> I'll implement this, thanks.

If you keep it separate, you only need one comparison to determine the current 
range still contains the minimum element.
Just saying :).



More information about the Digitalmars-d mailing list