Vecteur multidimensionnel
En programmation , un vecteur multidimensionnel est un vecteur qui est indexé par une liste ordonnée d'entiers. Le nombre d'entiers utilisés dans cette liste pour indexer le vecteur multidimensionnel est toujours le même et s'appelle la dimensionnalité du vecteur . D'autre part, les limites de chacun des entiers faisant partie de l'indice déterminent la dimension du vecteur . Un vecteur de dimension k est souvent appelé k -dimensionnel. Les vecteurs unidimensionnels correspondent aux vecteursordinaire dans lequel les éléments sont disposés en une seule ligne (ou colonne); Les vecteurs à 2 dimensions sont une autre façon d'appeler les matrices classiques dans lesquelles leurs éléments sont disposés en plusieurs lignes et colonnes (deux dimensions). En pratique, la dimensionnalité d'un vecteur dépasse rarement trois.
Représentation en mémoire
La façon d'organiser les éléments d'un vecteur unidimensionnel dans la mémoire d'un ordinateur est triviale, puisque celui-ci, en soi, a la forme d'un (très grand) vecteur unidimensionnel. Cependant, lorsque vous souhaitez stocker des vecteurs à n dimensions , le problème n'est plus évident. Supposons que nous voulions représenter ce simple tableau à deux dimensions :
La façon la plus courante d'indexer cette matrice (ou vecteur à 2 dimensions) est d'utiliser la convention RC ( Ligne - Colonne , ligne - colonne ) , dans laquelle les éléments sont référencés en indiquant d'abord la ligne puis la colonne (exemple, ), on a ainsi :
L'indexation des vecteurs multidimensionnels peut être effectuée de l'une des manières suivantes :
- parent-row order : Les éléments de chaque ligne sont stockés dans l'ordre, d'abord une ligne, puis une autre, et ainsi de suite. Cette méthode est principalement utilisée sur les tableaux statiques déclarés en C .
| 1 | deux | 3 | 4 | 5 | 6 | sept | 8 | 9 |
- Ordre colonne-principal : Analogue au précédent mais cette fois en stockant les éléments par colonnes au lieu de par lignes :
| 1 | 4 | sept | deux | 5 | 8 | 3 | 6 | 9 |
- Vecteur X-dimensionnel : En règle générale, les vecteurs multidimensionnels sont représentés à l'aide d'un vecteur unidimensionnel qui contient des références (ou des pointeurs) vers d'autres vecteurs unidimensionnels. Ces sous-vecteurs peuvent être, indistinctement, les lignes ou les colonnes de la matrice, tout dépend du critère ou de l'interprétation que l'on veut prendre.
Les deux premières formes sont plus compactes et ont potentiellement une meilleure localisation de la référence, mais elles sont aussi plus limitées ; les vecteurs doivent être rectangulaires , dans le sens où aucune ligne ne peut contenir plus d'éléments qu'une autre. Les vecteurs de vecteurs, d'autre part, permettent la création de vecteurs inégaux , également appelés vecteurs dentelés , dans lesquels la plage valide d'un index dépend de la valeur d'un autre, ou en d'autres termes, que les différentes lignes (ou colonnes) qu'ils peuvent être de différentes tailles. Les vecteurs de vecteurs sont également utiles dans les langages de programmation qui n'autorisent que les vecteurs unidimensionnels comme primitives.
Dans de nombreuses applications, telles que les applications numériques qui fonctionnent avec des matrices , vous devez itérer sur des vecteurs rectangulaires bidimensionnels de manière prévisible. Par exemple, le calcul d'un élément du produit matriciel A x B implique une itération simultanée sur une ligne de A et une colonne de B. En indexant les éléments du tableau au fur et à mesure qu'il est stocké en mémoire, vous devez optimiser au maximum les opérations de localisation de chaque élément. Parfois, un compilateur peut déterminer automatiquement la disposition du tableau séquentiel d'éléments d'un vecteur afin qu'ils soient également stockés séquentiellement en mémoire. Dans notre exemple, il peut choisir l'ordre parent-ligne pour A et l'ordre parent-colonne pour B. _ Il existe d'autres façons de stocker les éléments d'une matrice en mémoire, ce qui sera plus efficace pour d'autres types de problèmes, par exemple si vous souhaitez parcourir la diagonale principale d'une matrice.