RE: Sequence Slicing (Was RE: Tough ciphers?)
- Posted by bensler at mail.com
Mar 15, 2002
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>
|
Not Categorized, Please Help
|
|