Aller au contenu

Chapitre 8 - Révision : Algorithmique avancée et recherche textuelle


Principe : Diviser → Régner (récursion) → Combiner

AlgorithmeDiviserCombinerComplexité
Tri fusionCouper en 2FusionnerO(n log₂ n)
Rotation d'image4 blocsPermuterO(n²)
Exponentiation rapiden/2MultiplierO(log₂ n)

Tri fusion : stable, O(n log₂ n) dans tous les cas.


  • Quand : sous-problèmes chevauchants + sous-structure optimale
  • Mémoïsation (descendante) : récursion + dictionnaire de cache
  • Tabulation (ascendante) : remplir un tableau de bas en haut
ProblèmeRelation de récurrenceComplexité
FibonacciF(n) = F(n-1) + F(n-2)O(n) vs O(2ⁿ) naïf
Rendu de monnaienb[s] = 1 + min(nb[s-p])O(somme × nb_pièces)
Distance d'éditiond[i][j] = min(ins, sup, sub)O(n × m)

  • Comparaison de droite à gauche
  • Prétraitement : table du mauvais caractère (dernière occurrence de chaque lettre)
  • Cas favorable : O(n/m) - sous-linéaire
  • Cas défavorable : O(n × m) - comme l'algorithme naïf
AlgorithmePrétraitementMeilleur casPire cas
NaïfAucunO(n)O(n × m)
Boyer-MooreO(m)O(n/m)O(n × m)