Algorithmes et complexité : questions d’entraînement avec explications

Questions à choix multiples gratuites sur Algorithmes et complexité, avec indices et explications, à trois niveaux : termes et faits clés, appliquer les notions, cas et analyse.

Exercice gratuitFacile

Quelle classe de complexité croît le plus vite pour de grandes valeurs de n ?

Exercice suivant →

Ce que vous travaillez

  1. Faciletermes et faits clés
  2. Moyenappliquer les notions
  3. Difficilecas et analyse

Apprendre Algorithmes et complexité depuis zéro

1Ce que mesure la complexité

Un algorithme est une liste finie d’étapes précises qui résout un problème, comme trier une liste ou trouver un nom dans un annuaire.

Deux algorithmes peuvent résoudre le même problème mais prendre des temps très différents. La complexité décrit comment le travail croît quand l’entrée grandit.

La taille de l’entrée se note n : le nombre d’éléments à trier, la longueur d’une liste, le nombre de nœuds d’un graphe.

Imaginez que vous cherchez un nom dans un annuaire de 1000 pages. Lire chaque page demande jusqu’à 1000 étapes. L’ouvrir au milieu et diviser par deux à chaque fois demande environ 10 étapes.

La complexité en temps compte les étapes. La complexité en espace compte la mémoire supplémentaire. Toutes deux s’écrivent comme une fonction de n.

En général, on regarde le pire cas : le plus de travail sur toutes les entrées de taille n. Parfois, c’est le cas moyen ou le meilleur cas qui est demandé.

Auto-évaluation Un algorithme dont le travail croît comme n² prend 1 seconde pour n = 1000. Environ combien de temps prend-il pour n = 2000 ?
  1. 1 seconde
  2. 2 secondes
  3. 4 secondes
  4. 8 secondes

Réponse: 4 secondes. Doubler n multiplie n² par 2² = 4, donc le temps passe d’environ 1 à environ 4 secondes. 2 secondes serait la réponse pour une croissance linéaire, et 8 pour n³.

2Grand O et classes de croissance

La notation grand O ne garde que ce qui compte pour de grands n. Vous supprimez les facteurs constants et ne gardez que le terme qui croît le plus vite.

3n² + 5n + 2 ⇒ O(n²)

Pour n = 1000, le terme en n² vaut 3 000 000, alors que 5n n’est que 5000. Les termes plus petits changent à peine le total.

Ces classes reviennent sans cesse, de la croissance la plus lente à la plus rapide :

  • O(1), constant : lire un élément d’un tableau par son indice.
  • O(log n), logarithmique : la recherche dichotomique, qui divise le problème par deux à chaque étape.
  • O(n), linéaire : un parcours de tous les éléments, comme trouver la plus grande valeur.
  • O(n log n) : les bons algorithmes de tri, comme le tri fusion.
  • O(n²), quadratique : deux boucles imbriquées sur les éléments, comme le tri à bulles.
  • O(2ⁿ), exponentiel : essayer tous les sous-ensembles. Cela devient vite inutilisable.
ntlog nnn log nn²2ⁿ

Le grand O est une borne supérieure : le travail croît au plus à cette vitesse. Ω (grand Oméga) est une borne inférieure, et Θ (Thêta) est une borne serrée, à la fois supérieure et inférieure.

La base d’un logarithme n’a pas d’importance en grand O, car des logarithmes de bases différentes ne diffèrent que d’un facteur constant.

Auto-évaluation Quel est le grand O de 4n + 2n² + 100 ?
  1. O(100)
  2. O(2n²)
  3. O(n)
  4. O(n²)

Réponse: O(n²). Pour de grands n, le terme en n² domine, et le facteur constant 2 est supprimé. O(n) garde le mauvais terme, et O(2n²) oublie de supprimer la constante.

3Recherche, tri et récursivité

Quelques algorithmes reviennent dans presque tous les cours. Apprenez leurs complexités comme des faits.

  • La recherche linéaire examine les éléments un par un : O(n). La recherche dichotomique demande un tableau trié et divise l’intervalle par deux à chaque étape : O(log n).
  • Les tris à bulles, par insertion et par sélection comparent et échangent des éléments dans des boucles imbriquées : O(n²). Le tri par insertion est en O(n) sur un tableau déjà trié.
  • Le tri fusion coupe le tableau en deux moitiés, les trie et les fusionne : O(n log n) dans tous les cas, avec O(n) de mémoire supplémentaire.
  • Le tri rapide (quicksort) découpe autour d’un pivot : O(n log n) en moyenne, mais O(n²) dans le pire cas, par exemple un tableau trié avec le premier élément comme pivot.
  • Aucun tri qui ne fait que comparer des éléments ne peut faire mieux que Ω(n log n) dans le pire cas. Le tri par comptage est plus rapide parce qu’il ne compare pas.

Une fonction récursive s’appelle elle-même sur une entrée plus petite jusqu’à atteindre un cas de base auquel elle répond directement. Son temps d’exécution s’écrit sous forme de récurrence :

  • T(n) = T(n/2) + O(1) donne O(log n), comme la recherche dichotomique.
  • T(n) = 2T(n/2) + O(n) donne O(n log n), comme le tri fusion.
  • T(n) = T(n − 1) + O(n) donne O(n²).
  • T(n) = 2T(n − 1) + O(1) donne O(2ⁿ).

Trois idées de conception méritent d’être connues. Diviser pour régner découpe, résout et combine. Le glouton prend à chaque étape le meilleur choix local. La programmation dynamique mémorise les réponses aux sous-problèmes qui se recoupent pour qu’elles soient calculées une seule fois.

Auto-évaluation Quelle est la complexité en temps du tri rapide dans le pire cas ?
  1. O(log n)
  2. O(n log n)
  3. O(n)
  4. O(n²)

Réponse: O(n²). Avec de mauvais pivots, chaque découpage laisse n − 1 éléments d’un côté, ce qui donne O(n²). O(n log n) est son cas moyen, et le pire cas du tri fusion.

4La méthode pas à pas

Pour trouver la complexité en temps d’un morceau de code :

  1. Décidez ce qu’est n : la taille de l’entrée.
  2. Comptez combien de fois chaque boucle s’exécute. Une boucle qui ajoute 1 à chaque fois s’exécute environ n fois. Une boucle qui double ou divise par deux s’exécute environ log₂ n fois.
  3. Les boucles imbriquées se multiplient. Les boucles qui se suivent s’additionnent.
  4. Pour une fonction récursive, écrivez la récurrence : combien d’appels, sur quelle taille, plus le travail par appel.
  5. Gardez le terme qui croît le plus vite et supprimez les constantes.
  6. Vérifiez avec un petit nombre, par exemple n = 8 ou n = 1024.

Pour une question de théorie, nommez d’abord l’algorithme ou l’idée décrits, puis rappelez sa complexité et ses conditions (entrée triée, poids positifs, sous-problèmes qui se recoupent).

5Un exemple détaillé

Suivez chaque étape. Essayez de deviner la suivante avant de l’ouvrir.

Exemple détaillé

Quelle est la complexité en temps de ce code ? for i = 1 to n: (j = 1; while j < n: j = j × 2)

1

Nommez la taille de l’entrée

n est le nombre jusqu’auquel les boucles s’exécutent.

2

Comptez la boucle extérieure

i va de 1 à n par pas de 1, donc la boucle extérieure s’exécute n fois.

3

Comptez la boucle intérieure

j prend les valeurs 1, 2, 4, 8, … et s’arrête quand il atteint n. Après k tours, j = 2k, donc la boucle s’arrête après environ log₂ n tours.

4

Combinez les boucles

La boucle intérieure est à l’intérieur de la boucle extérieure, donc les nombres se multiplient.

n · log₂ n ⇒ O(n log n)
5

Vérifiez avec un nombre

Pour n = 1024, la boucle intérieure s’exécute log₂ 1024 = 10 fois, donc le corps s’exécute 1024 · 10 = 10 240 fois. C’est bien moins que n² = 1 048 576.

Réponse

O(n log n)

6Erreurs fréquentes

  • Multiplier des boucles qui se suivent. n + n = 2n est encore O(n).
  • Garder les constantes, comme dans O(2n) ou O(n/2). Les deux sont O(n).
  • Compter une boucle qui double comme n tours. Elle s’exécute environ log₂ n fois.
  • Utiliser la recherche dichotomique sur des données non triées, ou sur une liste chaînée où le milieu ne peut pas être atteint en une étape.
  • Donner le cas moyen du tri rapide quand le pire cas est demandé.
  • Penser que grand O signifie « exactement ». O(n²) est une borne supérieure ; Θ(n²) est la croissance exacte.
Auto-évaluation Une fonction exécute une boucle de n itérations puis, séparément, une autre boucle de n itérations. Quelle est sa complexité en temps ?
  1. O(2n)
  2. O(log n)
  3. O(n)
  4. O(n²)

Réponse: O(n). Les boucles qui se suivent s’additionnent : n + n = 2n, et la constante est supprimée, donc O(n). O(n²) ne serait juste que si une boucle était à l’intérieur de l’autre.

7À quoi ressemblent les questions d’examen

  • Facile : termes clés et faits. La complexité de la recherche dichotomique, du tri fusion ou de l’accès à un tableau, le sens de O, Ω et Θ, ce qu’est la récursivité.
  • Moyen : application des concepts. La complexité d’un fragment de code, une récurrence à résoudre, comment le temps change quand n double, quel algorithme convient à une tâche.
  • Difficile : cas et analyse. Le théorème maître, les pires cas du tri rapide, glouton contre programmation dynamique, et les classes P, NP et NP-complet.

P contient les problèmes qui peuvent être résolus en temps polynomial. NP contient les problèmes dont les solutions peuvent être vérifiées en temps polynomial. Tout problème de P est dans NP ; on ne sait toujours pas si P = NP.

Apprenez pas à pas dans l’applicationApprenez pas à pas dans l’application

Exemples de questions

Exemple 1Facile

Quelle notation décrit une borne supérieure de la croissance ?

  1. AGrand Oméga (Big Omega)
  2. BPetit oméga (little omega)
  3. CGrand O (Big O)
  4. DGrand Thêta (Big Theta)
Afficher les indices
  1. « Au plus ».
  2. Deux mauvaises réponses sont maintenant barrées. L'une des deux restantes est juste.
Afficher la réponse et l’explication

Pourquoi c'est la réponse

O donne une borne supérieure, Ω une borne inférieure et Θ une borne exacte (asymptotiquement serrée).

Réponse

C · Grand O (Big O)
Exemple 2Moyen

Dans un tableau trié, vous cherchez deux éléments dont la somme vaut une cible en déplaçant un pointeur depuis chaque extrémité vers l'intérieur. Quelle est la complexité temporelle ?

  1. AO(n)
  2. BO(n log n)
  3. CO(n²)
  4. DO(log n)
Afficher les indices
  1. Chaque étape déplace un pointeur d'une position.
  2. Deux mauvaises réponses sont maintenant barrées. L'une des deux restantes est juste.
Afficher la réponse et l’explication

Pourquoi c'est la réponse

Si la somme est trop petite, le pointeur gauche avance vers la droite ; si elle est trop grande, le pointeur droit recule vers la gauche : il y a donc au plus n étapes.

Réponse

A · O(n)
Exemple 3Difficile

L'algorithme de Strassen multiplie des matrices en utilisant 7 au lieu de 8 multiplications récursives de blocs de taille moitié. Quel est son temps d'exécution ?

  1. AΘ(n² log n)
  2. BΘ(n2)
  3. CΘ(n³)
  4. DΘ(nlog₂ 7), soit environ n2,81
Afficher les indices
  1. La récurrence est T(n) = 7T(n/2) + O(n²).
  2. Deux mauvaises réponses sont maintenant barrées. L'une des deux restantes est juste.
Afficher la réponse et l’explication

Pourquoi c'est la réponse

Avec a = 7 et b = 2, nlog₂ 7 domine le travail d'addition en O(n²), ce qui donne environ n2,81.

Réponse

D · Θ(nlog₂ 7), soit environ n2,81

Questions et réponses

Algorithmes et complexité : de quoi s’agit-il ?

Un algorithme est une liste finie d’étapes précises qui résout un problème, comme trier une liste ou trouver un nom dans un annuaire.

Deux algorithmes peuvent résoudre le même problème mais prendre des temps très différents. La complexité décrit comment le travail croît quand l’entrée grandit.

Algorithmes et complexité : comment l’apprendre étape par étape ?
  1. Ce que mesure la complexité
  2. Grand O et classes de croissance
  3. Recherche, tri et récursivité
  4. La méthode pas à pas
  5. Un exemple détaillé
  6. Erreurs fréquentes
  7. À quoi ressemblent les questions d’examen
Algorithmes et complexité : que couvrent les exercices ?
  • Facile: termes et faits clés
  • Moyen: appliquer les notions
  • Difficile: cas et analyse

Chaque question propose quatre réponses, et une seule est juste. Bloqué ? Ouvrez d’abord un petit indice, et l’explication complète seulement si vous en avez besoin.

Comment fonctionne l’entraînement

  • Chaque question propose quatre réponses, et une seule est juste.
  • Bloqué ? Ouvrez d’abord un petit indice, et l’explication complète seulement si vous en avez besoin.
  • Votre progression, vos erreurs et vos exercices enregistrés sont conservés pour que vous puissiez réviser avant l’examen.

Thèmes avant et après celui-ci

Ensuite

Cours qui contiennent ce thème

Autres thèmes en Informatique

Fiche d’exercices imprimable