Retour au blog

Quiz : Algorithmes de recherche, dichotomie et complexité

La recherche d'un élément dans une masse de données est le cœur de l'informatique. Sais-tu choisir la stratégie la plus efficace selon le contexte ?

Cet article a été rédigé à des fins pédagogiques. Les informations présentées peuvent évoluer. Nous t’invitons à vérifier auprès de sources officielles.

L'essentiel à connaître

La recherche d'une information dans une structure de données est une opération fondamentale. La méthode la plus simple est la recherche séquentielle (ou linéaire) : on parcourt chaque élément l'un après l'autre jusqu'à trouver la cible. C'est la seule option possible si tes données ne sont pas triées. Cependant, dès que ta liste est ordonnée, tu peux utiliser la puissance de la recherche dichotomique. Cette technique consiste à diviser par deux l'espace de recherche à chaque étape en comparant la cible avec l'élément central.

Comprendre l'efficacité d'un algorithme nécessite de mesurer sa complexité, souvent exprimée avec la notation Grand O. Elle représente la croissance du temps d'exécution en fonction de la taille n des données en entrée. En informatique, on cherche toujours à minimiser cette croissance pour garantir que nos programmes restent rapides, même face à des milliards de données. C'est la différence entre un script qui finit en une seconde et un programme qui tournerait pendant des siècles.

Définition : La recherche dichotomique est un algorithme de type "diviser pour régner" qui trouve la position d'un élément dans un tableau trié en réduisant de moitié l'intervalle de recherche à chaque itération.

À retenir : Pour qu'une recherche dichotomique soit possible, la structure de données doit impérativement être triée au préalable, sinon l'algorithme est inopérant.

Les points clés

L'analyse de la complexité temporelle se concentre généralement sur le "pire cas". Pour une recherche linéaire, le pire cas est de devoir parcourir les n éléments, ce qui donne une complexité de O(n). Pour la dichotomie, comme on divise par deux à chaque étape, on arrive à une complexité logarithmique, notée O(log n). Cette différence est colossale : pour un milliard d'éléments, la recherche linéaire peut prendre un milliard d'opérations, là où la dichotomie n'en nécessite qu'une trentaine.

Il ne faut pas oublier la complexité spatiale, qui mesure la mémoire supplémentaire utilisée. Un algorithme itératif de recherche dichotomique est très efficace car il n'utilise que quelques variables (indices de début, de fin et milieu), soit une complexité spatiale de O(1). Attention toutefois aux versions récursives qui peuvent consommer plus de mémoire sur la pile d'exécution.

Formule : Le nombre maximal d'étapes dans une recherche dichotomique pour un tableau de taille n est environ égal à log2(n).

Piège classique : Ne pas inclure le coût du tri dans ton analyse. Si tu dois trier un tableau juste pour faire une seule recherche, le tri (souvent en O(n log n)) sera plus coûteux qu'une simple recherche linéaire !

Quiz : Teste tes connaissances

Question 1 : Quelle est la condition sine qua non pour effectuer une recherche dichotomique sur un tableau ?

A. Le tableau doit contenir uniquement des entiers.
B. Le tableau doit être trié.
C. Le tableau doit avoir une taille impaire.
D. Le tableau ne doit pas contenir de doublons.

Réponse : B. La recherche dichotomique repose sur le principe de comparaison avec l'élément central pour éliminer une moitié du tableau. Si les données ne sont pas triées, il est impossible de savoir dans quelle moitié se trouve l'élément recherché. Les doublons ou le type de données n'empêchent pas l'algorithme de fonctionner.

Question 2 : Quelle est la complexité temporelle dans le pire des cas d'une recherche linéaire ?

A. O(1)
B. O(log n)
C. O(n)
D. O(n²)

Réponse : C. Dans le pire des cas (élément à la fin ou absent), la recherche linéaire doit examiner chaque élément du tableau de taille n une seule fois. La croissance du temps est donc proportionnelle à n, d'où la notation O(n). L'option D correspondrait à une double boucle imbriquée.

Question 3 : Quelle est la complexité d'un algorithme dont le temps d'exécution ne dépend pas de la taille des données ?

A. O(1)
B. O(n)
C. O(exp(n))
D. O(log n)

Réponse : A. On parle de complexité constante. Cela signifie que peu importe si tu traites 10 ou 10 millions de données, l'opération prend le même temps (comme accéder à un élément d'un tableau par son index). C'est le Graal de l'optimisation algorithmique.

Question 4 : Dans une recherche dichotomique, si l'élément central est supérieur à la cible recherchée, quelle est l'étape suivante ?

A. On s'arrête, l'élément n'est pas présent.
B. On continue la recherche dans la moitié droite.
C. On recommence la recherche depuis le début.
D. On continue la recherche dans la moitié gauche.

Réponse : D. Si l'élément central est plus grand que la cible, et que le tableau est trié par ordre croissant, alors la cible ne peut se trouver que parmi les éléments plus petits, donc à gauche du centre. On déplace l'indice de "fin" juste avant le milieu actuel.

Question 5 : Pour un tableau de 1024 éléments, combien de comparaisons au maximum effectuera une recherche dichotomique ?

A. 512
B. 10
C. 1024
D. 20

Réponse : B. La complexité est en log2(n). Comme 2 puissance 10 égale 1024, le logarithme de 1024 en base 2 est 10. Cela illustre l'incroyable efficacité de la dichotomie par rapport à la recherche linéaire qui en ferait 1024 dans le pire des cas.

Question 6 : Que signifie la notation O(n log n) souvent rencontrée dans les tris ?

A. L'algorithme est plus rapide que O(log n).
B. L'algorithme est plus lent que O(n²).
C. C'est une complexité intermédiaire entre linéaire et quadratique.
D. C'est la complexité de la recherche séquentielle.

Réponse : C. O(n log n) est plus lent que le linéaire O(n) mais beaucoup plus rapide que le quadratique O(n²). C'est la complexité optimale pour les algorithmes de tri basés sur des comparaisons, comme le Tri Fusion ou le QuickSort.

Question 7 : Quelle est la complexité spatiale d'une recherche dichotomique itérative ?

A. O(1)
B. O(n)
C. O(log n)
D. O(n log n)

Réponse : A. L'algorithme itératif n'utilise qu'un nombre fixe de variables (indices) quelle que soit la taille du tableau. Il ne nécessite pas de stockage supplémentaire proportionnel à n, sa complexité spatiale est donc constante, soit O(1).

Question 8 : Si tu doubles la taille d'un tableau (de n à 2n), comment évolue le nombre d'étapes d'une recherche dichotomique ?

A. Il double.
B. Il est multiplié par quatre.
C. Il augmente d'une seule unité.
D. Il reste identique.

Réponse : C. C'est la propriété du logarithme : log2(2n) = log2(n) + 1. Puisqu'on divise par deux à chaque étape, doubler la taille des données n'ajoute qu'une seule division supplémentaire pour revenir au cas précédent.

Question 9 : Quel est l'avantage principal de la recherche linéaire sur la recherche dichotomique ?

A. Elle est plus rapide sur de grands tableaux.
B. Elle ne nécessite aucune préparation des données (tri).
C. Elle utilise moins de processeur.
D. Elle est toujours en O(1) dans le meilleur des cas.

Réponse : B. La recherche linéaire est robuste car elle fonctionne sur n'importe quel ensemble de données, trié ou non. Bien qu'elle soit plus lente sur de gros volumes, elle évite le coût CPU et temporel d'un algorithme de tri préalable.

Question 10 : On dit qu'un algorithme est "polynomial" si sa complexité est de la forme :

A. O(2^n)
B. O(log n)
C. O(n!)
D. O(n^k) avec k une constante

Réponse : D. Les complexités polynomiales (n, n², n³) sont considérées comme "efficaces" ou traitables en informatique théorique, par opposition aux complexités exponentielles (2^n) ou factorielles (n!) qui deviennent impossibles à calculer très rapidement.

Question 11 : Quel est le "best case" (meilleur cas) d'une recherche dichotomique ?

A. O(1)
B. O(log n)
C. O(0)
D. O(n)

Réponse : A. Le meilleur cas survient quand l'élément recherché est exactement au milieu du tableau dès la première étape. Dans ce cas, une seule comparaison suffit, peu importe la taille n du tableau.

Question 12 : Laquelle de ces complexités croît le plus RAPIDEMENT ?

A. O(n²)
B. O(2^n)
C. O(n log n)
D. O(n^10)

Réponse : B. La croissance exponentielle O(2^n) finit toujours par dépasser n'importe quelle puissance polynomiale (comme n^10), même si cela prend du temps au début. C'est le type de complexité que l'on essaie absolument d'éviter en programmation.

Question 13 : Dans un algorithme de recherche dichotomique récursif, quel risque majeur existe-t-il par rapport à la version itérative ?

A. L'algorithme sera en O(n).
B. Le résultat sera faux.
C. Une saturation de la pile (Stack Overflow).
D. Le tri sera perdu.

Réponse : C. Chaque appel récursif consomme de la mémoire sur la pile d'exécution. Si le nombre d'appels est trop grand (ce qui est rare pour log n mais possible sur de très petites piles), cela peut provoquer un crash, contrairement à une boucle "while" itérative.

Question 14 : Si un algorithme de recherche doit être effectué des milliers de fois sur un tableau qui change rarement, quelle est la meilleure stratégie ?

A. Trier une fois le tableau puis faire des recherches dichotomiques.
B. Faire des recherches linéaires à chaque fois.
C. Trier le tableau avant chaque recherche.
D. Ne rien faire, le processeur s'adaptera.

Réponse : A. On "amortit" le coût du tri (O(n log n)) sur le grand nombre de recherches rapides (O(log n)). C'est une stratégie classique d'optimisation : investir du temps au départ pour en gagner énormément sur le long terme.

Question 15 : Quelle notation utilise-t-il pour décrire une borne supérieure de complexité ?

A. Omega Ω
B. Grand O
C. Theta Θ
D. Delta Δ

Réponse : B. La notation O (Grand O) définit la borne supérieure, c'est-à-dire que l'algorithme ne sera jamais plus lent que cette limite. Ω définit la borne inférieure (au moins aussi lent que) et Θ définit un encadrement strict.

Comment ORBITECH Peut T'aider

ORBITECH AI Academy met à ta disposition des outils concrets pour réviser plus efficacement et progresser à ton rythme.

Tous ces outils sont disponibles sur ta plateforme ORBITECH. Connecte-toi et explore ceux qui correspondent le mieux à tes besoins !

Contenu en libre diffusion — partage autorisé sous réserve de mentionner ORBITECH AI Academy comme source.

COMMENCE DÈS MAINTENANT

Cours approfondis, méthodologie et orientation pour réussir dans le supérieur.

Commencer gratuitement
🌍 ORBITECH AI Academy — Free education in 88 languages for 171 countries