Re: Re: Eliminating intermediate results
- To: mathgroup at smc.vnet.net
- Subject: [mg91634] Re: [mg91560] Re: Eliminating intermediate results
- From: Ray Koopman <koopman at sfu.ca>
- Date: Sat, 30 Aug 2008 01:51:21 -0400 (EDT)
- Reply-to: Ray Koopman <koopman at sfu.ca>
On Fri, 29 Aug 2008 12:18:19 -0500 danl at wolfram.com wrote: > > In version 6, one could also use built-in IntegerPartitions > for this sort of thing. For the poster's example: > > Total[6! / Apply[Times,Map[Factorial[Length[#]]&,Map[Split, > Map[PadLeft[#,6]&,IntegerPartitions[24,6][[1;;20]]]],{2}],{1}]] > > If desired, one might generate them using Permutations > instead of just counting via factorial. > > Daniel > Yes, in my haste I forgot that the permutations can be counted without actually generating them. This makes it faster and reduces the dependence on k: try[n_,k_] := {Timing@Do[Null,{1*^7}]; Timing@Tr[Length@Permutations@#&/@P[n-k,k]], Timing@Tr[Multinomial@@Length/@Split@#&/@P[n-k,k]], Timing@Tr[k!/Times@@Factorial[Length/@Split@#]&/@P[n-k,k]], Timing[k!*Tr[1/Times@@Factorial[Length/@Split@#]&/@P[n-k,k]]]} (On my system, the timed dummy loop is necessary to keep the first real time honest. See <http://groups.google.ca/group/comp.soft-sys.math.mathematica/msg/1125a9dbeae0d5db>.) try[30,6] {{0.05 Second,118755}, {0.02 Second,118755}, {0.02 Second,118755}, {0.03 Second,118755}} try[30,8] {{0.87 Second,1560780}, {0.01 Second,1560780}, {0.03 Second,1560780}, {0.02 Second,1560780}} try[30,10] {{6.64 Second,10015005}, {0.01 Second,10015005}, {0.03 Second,10015005}, {0.02 Second,10015005}}