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}}