Structures de données et algorithmes

Quelle est une caractéristique de l'algorithme de Boyer-Moore, qui recherche un motif dans une chaîne de caractères ?

  1. AIl compare le motif en partant de son dernier caractère et utilise des informations, par exemple le fait que le caractère du texte en désaccord n'apparaît pas dans le motif, pour décaler le motif d'un grand pas en une fois
  2. BIl décale le motif d'un caractère à la fois depuis le début du texte et compare à chaque fois tous les caractères du motif, du premier au dernier
  3. CIl trie le texte et le motif, puis trouve le motif par recherche dichotomique
Afficher la réponse et l'explication

Réponse : A. Il compare le motif en partant de son dernier caractère et utilise des informations, par exemple le fait que le caractère du texte en désaccord n'apparaît pas dans le motif, pour décaler le motif d'un grand pas en une fois

L'algorithme de Boyer-Moore compare le motif à partir de son dernier caractère et précalcule des tables de sorte que, par exemple, si le caractère du texte en désaccord n'apparaît pas du tout dans le motif, tout le motif puisse être décalé au-delà de ce caractère. Sur un texte en langue naturelle, il peut ainsi sauter de nombreux caractères sans les comparer. Pour un texte de longueur n et un motif de longueur m, la méthode naïve qui décale d'un caractère à la fois et compare tout prend O(nm) dans le pire cas. L'algorithme KMP utilise lui aussi les informations de désaccord pour décaler le motif, mais il compare depuis le début du motif et garantit O(n + m) même dans le pire cas.

S'entraîner sur ce thème Retour au thème

Autres questions sur Structures de données et algorithmes

  1. Un tableau dynamique, quand on ajoute un élément alors qu'il est plein, alloue une nouvelle zone de capacité double et y copie tous les éléments. Si l'on ajoute un à un 1000 éléments à un tableau vide de capacité 1, combien de copies d'éléments sont effectuées au total ?
  2. Pour une table de hachage contenant de nombreux éléments et maintenue à un facteur de charge d'environ 0,5, quelle est la raison la plus appropriée pour laquelle l'adressage ouvert avec sondage linéaire tend à être plus rapide que le chaînage (relier les éléments par des listes chaînées) ?
  3. Des méthodes de tri dont la suite d'étapes de comparaison-échange est fixée d'avance (réseaux de tri), comme le tri bitonique, sont parfois utilisées pour trier sur du matériel parallèle comme les GPU. Pourquoi ?
  4. Pour un tableau de n éléments, quelle est la complexité temporelle d'un traitement qui compare une seule fois chaque paire d'éléments distincts (une double boucle qui compare l'élément i à tous les éléments situés après lui, en faisant avancer i d'un cran à chaque fois) ?
  5. Un programme de complexité temporelle O(n²) met 0,5 seconde pour 1000 données. Combien de temps mettra-t-il environ pour 4000 données ?