Aller au contenu principal

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]))
18

m 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 -1

Moyenne. 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.5

Coû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 1000

Bloc 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 = 0

Méthode.

  1. La seule ligne non indentée, def nb_superieurs(t, seuil):, ouvre la fonction : elle vient en premier.
  2. Le compteur doit recevoir une valeur avant d'être utilisé : n = 0 vient ensuite, avant la boucle.
  3. Chaque ligne terminée par deux-points ouvre un bloc : après for x in t: vient if x > seuil:, un cran plus à droite, puis n = n + 1, encore un cran plus à droite.
  4. return n est 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))
3

Trois é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])

Tableau : Tour, i, t[i], t[i] > m ?, m après le tour
Tourit[i]t[i] > m ?m après le tour
avant la boucle———12
115non12
2218oui18
337non18
4418non (égalité)18
553non18

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.

Explorer les autres cours

Accès rapide