Re: Challenge! ....RESULTS...
- To: mathgroup at christensen.cybernetics.net
- Subject: [mg1128] Re: Challenge! ....RESULTS...
- From: roth at sunny.mpimf-heidelberg.mpg.de (Arnd Roth)
- Date: Wed, 17 May 1995 02:09:12 -0400
- Organization: Max-Planck-Institut fuer Medizinische Forschung
In article <3olujj$ql4 at news0.cybernetics.net> jorma.virtamo at vtt.fi (Jorma Virtamo) writes: > roth at sunny.mpimf-heidelberg.mpg.de. (Arnd Roth) wrote: > > >... > > >Villegas' function 3 villegas at wri.com > >In[17]:= > >swap[list1_List, list2_List] := Thread @ > >Unevaluated[If[Random[Integer] == 0, #1, #2]& [list1, list2]] > >In[18]:= Timing[Do[swap[l1,l2],{1000}]] > >Out[18]= {1.44 Second, Null} > > > >So Robby Villegas' function 3 is fastest among the solutions I > >tested. But of course there may still be room for further > >speedup. > > Indeed, by writing the argument lists directly into the If function, > > swap[list1_List, list2_List] := Thread @ > Unevaluated[If[Random[Integer] == 0, list1, list2]] > > the execution speeds up in my Pentium to 1.483 Second > in contrast to 2.471 Second with the original form. > > -- Jorma Virtamo Here is a solution which is still faster: silia% math Mathematica 2.2 for Solaris Copyright 1988-94 Wolfram Research, Inc. License valid through 30 Jun 1995. -- Open Look graphics initialized -- In[1]:= l1 = {a,b,c,d,e,f,g,h,i,j}; In[2]:= l2 = {A,B,C,D,E,F,G,H,I,J}; Jorma Virtamo's function jorma.virtamo at vtt.fi In[3]:= swap[list1_List, list2_List] := Thread @ Unevaluated[If[Random[Integer] == 0, list1, list2]] In[4]:= Timing[Do[swap[l1,l2],{1000}]] Out[4]= {1.09 Second, Null} In[5]:= SetAttributes[Thread, HoldFirst] In[6]:= swap[list1_List, list2_List] := Thread[If[EvenQ[Random[Integer]], list1, list2]] In[7]:= Timing[Do[swap[l1,l2],{1000}]] Out[7]= {1.01 Second, Null} In[8]:= Exit[] silia% Arnd Roth Abteilung Zellphysiologie Max-Planck-Institut fuer Medizinische Forschung Postfach 10 38 20, D-69028 Heidelberg, Germany http://sunny.mpimf-heidelberg.mpg.de/people/roth/ArndRoth.html