range chunks

Peter Alexander peter.alexander.au at gmail.com
Sat Aug 7 06:16:44 PDT 2010


On 7/08/10 7:57 AM, bearophile wrote:
> Peter Alexander:
>> Yeah, partition has always meant that to me as well.
>
> Probably you come from a quite different part of computer science (The example I have shown from Mathematica is not the only one).
> What are the usages of that algorithm, beside being used in the QuickSort?

It's used a fair amount in geometry. I know the Kirkpatrick-Seidel 
algorithm uses it and I've seen some Delaunay triangulation 
implementations use it. I'm pretty sure there's other geometrical 
applications for it as well.

Outside of specific algorithms, I think partition is quite a neglected 
algorithm, because people typically just use sort, even when partition 
would be more suitable. For example, consider some distribution service 
that distributes some product to premium customers first, followed by 
regular customers. Really, that's a job for partition, but in practice 
your average Joe coder would just sort based on the same predicate, 
wasting a factor of O(lg(n)). Either that or they'd just iterate over 
the sequence twice: once for premium, and a second time for regular.

I think the main argument for calling it that is because it is called 
that by almost all computer science literature. Do a Google search for 
quick sort pseudocode. Almost invariably you'll find that they'll define 
a helper function called partition, so programmers have come to learn 
that that's what partition does.

(I just Googled for "quicksort pseudocode" and sure enough, all of the 
top 10 entries that actually contained code defined a partition function 
that does what std.algorithm.partition does).



More information about the Digitalmars-d mailing list