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