Reverse a list

Peter TB Brett peter.brett at livecode.com
Mon Feb 16 17:36:20 EST 2015


On 2015-02-16 22:02, Mike Kerner wrote:
> I don't think I follow on the first part.  Edinburgh says that the
> complexity of the two traversals are dramatically different.  repeat 
> for
> each is somewhere between nlogn and n, and repeat with is n^2.  At 
> least
> for the case of your squares of integers, I would expect that there is 
> a
> crossover where it's going to be faster to build the list, first.  I 
> don't
> know if that is at 100, 1000, or some bigger number, but n vs. n^2 is a
> very big difference.
> 

You are mistakenly fixating on the "repeat" syntax.  The cost of the 
"repeat with..." form of your loop over lines isn't in the actual repeat 
syntax -- it's what comes before it and what's in the loop body.

     put the number of lines in tData into N -- This chunk op is O(N)
     repeat with i = 1 to N                  -- This is very very cheap
         put line i of tData into tLine      -- This chunk op is O(N) and 
occurs N times
         -- Operate on tLine
     end repeat

Compare with your "printing the squares of integers" example:

     repeat with i = 1 to 100 -- This is very very cheap
         put i*i              -- This is O(1) and occurs N times
     end repeat

The cost is *not* in the repeat form.  The cost is in the chunking 
operations.  The "repeat for each..." form of your loop is faster 
because it requires fewer chunking operations.

                                    Peter

-- 
Dr Peter Brett <peter.brett at livecode.com>
LiveCode Engine Development Team





More information about the use-livecode mailing list