function for greatest object in list less than or equal to a value
Peter TB Brett
peter.brett at livecode.com
Tue Oct 13 09:53:20 EDT 2015
Hi Hermann,
There's no array bug -- it's an aspect of its intentional behaviour.
Appending to an element of an array always causes a copy, so you get
O(N^2) complexity.
Please re-test in LiveCode 8.0.0-dp-7, because there are some large
performance optimisations in that release that may affect these results.
In particular, I expect anything that uses "put after" outside an
array to be much faster, and anything that uses sort to be faster (if I
remember correctly). This Week in LiveCode has links to the pull
requests, which explain exactly what's been made faster.
Peter
On 13/10/2015 14:42, hh wrote:
> Similar things are useful for a very specialized statistical
> evaluation I have to do soon, so I tested again with LC 7:
>
> There is an interesting difference between LC versions 6 and 7.
>
> The 'direct way' of GC reveals now as clearly fastest.
>
> Tested with one of GC's 12 MB strings on a Mac mini(i5 2.5 GHz),
> testString() as below, and a critical value of v=500000000.
> The (correct) result is 499999246, used time is in seconds.
>
> [a] LC 6.7.7
> repeat-PMB 0.326 <- fastest
> repeat-GC 0.350
> repeat-hh 0.445
> sort-GC 0.985
>
> [b] LC 7.1.0
> repeat-PMB 3.562
> repeat-GC 1.483 <- fastest, the only one with a factor < 9
> repeat-hh 1163.0 <- an ARRAY BUG? :-(
> sort-GC 8.156
>
> -------------------
>
> function testString
> set randomseed to 1444826515
> -- so you'll get exactly my test string
> repeat 1000000
> put comma & random(1000000000) after L
> end repeat
> delete byte 1 of L
> return L
> end testString
>
> function repeatPMB L,v --[1]
> repeat for each item i in L
> if i < v then put comma & i after outL
> end repeat
> return max(outL)
> end repeatPMB
>
> function repeatGC L,v --[2]
> put empty into R
> repeat for each item i in L
> if i < v and i > R then put i into R
> end repeat
> return R
> end repeatGC
>
> function repeathh L,v --[3]
> repeat for each item i in L
> put comma & i after z[i < v]
> end repeat
> return max(z[true])
> end repeathh
>
> function sortGC L,v --[4]
> sort items of L descending numeric
> sort items of L by (each >= v)
> return item 1 of L
> end sortGC
>
>
> _______________________________________________
> 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
>
--
Dr Peter Brett <peter.brett at livecode.com>
LiveCode Open Source Team
LiveCode on reddit: https://reddit.com/r/livecode
More information about the use-livecode
mailing list