VList
pour la ville aux Pays Bas , voient le Vlist .
Dans le de l'informatique, le VList est une structure de données persistante de du conçue par Phil Bagwell en 2002 qui combine l'indexation rapide des rangées avec la prolongation facile des escroqueries - (ou simple-lié) les listes chaînées basées de
Comme des rangées, VLists ont la consultation de constant-temps en moyenne et sont fortement compact, exigeant seulement le stockage du O ( n de notation) pour des indicateurs, leur permettant de tirer profit de la localité de de la référence . Comme les listes simple-liées ou escroquerie-basées, ils sont le persistant, et des éléments peuvent être ajoutés à ou enlevés de l'avant dans le temps constant. La longueur peut également être trouvée dans le temps d'O ( n de notation).
Les opérations primaires d'un VList sont :
Plac l'élément de Th du k (O (1) moyenne, O ( n de notation) des cas les pires)
Ajouter un élément à l'avant du VList (O (1) la moyenne, avec une attribution occasionnelle)
Obtenir un nouveau commencement de rangée au deuxième élément d'une vieille rangée (O (1))
Calculer la longueur de la liste (O ( n de notation))
Les avantages primaires que VLists ont au-dessus des rangées sont qu'ils sont threadsafe et que les différentes versions mises à jour du VList partagent automatiquement la structure. Puisque VLists sont immuable, ils sont les plus utiles dans les langages de programmation fonctionnelle où leur efficacité permet une exécution purement fonctionnelle des structures de données a traditionnellement pensé pour exiger des rangées mutables, telles que les tables de brouillage
Cependant, VLists ont également un certain nombre d'inconvénients au-dessus de leurs concurrents :
Tandis que l'immuabilité est un avantage, c'est également un inconvénient, le rendant inefficace pour modifier des éléments au milieu de la rangée.
L'accès près de la fin de la liste peut être aussi cher qu'O ( n de notation) ; il est seulement constant en moyenne au-dessus de tous les éléments. C'est toujours, cependant, bien mieux qu'effectuant la même opération sur les listes escroquerie-basées.
L'espace gaspillé dans le premier bloc est proportionnel au n . C'est semblable aux listes chaînées, mais il y a des structures de données avec moins de frais généraux. Une fois utilisée pendant qu'une structure de données entièrement persistantes , les frais généraux peut être considérablement plus haute et cette structure de données peut ne pas être appropriée.
Structure
La structure fondamentale d'un VList peut être vue comme liste simple-liée de rangées dont les tailles diminuent géométriquement ; sous sa forme plus simple, la première contient la première moitié des éléments dans la liste, le prochain la première moitié du reste, et ainsi de suite. Chacun de ces blocs stocke certaine information telle que sa taille et un indicateur au prochain.
de une ranger-liste. La référence montrée se rapporte au VList (2.
L'opération moyenne d'indexation de constant-temps vient directement de cette structure ; donné un index valide aléatoire, nous observons simplement la taille des blocs et suivons des indicateurs jusqu'à ce que nous atteignions celui qu'elle devrait être dedans. La chance est 1/2 qu'elle tombe dans le premier bloc et nous n'avons pas besoin de ne suivre aucun indicateur ; la chance est 1/4 que nous devons suivre seulement un, et ainsi de suite, de sorte que le nombre prévu d'indicateurs nous devons suivre soit :
N'importe quelle référence particulière à un VList est réellement le < bas, une paire du excentré > indiquant la position de son premier élément dans la structure de données décrite ci-dessus. La pièce de la base de indique lesquelles des rangées son premier élément tombe dedans, alors que la pièce excentrée du indique son index dans cette rangée. Ceci le rend facile au " ; remove" ; un élément de l'avant de la liste ; nous augmentons simplement l'excentrage, ou augmentons la base et plaçons l'excentrage à zéro si l'excentrage sort de la gamme. Si une référence particulière est le bout pour laisser un bloc, le bloc sera ordure-rassemblé par si de tels équipements sont disponibles, ou autrement doit être libéré explicitement.
Puisque les listes sont construites incrémentalement, la première rangée dans la liste de rangée peut ne pas contenir deux fois autant de valeurs en tant que les prochaines, bien que le repos fassent ; ceci n'effectue pas de manière significative l'exécution d'indexation. Nous néanmoins assignons cet beaucoup d'espace pour la première rangée, de sorte que si nous ajoutons plus d'éléments à l'avant de la liste à l'avenir nous puissions simplement les ajouter à cette liste et mettre à jour la taille. Si la rangée se remplit, nous créons une nouvelle rangée, deux fois aussi grande encore que celle-ci, et la lions à la vieille première rangée.
Le cas plus rusé, cependant, ajoute un nouvel article à l'avant d'une liste, l'appellent A, qui commence quelque part au milieu de la structure de données de ranger-liste. C'est l'opération qui permet à VLists d'être persistant. Pour accomplir ceci, nous créons une nouvelle rangée, et nous la lions à la rangée contenant le premier élément de l'A. La nouvelle rangée doit également stocker l'excentrage du premier élément d'A dans cette rangée. Puis, nous pouvons procéder ajouter tout nombre d'articles que nous aimons à notre nouvelle rangée, et n'importe quelles références dans cette nouvelle rangée indiqueront VLists qui partagent une queue des valeurs avec la vieille rangée. Noter qu'avec cette opération il est possible de créer VLists qui dégénéré dans les listes chaînées simples, de ce fait effaçant les réclamations d'exécution introduites au début de cet article.
Variantes
VList peut être modifié pour soutenir l'exécution d'une rangée de Growable de . Dans l'application d'une rangée de Growable de , l'immuabilité n'est plus exigée. Au lieu de l'élevage au début de la liste, l'interprétation de commande est renversée pour permettre de s'élever à la fin de la rangée.
Voir également
Structures de données purement fonctionnelles Exécution de C++ de VLists
.
| Random links: | Loral Corporation | Grand modèle de poussée | Île de Candlemas | Jason Scott Sadofsky | Charles Petrie | VList |