Chiaramente Seq
asymptotically esegue lo stesso o meglio come []
per tutte le operazioni possibili. Ma dal momento che la sua struttura è più complicata delle liste, per le piccole dimensioni il suo sovraccarico costante lo renderà probabilmente più lento. Mi piacerebbe sapere quanto, in particolare:Quanto è veloce Data.Sequence.Seq rispetto a []?
- Quanto più lento è
<|
rispetto a:
? - Quanto più lento si piega sopra/attraversando
Seq
rispetto al piegamento sopra/traverso[]
(escluso il costo di una funzione di piegatura/movimento)? - Qual è la dimensione (approssimativamente) per cui
\xs x -> xs ++ [x]
diventa più lento di|>
? - Qual è la dimensione (approssimativamente) per cui
++
diventa più lento di><
? - Qual è il costo della chiamata
viewl
e della corrispondenza del modello sul risultato rispetto alla corrispondenza del modello in un elenco? - Quanta memoria ha un -elemento
Seq
occupante rispetto a un elenco dielementin
? (Senza contare la memoria occupata dagli elementi, solo la struttura.)
So che è difficile da misurare, poiché con Seq
si parla di complessità ammortizzato, ma mi piacerebbe sapere almeno alcuni numeri grezzi .
Non esiste un tale confronto. Suggerisco di generarlo da solo usando la libreria di benchmark dei criteri. –
Se qualcuno alla fine decide di eseguire il benchmarking su questo, sarebbe molto sensato cadere in un 'Vector' per il confronto. Sarebbe molto bello vedere i risultati. Favorire questo. –
Questo è anche difficile (o non particolarmente utile) poiché nel codice reale, con GHC, gli elenchi intermedi tendono a essere fusi e riscritti e scomparsi, rendendoli più simili alla struttura di controllo di una struttura dati di per sé. – jberryman