En informatique , un groupe de tableaux parallèles (également appelé structure de tableaux ou SoA) est une forme de structure de données implicite qui utilise plusieurs tableaux pour représenter un seul ensemble d' enregistrements . Il conserve un tableau tableau de structures ou AoS). Par exemple, on pourrait déclarer un tableau de 100 noms, chacun étant une chaîne de caractères, et de 100 âges, chacun étant un entier, en associant chaque nom à l'âge ayant le même indice.
C utilisant des tableaux parallèles :en Perl (en utilisant un hachage de tableaux pour stocker les références à chaque tableau) :
mes %data = ( prénom => [ 'Joe' , 'Bob' , 'Frank' , 'Hans' ], nom => [ 'Smith' , 'Seger' , 'Sinatra' , 'Schultze' ], taille_en_cm => [ 169 , 158 , 201 , 199 ]);for $i ( 0 .. $# { $data { first_name }}) { printf "Nom : %s %s " , $data { first_name }[ $i ], $data { last_name }[ $i ]; printf "Taille en cm : %i " , $data { height_in_cm }[ $i ]; }
Ou, en Python :
Avantages et inconvénients
Plusieurs de ces avantages dépendent fortement du langage de programmation et de l'implémentation utilisés.
Cependant, les réseaux parallèles présentent également plusieurs inconvénients majeurs, ce qui explique pourquoi ils ne sont généralement pas privilégiés :
- Leur localité de référence est nettement moins bonne lorsqu'on consulte les enregistrements de manière non séquentielle et qu'on examine plusieurs champs de chaque enregistrement, car les différents tableaux peuvent être stockés à des distances arbitraires les uns des autres.
- Elles masquent la relation entre les champs d'un même enregistrement (par exemple, aucune information de type ne relie l'index entre eux, un index peut être utilisé par erreur).
- Ils offrent peu de support direct au niveau du langage (le langage et sa syntaxe n'expriment généralement aucune relation entre les tableaux du tableau parallèle et ne peuvent pas détecter les erreurs).
- Comme l'ensemble des champs n'est pas considéré comme un objet unique, sa manipulation est fastidieuse et source d'erreurs. Par exemple, au lieu d'appeler une fonction pour agir sur un enregistrement (ou une structure ou un objet), la fonction doit prendre les champs comme arguments distincts. Lorsqu'un champ est ajouté ou modifié, de nombreuses listes de paramètres doivent être mises à jour, alors que la manipulation d'objets entiers permettrait d'éviter ces modifications.
- Leur agrandissement ou leur réduction est coûteux, car chaque tableau doit être réalloué. Les tableaux à plusieurs niveaux peuvent atténuer ce problème, mais impactent les performances en raison de l' indirection supplémentaire nécessaire pour trouver les éléments souhaités.
- Le pire, peut-être, est qu'elles augmentent considérablement le risque d'erreurs. Toute insertion, suppression ou déplacement doit être appliqué de manière cohérente à tous les tableaux, sous peine de désynchronisation et de résultats aberrants.
Le problème de localité des références peut être atténué dans certains cas : si une structure peut être divisée en groupes de champs généralement accédés ensemble, un tableau peut être construit pour chaque groupe, et ses éléments sont des enregistrements contenant uniquement ces sous-ensembles des champs de la structure principale (voir la conception orientée données ). C'est une méthode efficace pour accélérer l'accès aux très grandes structures comportant de nombreux membres, tout en préservant la cohérence entre les différentes parties de la structure. Une alternative à l'utilisation d'index de tableau consiste à utiliser des références pour lier les parties entre elles, mais cette méthode peut s'avérer moins performante en termes de temps et d'espace.
Une autre solution consiste à utiliser un tableau unique, où chaque élément représente une structure d'enregistrement. De nombreux langages permettent de déclarer des enregistrements, ainsi que des tableaux de ces enregistrements. Dans d'autres langages, il est possible de simuler ce comportement en déclarant un tableau de taille n*m, où m correspond à la taille totale des champs. Ce tableau regroupe les champs dans ce qui équivaut à un enregistrement, même si le langage en question ne prend pas directement en charge les enregistrements. Certaines optimisations du compilateur , notamment pour les processeurs vectoriels , sont capables d'effectuer automatiquement cette transformation lors de la création de tableaux de structures dans le programme.
Plus d articles de Worldlex Wiki
Revenez a l index pour explorer davantage de pages sur l histoire, la science, la culture, la geographie et la societe en francais.
Explorer l index