MathGroup Archive 1999

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: How to construct all possible orderings

  • To: mathgroup at smc.vnet.net
  • Subject: [mg15648] Re: [mg15588] How to construct all possible orderings
  • From: Andrzej Kozlowski <andrzej at tuins.ac.jp>
  • Date: Sat, 30 Jan 1999 04:28:43 -0500 (EST)
  • Sender: owner-wri-mathgroup at wolfram.com

There are lots of ways to do this using Outer and List. For example this
function

arrange[l_List,k_]:=Flatten[Outer[List,Apply[Sequence,Table[l,{k}]]],k-1]

will list all arranements with repetitions of k objects our of the list
l.

In[28]:=
arrange[{a,b,c},3]

Out[28]=
{{a,a,a},{a,a,b},{a,a,c},{a,b,a},{a,b,b},{a,b,c},{a,c,a},{a,c,b},{a,c,c},{b,a,
   
a},{b,a,b},{b,a,c},{b,b,a},{b,b,b},{b,b,c},{b,c,a},{b,c,b},{b,c,c},{c,a,
    a},{c,a,b},{c,a,c},{c,b,a},{c,b,b},{c,b,c},{c,c,a},{c,c,b},{c,c,c}}


There is also an "illegal" (meaning strongly discouraged by wri) way of
solving many such problems, which personally I rather like. You first
clear the Orderless attribute in Times.

ClearAttributes[Times, Orderless]

Next, note that if you simply evaluate

In[29]:=
Expand[(a+b+c)^3]
Out[29]=
                 2                      2        2      2 a b a + c b a
+ b  a + a c a + b c a + c  a + b a  + c a  + 
 
   3                    2                      2        2
  a  + b a b + c a b + a  b + a c b + b c b + c  b + a b  + 
 
     2    3                    2                      2
  c b  + b  + b a c + c a c + a  c + a b c + c b c + b  c + 
 
     2      2    3
  a c  + b c  + c

you have essentially got your answer. If you want to get it in the usual
form you can do something like

In[30]:=
Expand[(a+b+c)^3]/.{Plus->List,Times->List,
    Power[x_,n_]:>Apply[Sequence,Table[x,{n}]]} Out[30]=
{{a, b, a}, {c, b, a}, {b, b, a}, {a, c, a}, {b, c, a}, 
 
  {c, c, a}, {b, a, a}, {c, a, a}, a, a, a, {b, a, b}, 
 
  {c, a, b}, {a, a, b}, {a, c, b}, {b, c, b}, {c, c, b}, 
 
  {a, b, b}, {c, b, b}, b, b, b, {b, a, c}, {c, a, c}, 
 
  {a, a, c}, {a, b, c}, {c, b, c}, {b, b, c}, {a, c, c}, 
 
  {b, c, c}, c, c, c}

The reason why this is discouraged is that users ar enot supposed to
change attributes of basic functions like Times. One can, this sort of
thing quite legitimatley using the Non-commutative algebra package
available from MathSource, or define your own NonCommutativeExpand.

On Thu, Jan 28, 1999, Carlos Carreto <ccarreto at ipg.pt> wrote:

>Hello,
>
>I am trying to construct all possible orderings  of  for example 3
>elements, where each element can be A, B or C.
>
>The result will be something like this: AAA
>AAB
>AAC
>ABA
>. . .
>CCC
>
>How can I do this? 
>
>Thank you.
>
>-:- Carlos
>
>


Andrzej Kozlowski
Toyama International University
JAPAN
http://sigma.tuins.ac.jp/
http://eri2.tuins.ac.jp/



  • Prev by Date: Re: question
  • Next by Date: Re: D vs. Derivative
  • Previous by thread: RE: How to construct all possible orderings
  • Next by thread: BesselK