Re: All permutations of a sequence
- To: mathgroup at smc.vnet.net
- Subject: [mg76216] Re: All permutations of a sequence
- From: Jean-Marc Gulliet <jeanmarc.gulliet at gmail.com>
- Date: Fri, 18 May 2007 06:02:59 -0400 (EDT)
- Organization: The Open University, Milton Keynes, UK
- References: <f2h8t7$v4$1@smc.vnet.net>
Virgil Stokes wrote:
> I would like to get all unique permutations of a sequence (e.g.
> {1,2,3,4,5,6,7,8,9,10,11,12,13}) with the constraint that all sequences
> that have an opposite ordering are not included (e.g. {13, 12,
> 11,10,9,8,6,5,4,3,2,1}) would not be included.
>
> Are there some Mathematica commands that can be used to efficiently
> generate these permutations?
>
> --V. Stokes
Hi Virgil,
Assuming that I have correctly understood your request, the following
code should do what you are looking for. (Note that the function is
recursive. You may have to adjust the system parameter $RecursionLimit
to a higher value than the default of 256. Also, if the list is large,
this approach can become quickly inefficient).
In[1]:=
mySearch[l_List] :=
Module[{e = First[l], r = Rest[l]},
Sow[e]; mySearch[DeleteCases[r,
x_ /; x == Reverse[e]]]; ] /; Length[l] > 1
lst = {1, 2, 3, 4, 2};
<< "DiscreteMath`Combinatorica`"
p = DistinctPermutations[lst];
q = Reap[mySearch[p]][[2,1]];
{Length[p], Length[q], Sort[p] == Sort[Join[q, Reverse /@ q]]}
Out[6]=
{60, 30, True}
Regards,
Jean-Marc