Speed up a slow loop

Bob Sneidar bobsneidar at iotecdigital.com
Sun Mar 6 21:17:18 EST 2022


You people are too smart for me. 

Sent from my iPhone

> On Mar 6, 2022, at 07:41, William Prothero via use-livecode <use-livecode at lists.runrev.com> wrote:
> 
> Folks:
> I've been following this thread in wonder at the creative ways of optimizing this word search. I hope that the code will be published somewhere, available to all, with credits to the multiple idea authors.
> 
> Kudos and congratulations to those who offered such creative and thoughtful ideas. I'm awed!
> 
> Bill
> 
> William A. Prothero, PhD
> Prof Emeritus, Dept of Earth Science
> University of California, Santa Barbara
> 
>> On Mar 6, 2022, at 5:33 AM, Alex Tweedly via use-livecode <use-livecode at lists.runrev.com> wrote:
>> 
>> 
>>>> On 06/03/2022 06:35, J. Landman Gay via use-livecode wrote:
>>> 
>>> Combined with Ken's suggestion to use "difference", looking up a list of about 50 words in the filtered dictionary reduces the time from 2-4 seconds to about 40 ms. It varies, depending on a lot of things, but it's fast enough that you don't notice. That's on my Pixel 5; on the Mac a lookup takes 5ms. And I can do it all in LC script.
>>> 
>> 5ms !?!
>> 
>> I did a (very simple) test  (see code below)
>> 
>> - take the whole sowpods.txt file (267k words)
>> 
>> - create a set (i.e. split by CR as set)
>> 
>> - look up 50 randomly chosen words + 5 non-words (just in case failed searches were expensive).
>> 
>> Doing this 100 times takes 6-10 ms (on an old MacBook Pro).
>> 
>> Could you maybe post the code that you're using that takes 5ms ?
>> 
>>> I love these little speed contests we have here. Thank you.
>>> 
>> Alex.
>> 
>>> 
>>> on mouseup
>>>   local tmp, tNumberOfLines, tNumberOfLoops
>>>   local tWords, tAWords, tTries
>>> 
>>>   put the cWords of me into tWords
>>>   if tWords is empty then
>>>      put URL ("file:" & specialfolderpath("resources") & "/sowpods.txt") into tWords
>>>      set the cwords of me to tWords
>>>      put "From file" &CR into fld "F"
>>>   else
>>>      put "using custom property" &CR into fld "F"
>>>   end if
>>> 
>>>   put tWords into tAWords
>>>   split tAWords by CR as set
>>> 
>>>   repeat with I = 1 to 50
>>>      put random(the number of lines in tWords) into tmp
>>>      put line tmp of tWords &CR after tTries
>>>   end repeat
>>>   repeat with I = 1 to 5
>>>      put "azazaz" &Cr after tTries
>>>   end repeat
>>> 
>>>   put 100 into tNumberofLoops
>>> 
>>>   local t1, t2, tCount, tTotal
>>> 
>>>   --   put the millisecs into t1
>>>   --   repeat tNumberOfLoops times
>>>   --      put 0 into tCount
>>>   --      repeat for each line L in tTries
>>>   --         if L is among the lines of tWords then add 1 to tCount
>>>   --      end repeat
>>>   --   end repeat
>>>   --   put the millisecs into t2
>>>   --   put tCOunt && "iterate lines" && t2-t1 &CR after fld "F"
>>> 
>>>   put the millisecs into t1
>>>   repeat tNumberOfLoops times
>>>      put 0 into tCount
>>>      put 0 into tTotal
>>>      repeat for each line L in tTries
>>>         add 1 to tTotal
>>>         if tAWords[L] then add 1 to tCount
>>>      end repeat
>>>   end repeat
>>>   put the millisecs into t2
>>>   put tCount && "of" && tTotal && "each element" && t2-t1 &CR after fld "F"
>>> 
>>> 
>>> end mouseup
>> 
>> 
>> _______________________________________________
>> use-livecode mailing list
>> use-livecode at lists.runrev.com
>> Please visit this url to subscribe, unsubscribe and manage your subscription preferences:
>> http://lists.runrev.com/mailman/listinfo/use-livecode
> 
> 
> _______________________________________________
> use-livecode mailing list
> use-livecode at lists.runrev.com
> Please visit this url to subscribe, unsubscribe and manage your subscription preferences:
> http://lists.runrev.com/mailman/listinfo/use-livecode


More information about the use-livecode mailing list