# Tableaux Multidimensionnels > [!video] Vidéo explicative > <iframe width="560" height="315" src="https://www.youtube.com/embed/g4SWtmCluZA?si=OC5T8dJ0Nh0EhH9r" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe> ## 1. Introduction En algorithmique, les tableaux unidimensionnels (ou vecteurs) permettent de stocker des collections d'éléments de même type de manière linéaire. Cependant, de nombreux problèmes nécessitent de représenter des données ayant une structure plus complexe, non linéaire. C'est le cas par exemple d'une image (lignes et colonnes de pixels), d'une grille de jeu (lignes et colonnes de cases), ou d'un tableau de données météorologiques (température, humidité pour différentes villes à différents moments). Les tableaux multidimensionnels étendent le concept des tableaux unidimensionnels en permettant de structurer les données selon plusieurs dimensions, offrant ainsi une modélisation plus intuitive et efficace pour ces types de problèmes. > [!note] Rappel > Un tableau unidimensionnel est une séquence ordonnée d'éléments, accessible via un seul indice (ex: `tableau[i]`). Sa taille est fixe après déclaration. ## 2. Tableaux à Deux Dimensions (Matrices) Le cas le plus courant des tableaux multidimensionnels est le tableau à deux dimensions, souvent appelé **matrice**. > [!definition] Tableau à Deux Dimensions (Matrice) > Un tableau à deux dimensions est une collection d'éléments de même type, organisés en lignes et en colonnes. Chaque élément est identifié par deux indices : un pour sa ligne et un pour sa colonne. ### 2.1. Représentation Logique et Physique Logiquement, une matrice peut être visualisée comme une grille ou un tableau. Physiquement, en mémoire, les éléments d'un tableau multidimensionnel sont généralement stockés de manière contiguë. La méthode de stockage la plus courante est la **représentation par lignes**, où tous les éléments de la première ligne sont stockés, suivis de tous les éléments de la deuxième ligne, et ainsi de suite. > [!tip] Ordre de stockage > Pour un tableau `T[L][C]`, l'élément `T[i][j]` est stocké à l'adresse mémoire $Base + (i \times C + j) \times Taille\_Element$. Comprendre cet ordre est essentiel pour optimiser les accès mémoire dans des langages de bas niveau. ### 2.2. Déclaration et Initialisation La déclaration d'un tableau à deux dimensions nécessite de spécifier le nombre de lignes et le nombre de colonnes. > [!example] Déclaration (Pseudo-code) > ``` > MATRICE_ENTIERS[3][4] DE TYPE ENTIER > // Crée une matrice de 3 lignes et 4 colonnes > ``` > > L'initialisation peut se faire au moment de la déclaration ou élément par élément. > > ``` > MATRICE_ENTIERS[2][3] = { {1, 2, 3}, {4, 5, 6} } > // MATRICE_ENTIERS[0][0] = 1, MATRICE_ENTIERS[0][1] = 2, etc. > ``` ### 2.3. Accès aux Éléments Chaque élément est accessible en utilisant ses deux indices : `[ligne][colonne]`. > [!example] Accès (Pseudo-code) > ``` > VALEUR = MATRICE_ENTIERS[0][1] // VALEUR contiendra 2 > MATRICE_ENTIERS[1][2] = 10 // L'élément à la ligne 1, colonne 2 devient 10 > ``` ### 2.4. Parcours des Éléments Le parcours de tous les éléments d'un tableau à deux dimensions s'effectue généralement à l'aide de boucles imbriquées. > [!example] Parcours (Pseudo-code) > ``` > POUR i DE 0 À NOMBRE_DE_LIGNES - 1 FAIRE > { > POUR j DE 0 À NOMBRE_DE_COLONNES - 1 FAIRE > { > // Traiter l'élément MATRICE_ENTIERS[i][j] > AFFICHER MATRICE_ENTIERS[i][j] > } > } > ``` > Ce schéma de boucles imbriquées est un concept fondamental en algorithmique, lié aux structures de contrôle vues dans les algorigrammes. ## 3. Tableaux à N Dimensions Le concept des tableaux à deux dimensions peut être généralisé à $N$ dimensions. Un tableau à $N$ dimensions nécessite $N$ indices pour accéder à un élément. > [!definition] Tableau à N Dimensions > Un tableau à $N$ dimensions est une collection d'éléments de même type, où chaque élément est identifié par $N$ indices, un pour chaque dimension. > [!example] Déclaration et Accès (Pseudo-code) > ``` > DECLARER CUBE_3D[2][3][4] DE TYPE CARACTERE > // Un cube de 2 "profondeurs", 3 lignes et 4 colonnes > > CUBE_3D[0][1][2] = 'X' > // Accès à l'élément à la profondeur 0, ligne 1, colonne 2 > ``` Les tableaux à trois dimensions sont couramment utilisés pour représenter des volumes (ex: données médicales 3D, voxels). Au-delà de trois dimensions, la visualisation devient plus abstraite, mais l'utilité algorithmique demeure pour des données complexes (ex: un tableau 4D pour des données spatio-temporelles). ## 4. Opérations Courantes Les opérations sur les tableaux multidimensionnels incluent : * **Lecture/Écriture :** Accéder et modifier la valeur d'un élément spécifique. * **Recherche :** Trouver un élément ou ses coordonnées dans le tableau. * **Copie :** Créer une copie d'un tableau. * **Initialisation :** Remplir le tableau avec des valeurs par défaut ou spécifiques. * **Opérations spécifiques aux matrices :** * **Transposition :** Inverser les lignes et les colonnes d'une matrice. > [!example] Transposition (Pseudo-code) > Pour une matrice $A[L][C]$ et sa transposée $B[C][L]$: > ``` > POUR i DE 0 À L-1 FAIRE > { > POUR j DE 0 À C-1 FAIRE > { > B[j][i] = A[i][j] > } > } > ``` * **Multiplication matricielle :** Opération fondamentale en algèbre linéaire. Pour multiplier une matrice $A$ de dimensions $(m \times n)$ par une matrice $B$ de dimensions $(n \times p)$, la matrice résultante $C$ aura des dimensions $(m \times p)$. Chaque élément $C_{ij}$ est calculé comme : $ C_{ij} = \sum_{k=0}^{n-1} A_{ik} \times B_{kj} $ > [!note] Complexité > La multiplication matricielle est une opération coûteuse en temps de calcul, impliquant trois boucles imbriquées. ## 5. Avantages et Inconvénients > [!note] Avantages > * **Modélisation intuitive :** Permet de représenter des structures de données complexes (grilles, images, volumes) de manière naturelle. > * **Accès direct :** Accès rapide et direct à n'importe quel élément via ses indices. > * **Organisation :** Facilite l'organisation et la manipulation de données structurées. > [!warning] Inconvénients > * **Gestion de la mémoire :** Les tableaux multidimensionnels peuvent consommer beaucoup de mémoire, surtout s'ils sont de grande taille et peu remplis (matrices creuses). > * **Complexité d'accès :** Pour des dimensions très élevées, la gestion des indices peut devenir complexe et source d'erreurs. > * **Taille fixe :** La taille d'un tableau multidimensionnel est généralement fixe après sa déclaration, ce qui peut nécessiter des redimensionnements coûteux si les besoins évoluent. ## 6. Résumé Les tableaux multidimensionnels sont des structures de données fondamentales en algorithmique, permettant de modéliser des informations complexes nécessitant plusieurs axes d'organisation. Les matrices (tableaux 2D) sont les plus courantes et sont utilisées pour des applications variées allant des jeux aux traitements d'images. La compréhension de leur déclaration, de l'accès aux éléments et du parcours par boucles imbriquées est essentielle. Bien que puissants, leur utilisation doit prendre en compte les implications en termes de gestion mémoire et de complexité algorithmique. > [!note] Vers Python > Les concepts de tableaux multidimensionnels sont universels. En Python, la bibliothèque `NumPy` offre des outils très performants pour manipuler des tableaux de N dimensions (appelés `ndarray`), ce qui sera abordé dans les modules de programmation ultérieurs. > Il est aussi possible de représenter un tableau multidimensionnel en Python avec des listes de listes (listes imbriquées). Chaque sous-liste représente une ligne de la matrice. ## 🗓️ Historique > **Dernière mise à jour :** `26 octobre 2025` > **Rédigé par :** [[Julien DUQUENNOY]]