Informatique · Première · 5 min de lecture
Parcours séquentiel d'un tableau
Parcourir un tableau élément par élément pour rechercher une occurrence, un extremum (maximum, minimum) ou calculer une moyenne ; le coût est linéaire : le nombre d'opérations est proportionnel à la longueur du tableau, et une recherche d'occurrence examine tout le tableau dans le pire cas.
Chapitre du programme : Numérique et sciences informatiques (spécialité)
Bloc 1 sur 7 · Comprendre
Comprendre : examiner chaque élément une fois
Un parcours séquentiel examine les éléments d'un tableau un par un, du premier au dernier. Il sert à chercher une valeur, à compter ses occurrences, à trouver le plus grand ou le plus petit élément, ou à calculer une somme et une moyenne.
La forme est toujours la même : initialiser une variable avant la boucle, la mettre à jour dans la boucle, la renvoyer après la boucle.
def maximum(t):
m = t[0]
for i in range(1, len(t)):
if t[i] > m:
m = t[i]
return m
print(maximum([12, 5, 18, 7, 18, 3]))18m part du premier élément ; la boucle examine les éléments suivants, d'indices 1 à len(t) − 1, et chaque fois qu'un élément est plus grand, il remplace m. Après la boucle, m contient le maximum. On peut aussi parcourir les valeurs avec for x in t : le schéma est le même.
Bloc 2 sur 7 · Approfondir
Approfondir : compter, chercher, faire la moyenne
Compter et trouver la première occurrence. compte ajoute 1 à un compteur à chaque égalité ; indice avance tant qu'il n'a pas trouvé la valeur et s'arrête dès qu'il la trouve ; s'il est arrivé au bout (i == len(t)), la valeur est absente et il renvoie -1. On peut aussi l'écrire avec une boucle for et un return dans la boucle.
def compte(t, v):
n = 0
for i in range(len(t)):
if t[i] == v:
n = n + 1
return n
def indice(t, v):
i = 0
while i < len(t) and t[i] != v:
i = i + 1
if i == len(t):
return -1
return i
t = [12, 5, 18, 7, 18, 3]
print(compte(t, 18), indice(t, 18), indice(t, 4))2 2 -1Moyenne. On accumule la somme, puis on divise par len(t) après la boucle (le tableau ne doit pas être vide).
def moyenne(t):
s = 0
for i in range(len(t)):
s = s + t[i]
return s / len(t)
print(moyenne([12, 5, 18, 7, 18, 3]))10.5Coût linéaire. Le nombre d'opérations est proportionnel à la longueur du tableau. Une recherche s'arrête tôt si la valeur est au début, mais examine tout le tableau dans le pire cas (valeur à la fin ou absente) :
def nb_comparaisons(t, v):
c = 0
for x in t:
c = c + 1
if x == v:
return c
return c
t = list(range(1000))
print(nb_comparaisons(t, 0), nb_comparaisons(t, 999), nb_comparaisons(t, -1))1 1000 1000Bloc 3 sur 7 · Exemple
Exemple guidé : remettre des lignes dans l'ordre
Énoncé. Les lignes d'une fonction qui renvoie le nombre d'éléments d'un tableau strictement supérieurs à un seuil ont été mélangées ; chacune a gardé son indentation.
n = n + 1
return n
if x > seuil:
def nb_superieurs(t, seuil):
for x in t:
n = 0Méthode.
- La seule ligne non indentée,
def nb_superieurs(t, seuil):, ouvre la fonction : elle vient en premier. - Le compteur doit recevoir une valeur avant d'être utilisé :
n = 0vient ensuite, avant la boucle. - Chaque ligne terminée par deux-points ouvre un bloc : après
for x in t:vientif x > seuil:, un cran plus à droite, puisn = n + 1, encore un cran plus à droite. return nest au niveau de la boucle, après elle : on ne renvoie qu'une fois tout le tableau parcouru.
def nb_superieurs(t, seuil):
n = 0
for x in t:
if x > seuil:
n = n + 1
return n
print(nb_superieurs([12, 5, 18, 7, 18, 3], 10))3Trois éléments dépassent 10 : 12, 18 et 18.
Bloc 4 sur 7 · Visualiser
Voir : le suivi de maximum([12, 5, 18, 7, 18, 3])
| Tour | i | t[i] | t[i] > m ? | m après le tour |
|---|---|---|---|---|
| avant la boucle | — | — | — | 12 |
| 1 | 1 | 5 | non | 12 |
| 2 | 2 | 18 | oui | 18 |
| 3 | 3 | 7 | non | 18 |
| 4 | 4 | 18 | non (égalité) | 18 |
| 5 | 5 | 3 | non | 18 |
Six éléments : le premier sert à initialiser m, la boucle fait cinq tours pour les autres. Le nombre de tours est proportionnel à la longueur du tableau.
Continuez sur votre lancée
Vous avez découvert l’essentiel et un exemple. Retrouvez la suite du cours et les points à retenir, puis passez à l’entraînement guidé dans votre compte.
- Les formules et les repères à retenir
- Les erreurs fréquentes expliquées
- Un exercice avec des aides et sa correction
L’accès gratuit comprend les cours et exercices de votre niveau choisi.
Sources
- BO spécial n°1 du 22 janvier 2019 — programme de spécialité numérique et sciences informatiques de première générale, annexe (https://cache.media.education.gouv.fr/file/SP1-MEN-22-1-2019/26/8/spe633_annexe_1063268.pdf) — rubrique « Algorithmique », parcours séquentiel d'un tableau
- T. H. Cormen, C. E. Leiserson, R. L. Rivest, C. Stein, Algorithmique (Introduction to Algorithms), 3e édition française, Dunod — chapitre 2, exercice 2.1-3 (recherche linéaire)
Vous pensez avoir trouvé une erreur dans cette leçon ? Signalez-la par e-mail.