About ranges and iterators again: implementing next_permutation
Max Klyga
max.klyga at gmail.com
Sun Jul 10 14:13:02 PDT 2011
Several weeks ago Andrei mentioned at #d irc channel that he wanted to
implement next_permutation STL function in Phobos.
I thought that would be a nice excercize to implement it myself.
I ported implementation mentioned in this article:
http://marknelson.us/2002/03/01/next-permutation/
At first it seemed trivial, but i failed to preserve the same
constraints that STL implementation requires while preserving same
efficiency.
A straightforward port using random access ranges and indeces as
iterators: http://pastie.org/2193659
I tried to implement the same algorithm for bidirectional ranges, but
it is obviously slower, because i have to shrink range's left side all
the way, while iterators have a very nice ability: two iterators make a
range on which algorithms can operate. This is imposible with ranges.
At least I haven't found a way to do it.
An attempt to implement next_permutation for biderectional ranges:
http://pastie.org/2193686
This implementation runs about 2-2.5 times slower on my machine.
I think it's a nice challenge for D community to try to adapt this
algorithm for ranges, allowing it be as fast and as generic as STL
version.
More information about the Digitalmars-d
mailing list