Re: A friendly challenge: Generalized Partition
- To: mathgroup at smc.vnet.net
- Subject: [mg34905] Re: [mg34858] A friendly challenge: Generalized Partition
- From: Andrzej Kozlowski <andrzej at platon.c.u-tokyo.ac.jp>
- Date: Wed, 12 Jun 2002 02:15:41 -0400 (EDT)
- Sender: owner-wri-mathgroup at wolfram.com
Here is my first (and only) attempt, which probably does not quite match yours but comes close enough (considering the amount of time I can spare for this). kk[ls_, t_] := With[{w = FoldList[Plus, 0, t]}, Map[Take[ls, #] &, Transpose[{Drop[w, -1] + 1, Rest[w]}]]] Tests on my 400 mghz PowerBook G4: In[3]:= a = Range[2000]; In[4]:= b = Table[Random[Integer, {1, 20}], {150}]; In[5]:= First[Timing[Do[gg[a, b], {100}]]] Out[5]= 6.24 Second In[6]:= First[Timing[Do[kk[a, b], {100}]]] Out[6]= 0.35 Second Since gg was somewhat faster than on your machine I assume that my kk is slower than your function. Andrzej On Tuesday, June 11, 2002, at 06:00 PM, Mr. Wizard wrote: > In the 4.1 help browser, in Further Examples under Take, there is code > for a generalized partition function, called gg. This code is > somewhat long and extremely slow. I challenge you to duplicate the > functionality of this code (ignoring the ggCheckArgs condition), while > making it 1) as sort as possible, and/or 2) as fast as possible. > > Your function must be in good form, leaving no stray assignments, i.e. > using the appropriate scoping construct(s). > > For efficiency testing, I will use (where func is your function): > > a = Range[2000]; > b = Table[Random[Integer, {1, 20}], {150}]; > First[Timing[Do[func[a, b], {100}]]] > > I will post my versions after a little while. For reference, on my > machine, the function from the help files, omitting the ggCheckArgs > condition, takes 8 seconds; my fastest version takes 0.33 seconds. My > shortest version is 44 characters in length, and takes 0.94 seconds. > > Good luck! > > Paul > > > > Andrzej Kozlowski Toyama International University JAPAN http://platon.c.u-tokyo.ac.jp/andrzej/