[plt-scheme] code speed
Joshua Zucker skrev:
> In an inner loop of something I'm working on, I had initially written
> the following code:
>
> (build-vector (vector-length stack)
> (lambda (x) (cond [(<= x n) (vector-ref stack (- n x))]
> [else (vector-ref stack x)]))))
>
> to reverse the first n items of a vector.
>
> I can make it slightly faster (I think) if I do it with mutation, but
> I have to be careful because sometimes I really want a copy of the
> vector, not a mutation ...
>
> But then I saw that there were built-in functions for vector copying
> and so on.
> So I tried
>
> (vector-append (vector-reverse-copy stack 0 (add1 n)) (vector-copy
> stack (add1 n))))
>
> and was very surprised to find that this was MUCH slower.
Try this:
(define (rvc-srfi-43 v n)
(let ([v (vector-copy v)])
(vector-reverse! v 0 n)))
On a vector v of length 1000000 and n=500000 I got a
factor 10 speed up.
--
Jens Axel Søgaard