Numérique et Sciences Informatiques1ère

Indexation et accès direct
Exercices corrigés

Maîtrisez l'indexation et l'accès direct : tableaux, structures de données, algorithmes d'accès, complexité et optimisation grâce à ces 5 exercices détaillés.

Concepts & Exercices
\(\text{Accès} = T[i]\)
Accès direct à l'élément d'indice i
Complexité
O(1)
Temps constant
Tableau
T[0] ... T[n-1]
Indices de 0 à n-1
Mémoire
Contiguë
Adresse calculée
🎯
Définition : L'indexation permet d'accéder directement à un élément via son indice.
📏
Accès direct : Temps constant O(1) pour accéder à n'importe quel élément.
📋
Structure : Tableaux, listes indexées, dictionnaires clés numériques.
Performance : Optimale pour les recherches par indice.
💡
Conseil : Utilisez l'indexation pour les accès fréquents par position
🔍
Attention : Les indices commencent à 0 en programmation
Astuce : La complexité O(1) est la meilleure possible
📋
Méthode : Calculez l'adresse mémoire : base + (indice × taille_élément)
Exercice 1
Accès à un élément dans un tableau d'entiers
Exercice 2
Recherche d'un élément par indexation
Exercice 3
Calcul d'adresses en mémoire
Exercice 4
Modification d'éléments par indexation
Exercice 5
Application à une structure de données
Corrigé : Exercices 1 à 3
1 Accès direct à un tableau
Définition :

Indexation : Mécanisme permettant d'accéder à un élément d'une structure de données par son indice.

Accès direct : Accès à un élément en temps constant O(1) sans parcourir les éléments précédents.

Méthode d'accès direct :
  1. Identifier la structure de données (tableau, liste, etc.)
  2. Déterminer l'indice de l'élément souhaité
  3. Utiliser l'opérateur d'indexation [i] pour accéder à l'élément
  4. Vérifier que l'indice est valide (compris entre 0 et n-1)
Tableau
T = [10, 20, 30, 40, 50]
Indice
i = 2
Accès
T[2] = 30
Étape 1 : Analyser le tableau

Le tableau T contient 5 éléments : T[0]=10, T[1]=20, T[2]=30, T[3]=40, T[4]=50

Étape 2 : Calculer l'adresse de T[2]

Adresse(T[2]) = Adresse_base + 2 × taille_élément

Si la taille d'un entier est de 4 octets et que l'adresse de base est 1000 :

Adresse(T[2]) = 1000 + 2×4 = 1008

Étape 3 : Accéder à l'élément

L'accès à T[2] se fait en O(1) car l'adresse est calculée directement

T[2] = 30
Réponse finale :

L'élément à l'indice 2 du tableau vaut 30. L'accès se fait en temps constant O(1).

Règles appliquées :

Indexation : Utiliser des indices entiers positifs ou nuls

Accès direct : Temps constant indépendamment de la taille du tableau

Sécurité : Vérifier que l'indice est dans les bornes du tableau

2 Recherche par indexation
Définition :

Recherche indexée : Accès à un élément spécifique via son indice connu.

Complexité : O(1) pour l'accès direct par rapport à O(n) pour une recherche linéaire.

Tableau
Notes = [12, 15, 8, 17, 14]
Recherche
Notes[3]
Résultat
17
Étape 1 : Identifier l'élément recherché

Nous voulons accéder à l'élément à l'indice 3 du tableau Notes

Étape 2 : Vérifier la validité de l'indice

Longueur du tableau = 5, donc indices valides : 0 à 4

L'indice 3 est valide car 0 ≤ 3 ≤ 4

Étape 3 : Accéder à l'élément

Notes[3] correspond au 4ème élément du tableau (car l'indexation commence à 0)

Notes[0]=12, Notes[1]=15, Notes[2]=8, Notes[3]=17

Notes[3] = 17
Réponse finale :

L'élément à l'indice 3 du tableau Notes vaut 17. L'accès est immédiat en O(1).

Règles appliquées :

Indexation : Toujours vérifier que l'indice est dans les bornes du tableau

Performance : L'accès direct est toujours en O(1), contrairement à la recherche linéaire en O(n)

Erreur : Un indice hors limites provoque une erreur d'exécution

3 Calcul d'adresses en mémoire
Définition :

Adresse mémoire : Position exacte d'un élément dans la mémoire RAM.

Calcul d'adresse : Adresse(T[i]) = Adresse_base + i × taille_élément

Données
T[10], addr=2000, sizeof=4
Calcul
addr(T[5]) = 2000 + 5×4
Résultat
2020
Étape 1 : Identifier les paramètres

- Adresse de base du tableau : 2000

- Taille d'un élément (entier) : 4 octets

- Indice recherché : 5

Étape 2 : Appliquer la formule

Adresse(T[i]) = Adresse_base + i × taille_élément

Adresse(T[5]) = 2000 + 5 × 4 = 2000 + 20 = 2020

Étape 3 : Interpréter le résultat

L'élément T[5] est stocké à l'adresse mémoire 2020

Cette adresse est calculée en O(1), ce qui explique la rapidité de l'accès direct

Indice Adresse Valeur
T[0] 2000 ?
T[1] 2004 ?
T[2] 2008 ?
T[3] 2012 ?
T[4] 2016 ?
T[5] 2020 ?
T[6] 2024 ?
Adresse(T[5]) = 2020
Réponse finale :

L'élément T[5] est situé à l'adresse mémoire 2020. Le calcul se fait en O(1).

Règles appliquées :

Calcul d'adresse : Adresse(T[i]) = Adresse_base + i × taille_élément

Espace mémoire : Les éléments sont stockés de manière contiguë

Performance : L'accès direct est possible grâce à ce calcul d'adresse

Corrigé : Exercices 4 à 5
4 Modification par indexation
Définition :

Modification directe : Changement de valeur d'un élément via son indice.

Opération : T[i] = nouvelle_valeur (encore en O(1))

Avant
T = [5, 10, 15, 20]
Action
T[2] = 25
Après
T = [5, 10, 25, 20]
Étape 1 : Analyser le tableau initial

Tableau T = [5, 10, 15, 20] avec T[0]=5, T[1]=10, T[2]=15, T[3]=20

Étape 2 : Identifier l'élément à modifier

Nous voulons modifier T[2] qui vaut actuellement 15

Étape 3 : Appliquer la modification

T[2] = 25 remplace la valeur 15 par 25

Le tableau devient : [5, 10, 25, 20]

Étape 4 : Vérifier la complexité

La modification s'effectue en O(1) car l'adresse de T[2] est calculée directement

// Pseudo-code tableau = [5, 10, 15, 20] tableau[2] = 25 // Résultat : [5, 10, 25, 20]
T[2] = 25
Réponse finale :

Après modification, T[2] vaut 25. La complexité de la modification est O(1).

Règles appliquées :

Modification : T[i] = nouvelle_valeur modifie l'élément en place

Complexité : Les opérations de lecture et écriture sont toutes en O(1)

Effet de bord : La modification affecte directement le tableau original

5 Application à une structure de données
Définition :

Structure de données : Organisation logique des données pour faciliter les opérations.

Tableau comme structure : Permet un accès direct aux éléments via leur indice.

Structure
Notes = [12, 15, 8, 17, 14]
Opération
moyenne = ΣT[i]/n
Résultat
(12+15+8+17+14)/5 = 13.2
Étape 1 : Définir la structure de données

Tableau Notes contenant 5 notes d'élèves : [12, 15, 8, 17, 14]

Étape 2 : Utiliser l'indexation pour parcourir

Pour calculer la moyenne, on accède à chaque élément via son indice

Somme = Notes[0] + Notes[1] + Notes[2] + Notes[3] + Notes[4]

Somme = 12 + 15 + 8 + 17 + 14 = 66

Étape 3 : Calculer la moyenne

Moyenne = Somme / Nombre_d'éléments = 66 / 5 = 13.2

Étape 4 : Analyser la complexité

Pour n éléments, on effectue n accès directs O(1) → Complexité totale O(n)

Chaque accès individuel est en O(1) grâce à l'indexation

Indice Note Accès
0 12 O(1)
1 15 O(1)
2 8 O(1)
3 17 O(1)
4 14 O(1)
Total 66 O(n)
Moyenne = 13.2
Réponse finale :

La moyenne des notes est de 13.2. L'utilisation de l'indexation permet des accès rapides O(1).

Règles appliquées :

Structure de données : Le tableau est optimal pour les accès par indice

Accès direct : Chaque élément est accessible en O(1) grâce à l'indexation

Applications : Recherche, tri, manipulation de données structurées

Cours bien détaillé
\(\text{Adresse}(T[i]) = \text{base} + i \times \text{taille}_{\text{élément}}\)
Calcul d'adresse
🎯
Définition : L'indexation permet d'accéder directement à un élément via son indice.
📏
Accès direct : Accès en temps constant O(1) sans parcourir les éléments.
📋
Structure : Tableaux, listes indexées, dictionnaires à clés numériques.
Performance : Meilleure complexité possible pour l'accès à un élément.
💡
Conseil : Utilisez l'indexation pour les accès fréquents par position
🔍
Attention : Les indices commencent à 0 en programmation
Astuce : La complexité O(1) est la meilleure possible
📋
Méthode : Calculez l'adresse mémoire : base + (indice × taille_élément)
Vérification : Toujours valider que l'indice est dans les bornes
🔄
Opérations : Lecture, écriture, modification sont toutes en O(1)
Méthodes d'utilisation de l'indexation :
  • Accès en lecture : valeur = tableau[indice]
  • Accès en écriture : tableau[indice] = nouvelle_valeur
  • Calcul d'adresse : base + (indice × taille_élément)
  • Validation d'indices : 0 ≤ indice < longueur_tableau
  • Parcours complet : Boucle de 0 à n-1 pour accéder à tous les éléments
Règles importantes :
  • La complexité d'accès, de lecture et d'écriture est O(1)
  • Les indices commencent à 0 et se terminent à n-1 pour un tableau de n éléments
  • Un indice hors limites provoque une erreur d'exécution
  • Les éléments sont stockés de manière contiguë en mémoire
  • L'indexation est optimale pour les accès fréquents par position
Avantages
Accès rapide
O(1) pour chaque accès
Inconvénients
Insertion/suppression
O(n) dans le pire cas
Contrainte
Taille fixe
En général
\(\text{Complexité} = O(1)\)
Meilleure complexité possible
Points clés à retenir :
  • • L'indexation permet un accès direct aux éléments via leur indice
  • • La complexité d'accès est constante O(1), ce qui est optimal
  • • Les indices commencent à 0 et vont jusqu'à n-1 pour un tableau de n éléments
  • • L'adresse mémoire est calculée par la formule : base + (indice × taille_élément)
  • • L'indexation est particulièrement efficace pour les opérations de lecture/écriture
Indexation et accès direct Structures de données simples