Quanto costa (vec col) o (vector arg1 e args)?

3

Sto lavorando con alcuni esercizi usando Clojure. Se dovessi convertire le liste Lisp in vettori Clojure, risolvere alcuni dei problemi sarebbe più semplice, quindi ecco la mia domanda:

L'utilizzo di vec o vector costa molto in termini di tempo e / o elaborazione? L'uso di una delle due funzioni causa una modifica dello stato meta, oppure i valori vengono convertiti e spostati in un vettore?

    
posta octopusgrabbus 06.10.2012 - 00:12
fonte

2 risposte

2

Entrambe le funzioni restituiscono un nuovo vettore per te.

vec prevede un parametro coll che verrà convertito a un vettore

vettore si aspetta che gli args creino un nuovo vettore.

Più sotto il tempo di esecuzione di ognuno:

vec

user=> (time (vec '(1 2 4)))
;= "Elapsed time: 0.043 msecs"
;= [1 2 4]

vector

user=> (time (vector 1 2 3)))
;= "Elapsed time: 0.025 msecs"
;= [1 2 3]
    
risposta data 06.10.2012 - 16:24
fonte
1

Sto usando la libreria criterium per misurare le prestazioni. Vedo prestazioni migliori per VEC che per applicazione vettoriale

user=> (use 'criterium.core)
nil
user=> (def mylist (range 100))
#'user/mylist
user=> (bench (apply vector mylist))
WARNING: Final GC required 4.142753917114324 % of runtime
Evaluation count : 8356800 in 60 samples of 139280 calls.
             Execution time mean : 7.271515 µs
    Execution time std-deviation : 112.366680 ns
   Execution time lower quantile : 7.066423 µs ( 2.5%)
   Execution time upper quantile : 7.485808 µs (97.5%)
                   Overhead used : 11.772233 ns
nil
user=> (bench (vec mylist))
Evaluation count : 8949480 in 60 samples of 149158 calls.
             Execution time mean : 6.647705 µs
    Execution time std-deviation : 83.691653 ns
   Execution time lower quantile : 6.473123 µs ( 2.5%)
   Execution time upper quantile : 6.796003 µs (97.5%)
                   Overhead used : 11.772233 ns
nil
    
risposta data 21.12.2013 - 10:07
fonte

Leggi altre domande sui tag