RE: Sequence Slicing (Was RE: Tough ciphers?)

new topic     » goto parent     » topic index » view thread      » older message » newer message

I should point out, that using sequences of length < 200, range_find() 
is drastically slower. Using 200 elements or less, range_find() clocks 
in at 2 seconds. It doesn't seem to drop less than 2 secs.
fastest time I got for find() was 0.68 using 10 elements.

Chris

bensler at mail.com wrote:
> If I did my test correctly, and you're repetitively searching slices of 
> a sequence, yes.
> 
> Because of your question, I did a bit of further testing. I've 
> discovered, the turning point between the benefit of find() vs 
> range_find() is somewhere between 200 to 300 elements.
> 
> At 300 elements, iterated 1000000/fl times, range_find() beats find() 
> with 2.09 vs 2.58 consistently. The higher the number of elements, the 
> larger the difference.
> 
> I haven't tested with nested sequences, or sequences with varied data.
> 
> Here are both complete tests:
> <CONTROL TEST>
> constant fl=300
> integer fn
> fn = open("words.txt","rb")
> 
> sequence temp     temp = repeat(0,fl)
> 
> for i = 1 to fl do
>    temp[i] = getc(fn)
> end for
> 
> close(fn)
> 
> atom t   t=time()
> integer count  count = 0
> integer f,found
> for i = 1 to 10000000/fl do
> f=1
> found=find('\n',temp)
> while found != 0 do
>    count +=1
>    f +=found
>    found = find('\n',temp[f..length(temp)])
> end while
> end for
> 
> ? f
> ? count
> ? time()-t
> while get_key()=-1 do end while
> <END CONTROL TEST>
> 
> <range_find() TEST>
> constant fl = 300
> integer fn
> fn = open("words.txt","rb")
> 
> sequence temp     temp = repeat(0,fl)
> 
> for i = 1 to fl do
>    temp[i] = getc(fn)
> end for
> 
> close(fn)
> 
> function range_find(object x, sequence s, integer pos1, integer pos2)
>  atom found
>    found = 0
>    while not found and pos1 <= pos2 do
>       found = equal(x,s[pos1]) * pos1
>       pos1 +=1
>    end while
>    return found
> end function
> 
> atom t   t=time()
> integer count  count = 0
> integer f,found
> for i =1 to 10000000/fl do
> f=0
> found=find('\n',temp)
> while found != 0 do
>    count +=1
>    f =found+1
>    found = range_find('\n',temp,f,length(temp))
> end while
> end for
> 
> ? f
> ? count
> ? time()-t
> while get_key()=-1 do end while
> <END range_find() TEST>
> 
> Chris
> 
> Rod Jackson wrote:
> > ???
> > 
> > Am I reading this right? Are you saying that this routine
> > will actually find elements in a sequence faster than
> > taking a slice of the sequence and using find() to search
> > the slice?
> > 
> > Rod Jackson
> > 
<snip>

new topic     » goto parent     » topic index » view thread      » older message » newer message

Search



Quick Links

User menu

Not signed in.

Misc Menu