Stable partition3 implementation
Xinok via Digitalmars-d
digitalmars-d at puremagic.com
Fri Jul 10 17:55:09 PDT 2015
On Saturday, 11 July 2015 at 00:00:47 UTC, Andrei Alexandrescu
wrote:
> On 7/9/15 5:57 PM, Xinok wrote:
>> ...
>>
>> Any thoughts?
>
> I'd say both would be nice (not to mention the one in the
> paper) so how about both are present selectable with a policy
> ala Yes.tightMemory or something. -- Andrei
I'm hesitant to add yet another template parameter; IMHO, it's
bad enough that we have to manually write the predicate just to
reach the swap strategy.
There's a fourth option I didn't think to mention. It's easy to
utilize a small buffer which would be used to partition small
sublists instead of insertions. partition3 would not allocate
it's own memory so would be in-place by default, but the user
could provide their own buffer and pass it as an extra function
argument. For example:
int[] arr = iota(0, 100000).array;
int[] buf = new int[100];
partition3!(...)(arr, 1000, buf);
Interestingly, for some constant k, if you implement this
algorithm to use O(n/k) space, then it runs in O(n lg n) time
because it performs at most O(lg k) rotations.
Regarding the algorithm in the paper, I don't have it completely
figured out yet because it refers to algorithms in other papers
which I can't find.
More information about the Digitalmars-d
mailing list