Première · Algorithmique

Comprendre le coût d’un algorithme

Deux programmes donnent la même réponse sur dix valeurs. Que se passera-t-il sur cent mille ? Compter les opérations en fonction de la taille des données permet d’anticiper l’évolution du travail, au-delà d’un essai chronométré sur une seule machine.

SofienAvec SofienIngénieur et enseignant en informatique
Dans ce chapitre

Un cap pour ce chapitre

Ce que vous saurez faire

  • Choisir une taille d’entrée et une opération à compter.
  • Déterminer des coûts linéaires et quadratiques.
  • Distinguer meilleur cas, pire cas et mesure expérimentale.
Les bases utiles pour commencer

Définir ce que l’on mesure

La taille n d’une entrée dépend du problème : nombre de valeurs d’un tableau, longueur d’un texte ou nombre de sommets d’un graphe. Elle n’est pas forcément la valeur d’un nombre contenu dans le tableau. On choisit ensuite une opération pertinente, comme une comparaison entre valeurs ou une addition.

Ce modèle de coût simplifie la machine réelle. Il rend les comparaisons possibles à condition de conserver les mêmes conventions. Compter les comparaisons d’un programme et les secondes d’un autre ne permet pas une conclusion directe. On précise aussi les hypothèses, par exemple l’accès direct à une case d’un tableau.

Le résultat d’un comptage dépend du code retenu. Une somme initialisée à zéro puis alimentée par toutes les cases réalise n additions. Une autre réalisation, initialisée à la première case puis parcourant les suivantes, en réalise n-1 mais exige un tableau non vide. Les deux coûts sont linéaires : l’ordre de croissance n’efface pas cette différence lorsque la question demande un compte exact.

Reconnaître un parcours linéaire

Calculer une somme examine chacune des n valeurs et réalise n additions dans la version avec accumulateur initialisé à zéro. Doubler n double ce compteur. On parle d’un coût linéaire. Des instructions supplémentaires avant et après la boucle n’en changent pas l’ordre de croissance.

Deux boucles successives de n étapes effectuent environ 2n étapes : leur coût reste linéaire. Le nombre de boucles écrites ne suffit donc pas à identifier une croissance quadratique. Il faut regarder combien de fois chaque opération est réellement exécutée et comment les parcours se combinent.

s = 0
for valeur in t:
    s += valeur
compteur = 0
for valeur in t:
    if valeur > 0:
        compteur += 1

Comprendre les combinaisons quadratiques

Si, pour chacune des n valeurs, on parcourt de nouveau les n valeurs, le nombre de couples examinés vaut n². Dans un tri par sélection, la zone restante diminue : le nombre de comparaisons vaut (n - 1) + (n - 2) + … + 1 = n(n - 1)/2. Cette expression a aussi une croissance quadratique.

Pour de grandes tailles, doubler n multiplie approximativement ce dernier compteur par quatre. Le coefficient et les termes secondaires comptent pour un nombre exact d’opérations, mais la croissance dominante explique ce qui devient coûteux quand les données augmentent fortement.

Comparer des cas et des mesures

Une recherche séquentielle trouve parfois immédiatement sa cible : meilleur cas constant. Dans le pire cas, elle parcourt tout le tableau : coût linéaire. Le tri par insertion possède également un meilleur cas différent de son pire cas. Toute affirmation de coût doit donc annoncer le cas concerné.

Un chronométrage dépend du matériel, du langage, des autres activités et des données choisies. Il complète une analyse, mais ne prouve pas une loi générale. Une dichotomie illustre une autre croissance : diviser la zone par deux conduit à un nombre de visites logarithmique, sous la précondition que le tableau soit déjà trié.

Un temps deux fois plus court sur une petite entrée ne démontre pas que l’ordre de croissance est meilleur. Les constantes et les frais fixes peuvent dominer. Comparez plusieurs tailles en conservant les mêmes conditions, puis reliez les rapports observés au modèle. Si le compteur suit n², une multiplication de la taille par dix produit cent fois plus d’opérations du type étudié.

Exemple suivi : boucles successives, imbriquées et triangulaires

Pour n=4, deux parcours successifs de quatre valeurs font 4+4=8 examens. Deux parcours imbriqués complets produisent quatre examens pour chacune des quatre valeurs, soit 16. Un parcours de toutes les paires d’indices i < j produit 3+2+1=6 paires. Les trois programmes peuvent tous contenir deux boucles écrites, mais leur organisation change le compte.

La formule triangulaire vaut n*(n-1)/2. Elle compte chaque paire d’indices distincts une seule fois, sans compter (i,i) ni compter à la fois (i,j) et (j,i). Sur n=5, elle donne 10 ; sur n=10, elle donne 45. Le rapport exact est 4,5, pas 4. Le facteur quatre caractérise la tendance quadratique pour de grandes tailles, pas nécessairement le rapport exact de petites valeurs.

Combiner préparation et recherches répétées

Supposons un modèle fictif où préparer un catalogue coûte n² unités, puis chaque requête sur le catalogue préparé coûte 10 unités. Sans préparation, chaque requête coûte n unités. Pour n=100 et q requêtes, les coûts sont 10000+10*q et 100*q. L’avantage dépend de q : pour une seule requête, préparer est très coûteux ; pour mille, le total préparé devient 20 000 contre 100 000.

Ce calcul ne prétend pas mesurer un moteur réel ni donner le coût de tous les tris. Il montre comment additionner un investissement initial et un travail répété. Avant une comparaison, écrivez les hypothèses, l’opération comptée et le nombre de répétitions. Deux méthodes doivent résoudre le même problème, sur les mêmes données et avec les mêmes garanties, pour que leur coût soit interprétable.

À vous de faire varier les choses

Agrandissez les données

Choisissez une taille et un facteur d’agrandissement. Comparez des compteurs théoriques explicites, pas des durées promises.

Lire le résultat de l’expérience initiale

La taille passe de 100 à 200.

Somme : n additions. Sélection : n(n-1)/2 comparaisons. Dichotomie : borne de visites du milieu, tableau trié et non vide. Le budget de 10000 compte les opérations annoncées par chaque ligne, sans les convertir en secondes.

ModèleTaille initialeTaille agrandieTaille agrandie dans le budget ?
Parcours : n100200oui
Deux boucles : n²1000040000non
Sélection : n(n-1)/2495019900non
Dichotomie : plancher(log₂ n)+178oui

Des croissances différentes finissent par dominer les différences de constantes sur des données suffisamment grandes.

De la compréhension à l’autonomie

À vous de résoudre

Cherchez d’abord par vous-même. Vérifiez les résultats demandés, utilisez les indices si nécessaire, puis comparez votre méthode à la correction.

Exercice 1 · Comprendre#

Deux parcours successifs

Un programme parcourt un tableau de n valeurs pour calculer une somme, puis le parcourt encore pour compter les zéros. Combien de valeurs sont examinées ?

Indice 1

Les deux parcours ne sont pas imbriqués.

Indice 2

Additionnez leurs longueurs.

Comprendre la correction

Il examine 2n valeurs. Le coût est linéaire, car multiplier n par deux multiplie le nombre d’examens par deux. Le fait que deux boucles figurent dans le code ne rend pas automatiquement le coût quadratique.

Exercice 2 · Calculer#

Chaque paire ordonnée

Deux boucles imbriquées parcourent chacune dix valeurs, sans interruption. Combien de fois le corps de la boucle intérieure est-il exécuté ? Et pour vingt valeurs ?

Indice 1

Chaque tour extérieur déclenche un parcours intérieur complet.

Indice 2

Multipliez les nombres de tours.

Comprendre la correction

Le corps est exécuté 10 × 10 = 100 fois, puis 20 × 20 = 400 fois. Doubler chaque dimension multiplie le total par quatre. Cette conclusion suppose que les deux boucles parcourent bien toutes les valeurs à chaque fois.

Exercice 3 · Corriger#

Une conclusion trop rapide

Une recherche a trouvé la cible dans la première case. Un élève conclut qu’elle a toujours un coût constant. Quelle expérience simple réfute cette affirmation ?

Indice 1

La position de la cible peut varier.

Indice 2

Vous pouvez aussi choisir une cible absente.

Comprendre la correction

On cherche une valeur absente dans des tableaux de tailles croissantes. Une recherche séquentielle complète examine alors n cases. L’essai initial montrait seulement le meilleur cas. Il ne renseignait pas sur le pire cas et ne justifiait pas le mot « toujours ».

Exercice 4 · Justifier#

Dix fois plus de données

Comparez l’évolution des modèles n et n² lorsque n passe de 1 000 à 10 000. Pourquoi un petit écart sur un petit tableau peut-il devenir important ?

Indice 1

Le facteur sur n vaut 10.

Indice 2

Le carré de ce facteur intervient dans le second modèle.

Comprendre la correction

Le modèle linéaire passe de 1 000 à 10 000 opérations, soit un facteur 10. Le modèle quadratique passe d’un million à cent millions, soit un facteur 100. Les croissances différentes amplifient donc l’écart quand la taille augmente, même si les constantes peuvent masquer cette différence sur de petites entrées.

Exercice 5 · Approfondir et transférer#

Trois programmes de taille six

Pour n=6, calculez le nombre d’examens de deux boucles successives, de deux boucles imbriquées complètes et d’un parcours des paires i<j. Classez ensuite leurs croissances quand n augmente.

Indice 1

Les boucles successives s’additionnent.

Indice 2

Le parcours triangulaire compte 5+4+3+2+1.

Comprendre la correction

Les comptes sont 12,36,15. Le premier est linéaire en n ; les deux autres sont quadratiques. Le facteur un demi et la soustraction de n dans la formule triangulaire changent le compte exact, mais pas le terme dominant de degré deux.

Exercice 6 · Approfondir et transférer#

Le rapport exact du tri par sélection

Calculez les comparaisons de sélection pour n=10 puis n=20. Donnez leur rapport exact. Expliquez pourquoi affirmer « exactement quatre fois plus » est incorrect tout en conservant une croissance quadratique.

Indice 1

Utilisez n(n-1)/2.

Indice 2

Le terme n-1 double moins simplement que n.

Comprendre la correction

Les comptes valent 45 et 190. Le rapport est 190/45, soit 38/9, environ 4,22. Le terme dominant est n²/2, mais le terme -n/2 intervient dans les valeurs exactes. Quand n grandit, le rapport associé au doublement se rapproche de quatre.

Exercice 7 · Approfondir et transférer#

Amortir une préparation

Dans le modèle du cours, n=100, préparation à 10 000 unités, puis 10 par requête ; sans préparation, 100 par requête. Comparez les coûts pour 100 et 200 requêtes. Donnez le plus petit nombre entier de requêtes rendant la préparation strictement avantageuse.

Indice 1

Résolvez 10000+10q < 100q.

Indice 2

Le nombre de requêtes doit être entier.

Comprendre la correction

Pour 100 requêtes : 11 000 contre 10 000, la préparation perd. Pour 200 : 12 000 contre 20 000, elle gagne. L’inégalité devient 10 000<90q, soit q>111,11… Le premier entier convenable est 112. Ce seuil dépend des coûts fictifs annoncés.

Les erreurs qui méritent un détour

Identifier n à la plus grande valeur du tableau.
Pour ces parcours, n est le nombre de cases. Changer 7 en 700 ne change pas le nombre de cases examinées.
Annoncer des secondes à partir d’un compteur abstrait.
Le compteur mesure du travail dans un modèle. Une durée nécessite des hypothèses matérielles et une mesure appropriée.

La fiche à garder

L’essentiel à retenir

  • Fixez taille, opération et cas étudié.
  • Des boucles successives et imbriquées ne se comptent pas de la même façon.
  • L’ordre de croissance décrit l’effet de l’augmentation des données.

Le prochain pas

Retrouver le catalogue de Première

Ce chapitre s’appuie sur le programme officiel de Première (PDF, nouvel onglet). Les explications et exercices sont proposés pour l’apprentissage.