|
Boost : |
Subject: Re: [boost] combinations and permutations
From: Howard Hinnant (howard.hinnant_at_[hidden])
Date: 2011-01-05 09:37:12
On Jan 5, 2011, at 4:40 AM, Arash Partow wrote:
> On 4/01/2011 2:40 PM, Howard Hinnant wrote:
>> Warming this up for tr2:
>>
>> http://home.roadrunner.com/~hinnant/combinations.html
>>
>> Comments welcome. Real world use welcome.
>>
>
> Have you considered this as the implementation for the combinations routine:
This looks very similar to the next_combination I'm comparing to in the paper.
-Howard
>
> template <typename Iterator>
> inline bool next_combination(const Iterator first, Iterator k, const Iterator last)
> {
> /* Credits: Thomas Draper */
> if ((first == last) || (first == k) || (last == k))
> return false;
> Iterator itr1 = first;
> Iterator itr2 = last;
> ++itr1;
> if (last == itr1)
> return false;
> itr1 = last;
> --itr1;
> itr1 = k;
> --itr2;
> while (first != itr1)
> {
> if (*--itr1 < *itr2)
> {
> Iterator j = k;
> while (!(*itr1 < *j)) ++j;
> std::iter_swap(itr1,j);
> ++itr1;
> ++j;
> itr2 = k;
> std::rotate(itr1,j,last);
> while (last != j)
> {
> ++j;
> ++itr2;
> }
> std::rotate(k,itr2,last);
> return true;
> }
> }
> std::rotate(first,k,last);
> return false;
> }
>
>
> Sourced from: http://marknelson.us/2002/03/01/next-permutation/
>
> _______________________________________________
> Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk