monomials in Graded Lexicographic Order and associated factorials

*To*: mathgroup at smc.vnet.net*Subject*: [mg73787] monomials in Graded Lexicographic Order and associated factorials*From*: "er" <erwann.rogard at gmail.com>*Date*: Wed, 28 Feb 2007 04:37:43 -0500 (EST)

hi, i just want to share my code below and ask for any suggestion to speed up the function FactorialList below, which takes up about as much time to complete as PowerList, mostly due to function aux. storing a table of values to avoid repeated computation seems to be the easiest solution. however, i'm hoping to avoid that, perhaps by exploiting the particular GLO structure. thanks. here's the usage i'm interested in: "PowerList[GDO,max,{x1,...,xD}] returns { {{x1\^p1*...*xD^pD:|p|=q},q=0,...,max } where |p|=p1+...+pD; FactorList[GDO,D,max] returns the corresponding mv-factorial terms: { {p1!*...*pD!:|p|=q},q=0,...,max }", e.g. In[1] := PowerList[GLO, 2, {a, b, c}] FactorialList[GLO, d, 2] Out[2] = {{1}, {a, b, c}, {a ^ 2, a b, a c, b^ 2, b c, c^ 2}} Out[2] = {{1}, {1, 1, 1}, {2, 1, 2, 1, 1, 2}} code: GLO/:PowerList[GLO,0,vars_]:={{1}}; GLO/:PowerList[GLO,p_,vars_]:=With[{rev=Reverse[vars]}, Join[{{1}}, Flatten/@Map[Reverse, NestList[rev*Flatten/ @foldList[#]&,List/@rev,p-1],2]] ]; GLO/: FactorialList[GLO,d_,p_]:=Map[Times@@Factorial[#]&,aux[d,p],{2}];