Les tableaux en JavaScript sont très faciles à modifier en ajoutant et en supprimant des éléments. Cela masque quelque peu le fait que la plupart des tableaux de langues sont de taille fixe et nécessitent des opérations complexes de redimensionnement. Il semble que JavaScript facilite l'écriture de code de tableau peu performant. Cela conduit à la question:
Quelles performances (en termes de grande complexité en temps O) puis-je attendre des implémentations JavaScript en ce qui concerne les performances des baies?
Je suppose que toutes les implémentations JavaScript raisonnables ont au plus les grands O suivants.
- Accès - O (1)
- Ajout - O (n)
- Prepending - O (n)
- Insertion - O (n)
- Suppression - O (n)
- Échange - O (1)
JavaScript vous permet de pré-remplir un tableau à une certaine taille, en utilisant la new Array(length)
syntaxe. (Question bonus: crée un tableau de cette manière O (1) ou O (n)) Cela ressemble plus à un tableau conventionnel, et s'il est utilisé comme un tableau pré-dimensionné, peut permettre l'ajout de O (1). Si une logique de tampon circulaire est ajoutée, vous pouvez obtenir le préfixe O (1). Si un tableau en expansion dynamique est utilisé, O (log n) sera le cas moyen pour les deux.
Puis-je espérer de meilleures performances pour certaines choses que mes hypothèses ici? Je ne m'attends pas à ce que quoi que ce soit soit décrit dans les spécifications, mais dans la pratique, il se peut que toutes les principales implémentations utilisent des tableaux optimisés dans les coulisses. Existe-t-il des baies à expansion dynamique ou d'autres algorithmes améliorant les performances?
PS
La raison pour laquelle je me demande cela est que je recherche des algorithmes de tri, dont la plupart semblent supposer que l'ajout et la suppression sont des opérations O (1) lors de la description de leur grand O global.
length
propriété et la pré-allocation de l'espace sont deux choses complètement différentes.
array[5]
sur a new Array(10)
is O (1)?
.length
mais c'est à peu près tout.) Les tableaux ne sont vraiment pas très différents des instances Object simples.