Services & Resources / Wolfram Forums
-----
 /
MathGroup Archive
1996
*January
*February
*March
*April
*May
*June
*July
*August
*September
*October
*November
*December
*Archive Index
*Ask about this page
*Print this page
*Give us feedback
*Sign up for the Wolfram Insider

MathGroup Archive 1996

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Re: functional code

  • To: mathgroup at smc.vnet.net
  • Subject: [mg4850] Re: [mg4814] Re: functional code
  • From: Allan Hayes <hay at haystack.demon.co.uk>
  • Date: Thu, 26 Sep 1996 22:42:13 -0400
  • Sender: owner-wri-mathgroup at wolfram.com

At the risk of producing more C-like code (!), here is a further  
speed up together with a speed comparison with my code used in Bob  
Hall's list --attached. The omission of the n, which accounts for  
2/3 of the sped-up, was posted a few hours ago.

The message seems to be:
	be aware of all of Mma's programming styles and make use of 	
	special features of the problem.

(*my original code called "hayes" in Robert Hall's list -- attached*)
 try1[row_List] :=
   Block[{f=1,l = Length[row]},
      Table[If[row[[f]]>row[[l]], row[[f++]], row[[l--]]],{n,l}]
   ]

(*latest code*)
 try2[row_List] :=
   Block[{f=1,l = Length[row]},
      row[[Table[If[row[[f]]>row[[l]], f++, l--], {l}]]]
   ]

(*timings*)

testrow = Table[Random[],{5000}];

(ans1 = try1[testrow]);//Timing
	{4.98333 Second, Null}
(ans2 = try2[testrow]);//Timing
	{3.55 Second, Null}

(*check*)
ans1==ans2
	True
	
Allan Hayes
hay at haystack.demon.co.uk

**************
Bob Hall's posting of timings

Here's the times for the various solutions to Richard Gaylord's problem:

In[90]:=
   original[row]
Out[90]=
   {0.7 Second, Null}

In[92]:=
   gaylord[row]
Out[92]=
   {2.51667 Second, Null}

In[94]:=
   hall[row]
Out[94]=
   {3.63333 Second, Null}

In[96]:=
   abbott1[row]
Out[96]=
   {1.03333 Second, Null}

In[98]:=
   abbott2[row]
Out[98]=
   {1.13333 Second, Null}

In[100]:=
   hayes[row]
Out[100]=
   {0.116667 Second, Null}

The most obvious algorithm, using iteration rather than recursion
(original, hayes, and the 2 abbotts,) was the fastest. The most
C-like code was the fastest (hayes.) My code was the least intuitive, 
probably the hardest to debug, and the slowest. Oh well....
   "I can't hope to be First[], so let me be Last[]."
         -Auden, The Age of Anxiety


--
Bob Hall            | "Know thyself? Absurd direction!
rhall2 at gl.umbc.edu  |  Bubbles bear no introspection."  -Khushhal  
Khan Khatak


==== [MESSAGE SEPARATOR] ====


  • Prev by Date: Re: Peter Coffee article
  • Next by Date: Using Mma with Visual Basic & Visual C++
  • Previous by thread: Re: functional code
  • Next by thread: functional code