Gli array in JavaScript sono molto facili da modificare aggiungendo e rimuovendo elementi. In qualche modo maschera il fatto che la maggior parte degli array di lingue sono di dimensioni fisse e richiedono operazioni complesse per il ridimensionamento. Sembra che JavaScript renda facile scrivere codice array con prestazioni scadenti. Questo porta alla domanda:
Quali prestazioni (in termini di grande complessità del tempo O) posso aspettarmi dalle implementazioni JavaScript per quanto riguarda le prestazioni dell'array?
Presumo che tutte le implementazioni JavaScript ragionevoli abbiano al massimo le seguenti grandi O.
- Accesso - O (1)
- Aggiunta - O (n)
- Anteprime - O (n)
- Inserimento - O (n)
- Cancellazione - O (n)
- Scambio - O (1)
JavaScript ti consente di precompilare un array fino a una certa dimensione, utilizzando la new Array(length)
sintassi. (Domanda bonus: sta creando un array in questo modo O (1) o O (n)) Questo è più simile a un array convenzionale e, se usato come array pre-dimensionato, può consentire l'aggiunta di O (1). Se viene aggiunta la logica del buffer circolare, è possibile ottenere O (1) anteposto. Se viene utilizzato un array in espansione dinamica, O (log n) sarà il caso medio per entrambi.
Posso aspettarmi prestazioni migliori per alcune cose rispetto alle mie ipotesi qui? Non mi aspetto che nulla sia delineato in nessuna specifica, ma in pratica potrebbe essere che tutte le principali implementazioni utilizzino array ottimizzati dietro le quinte. Ci sono array in espansione dinamica o altri algoritmi che migliorano le prestazioni al lavoro?
PS
Il motivo per cui mi chiedo questo è che sto ricercando alcuni algoritmi di ordinamento, la maggior parte dei quali sembra presumere che l'aggiunta e l'eliminazione siano operazioni O (1) quando descrivo la loro O grande complessiva.
length
proprietà e la pre-allocazione dello spazio sono due cose completamente diverse.
array[5]
su a new Array(10)
sia O (1)?
.length
ma questo è tutto.) Gli array non sono molto diversi dalle semplici istanze di Object.