Rangée dynamique
Dans le de l'informatique, une rangée dynamique , la rangée growable , la rangée resizable , la table dynamique , ou la liste de rangée de est une structure de données de de la rangée qui peut être remise à la côte et permet à des éléments d'être ajoutés ou enlevés. Elle est fournie avec les bibliothèques standard dans beaucoup de langages de programmation traditionnels modernes.
Une rangée dynamique n'est pas la même chose qu'un dynamique-a assigné la rangée de , qui est une rangée à taille fixe dont la taille est fixe quand la rangée est assignée ; pour plus d'examen de ce type de rangée, voir le ranger .
rangées et capacité dynamiques de Bondir-taille
La rangée dynamique la plus simple est construite en assignant une rangée à taille fixe et puis en la divisant en deux parts : le premier stocke les éléments de la rangée dynamique et la seconde est réservée, ou inutilisée. Nous pouvons alors ajouter ou enlever des éléments à la fin de la rangée dynamique dans le temps constant en employant l'espace réservé, jusqu'à ce que cet espace soit complètement consommé. Le nombre d'éléments employés par le contenu dynamique de rangée est sa taille logique de ou taille de , alors que la taille de la rangée fondamentale s'appelle la capacité du de la rangée dynamique, qui est la taille logique possible maximum.
Dans les applications où la taille logique est liée, cette structure de données suffit. Remettre à la côte la rangée fondamentale est une opération chère, impliquant typiquement copiant le contenu entier de la rangée.
Expansion géométrique et valeur comptable nette de titres
Pour éviter d'encourir le coût de remettre à la côte beaucoup de fois, les rangées dynamiques remettent à la côte par un grand nombre, tel que le doublement dans la taille, et emploient l'espace réservé pour la future expansion. L'opération d'ajouter un élément à l'extrémité pourrait fonctionner comme suit :
insertEnd de la fonction ( dynarray a, élément de e) si (a.capacity) le // remettent à la côte a deux fois à sa capacité courante : &larr d'a.capacity * 2 // (copier le contenu au nouvel endroit de mémoire ici) un &larr ; e &larr d'a.size + 1
Pendant que des éléments du n sont insérés, les capacités forment une progression géométrique . L'expansion de la rangée par n'importe quelle proportion constante s'assure que cela l'insertion des éléments du n prend à combinaison de temps d'O ( n ), signifiant que chaque insertion prend du temps amorti par de constante de . La valeur de ce de proportion qu'un mène à une différence du temps-espace : le temps moyen par opération d'insertion est au sujet de un /( un &minus de ; 1), alors que le nombre de cellules gaspillées est lié ci-dessus près ( un &minus de ; 1) n . Le choix du un est dépendant de l'application, mais le un =2 est utilisé généralement.
Beaucoup de rangées dynamiques désaffectent également une partie du stockage fondamental si sa taille chute au-dessous d'un certain seuil, tel que 30% de la capacité.
Les rangées dynamiques sont un exemple commun quand le de enseignement a amorti l'analyse .
Exécution
align=right> de class=tright de
Variantes
Les amortisseurs de Gap de sont semblables aux rangées dynamiques mais permettent l'insertion efficace et les opérations de suppression ont groupé près du même endroit arbitraire. Quelques réalisations de Deque sont basées sur des rangées dynamiques ; voir le Deque#Dynamic_array_implementation .Goodrich a présenté un algorithme dynamique de rangée appelé les vecteurs à gradins de qui ont fourni l'exécution d'O (n1/2) pour l'ordre préservant des insertions ou des suppressions du milieu de la rangée.
L'arbre (CHAPEAU) de rangée haché par est un algorithme dynamique de rangée inventé par Sitarski en 1996. L'arbre haché de rangée gaspille la quantité de l'ordre n1/2 d'espace mémoire, où n est le nombre d'éléments dans la rangée . L'algorithme a O (1) exécution amortie en apposant une série d'objets à l'extrémité d'un arbre haché de rangée.
Dans un papier 1999, Brodnik décrivent et autres une structure de données dynamique à gradins de rangée, qui gaspille seulement l'espace de n1/2 pour des éléments du n à un point quelconque à temps, et elles prouvent une apparence de limite inférieure que n'importe quelle rangée dynamique doit gaspiller cet beaucoup d'espace si les opérations sont de rester temps constant amorti. En plus, elles présentent une variante où growing et rétrécissant l'amortisseur a non seulement amorti mais temps constant des cas les pires.
Bagwell (2002) a présenté l'algorithme de VList , qui peut être adapté pour mettre en application une rangée dynamique.
Appui de langue
std de de s de C++ ': : vector est une exécution des rangées dynamiques, de même que les classes de ArrayList assurées avec le Java api et le cadre du . La classe générique de List<> assurée avec la version 2.NET est également mise en application avec des rangées dynamiques. Le Delphes et le D mettent en application des rangées dynamiques au noyau de la langue. Beaucoup de langues scripting telles que Perl offrent des rangées dynamiques comme un type de données primitif intégré.
| Random links: | Sam Ervin | Constantes trigonométriques exactes | JavaBean | Francis Newall, 2ème baron Newall | James Duddridge | Arsenal_dinámico |