Re: combinatorics problem
- To: mathgroup at smc.vnet.net
- Subject: [mg7569] Re: [mg7514] combinatorics problem
- From: daiyanh at mindspring.com (Daitaro Hagihara)
- Date: Sun, 15 Jun 1997 16:32:51 -0400 (EDT)
- Sender: owner-wri-mathgroup at wolfram.com
Your case is confirmed on my version 2.2. Though it's not my experience,
I came up with a workaround, i.e., by transforming the set before Union.
transformStandard[x_List]:=
Block[{len=Length[x],small=Min[x],pos},
pos=Position[x,small][[1,1]];
If[x[[1+Mod[pos-2,len]]]>x[[1+Mod[pos,len]]],
RotateLeft[x,pos-1],
Reverse[RotateRight[x,len-pos]]]]
Union@(transformStandard/@{{2,1,3,4},{3,4,1,2},{3,4,2,1}})
--> {{1, 2, 3, 4}, {1, 2, 4, 3}}
It's clearer to see. You can optimize and improve the code as necessary.
I'm not quite all that sure as to how Union behaves against a supplied
test function after fooling around with it. It's extremely complicated,
I guess. The answer to the last question for the case of n=4 is, thus,
Union@(transformStandard/@Permutations[Range[4]])
--> {{1, 2, 3, 4}, {1, 2, 4, 3}, {1, 3, 2, 4}},
that is 3 ways out of possible 4!=24 choices. From other experiments for
different n, I get (n-1)!/2 for n>2. The aftermath is, divide n! by n
(invariant under shifts) and by 2 (invariant under reversal).
Daitaro Hagihara