Aller au contenu principal

#Slides : algorithmes avancés

Un point par thème, à projeter avant l'atelier correspondant.

#Programmation dynamique

  • Deux ingrédients : sous-structure optimale + chevauchement de sous-problèmes.
  • Descendant (mémoïsation) pour prototyper, ascendant (tabulation) pour livrer.
  • L'état d'abord, la récurrence ensuite, l'ordre de calcul enfin.
  • Réduction d'espace : tableaux glissants quand la récurrence regarde une bande fixe.
  • Complexités types : sac à dos O(n × W), monnaie O(montant × pièces), LCS O(m × n).

#Algorithmes gloutons

  • Choix local, jamais révisé ; la question est la preuve, pas le code.
  • Argument d'échange : toute solution optimale se transforme en la solution gloutonne sans perte.
  • Intervalles : tri par fin croissante, optimal (preuve en deux phrases).
  • Monnaie : optimal pour certains systèmes seulement (4 et 6 : glouton 3 pièces, optimal 2).

#Plus courts chemins

  • Dijkstra : poids non négatifs, O((V+E) log V) ; arrêt possible à l'extraction de la cible.
  • Entrées périmées dans le tas plutôt que décrément de clé.
  • Bellman-Ford : poids négatifs, O(V·E), détection de cycle négatif par passe finale.
  • Floyd-Warshall : toutes les paires en O(V³) ; critique à la boucle externe.
  • A* : f = g + h ; h admissible garantit l'optimalité, h consistante évite les réouvertures.

#Graphes : parcours et arbres couvrants

  • BFS : couches de distance, plus court chemin non pondéré ; DFS : tri topologique, cycles, composantes.
  • Kruskal : tri des arêtes + union-find, O(E log E) ; Prim : tas d'arêtes frontière, O(E log V).

#Tri rapide

  • Partition autour d'un pivot ; invariant : petits à gauche, grands à droite.
  • Moyenne O(n log n), pire cas O(n²) sur pivot systématiquement extrême.
  • Durcissements : médiane de trois, coupure insertion, récursion sur le petit côté d'abord.
  • Non stable : préférer Timsort pour des clés composites.

#Codage de Huffman

  • Fusion gloutonne des deux plus faibles fréquences ; code préfixe par construction.
  • Optimal parmi les codes préfixes : échange (les deux plus rares sont frères en bas) + induction.

#Métaheuristiques

  • Génétiques : encodage, adaptation, sélection, croisement, mutation ; aucun garantie d'optimalité.
  • Trois compromis à régler : taille de population, taux de mutation, pression de sélection.
  • Toujours comparer à une heuristique dédiée sur le même budget.

#Limites

  • NP-difficulté : pas d'algorithme polynomial connu, l'heuristique devient légitime.
  • Retour arrière puis branch-and-bound : explorer avec bornes pour élaguer.
  • Garanties d'approximation quand elles existent : les énoncer explicitement.