Cours : Algorithmique avancée et graphes
Fiche de Cours : Algorithmique Avancée et Graphes
Section titled “Fiche de Cours : Algorithmique Avancée et Graphes”Filière : MP / MPI (Deuxième année)
Matière : Informatique
1. Rappels et Représentations des Graphes
Section titled “1. Rappels et Représentations des Graphes”Un graphe orienté est défini par un ensemble fini de sommets (ou ) et un ensemble d’arcs (ou ) qui sont des couples d’éléments de . Pour les graphes non orientés, est un ensemble de paires (arêtes). On pose et .
Structures de données usuelles en Ocaml / Python
Section titled “Structures de données usuelles en Ocaml / Python”- Matrice d’adjacence : Tableau 2D de booléens ou de poids de taille .
- Complexité spatiale : .
- Test d’adjacence : .
- Itération sur les voisins : .
- Listes d’adjacence : Tableau ou table de hachage associant à chaque sommet la liste de ses voisins.
- Complexité spatiale : .
- Test d’adjacence : .
- Itération sur les voisins : .
2. Parcours fondamentaux
Section titled “2. Parcours fondamentaux”2.1 Parcours en Largeur (BFS - Breadth-First Search)
Section titled “2.1 Parcours en Largeur (BFS - Breadth-First Search)”Utilise une file (FIFO). Idéal pour calculer les plus plus courts chemins dans un graphe non pondéré.
- Complexité temporelle : (avec listes d’adjacence).
2.2 Parcours en Profondeur (DFS - Depth-First Search)
Section titled “2.2 Parcours en Profondeur (DFS - Depth-First Search)”Utilise une pile (LIFO) ou la récursivité. Permet de dater l’entrée et la sortie des sommets (dates de découverte et de fin de traitement), fondamental pour l’analyse structurelle des graphes.
3. Algorithmes sur les Graphes Pondérés
Section titled “3. Algorithmes sur les Graphes Pondérés”3.1 Algorithme de Dijkstra (Plus courts chemins à sources multiples / unique)
Section titled “3.1 Algorithme de Dijkstra (Plus courts chemins à sources multiples / unique)”- Problème : Étant donné un graphe muni d’une fonction de poids positif et un sommet source , trouver les distances minimales de à tous les autres sommets.
- Principe : Programmation dynamique / Glouton. On maintient un ensemble de sommets traités dont la distance minimale est définitive.
- Complexité avec une file de priorité (tas min) :
3.2 Algorithme de Bellman-Ford
Section titled “3.2 Algorithme de Bellman-Ford”- Problème : Idem Dijkstra, mais autorise les poids négatifs. Détecte la présence de circuits absorbants (de poids strictement négatif).
- Complexité temporelle : .
3.3 Algorithme de Floyd-Warshall (Plus courts chemins de toutes les paires)
Section titled “3.3 Algorithme de Floyd-Warshall (Plus courts chemins de toutes les paires)”- Problème : Trouver les plus courts chemins entre toutes les paires de sommets.
- Principe (Programmation dynamique) : Soit la distance minimale de à en n’utilisant que des sommets intermédiaires dans l’ensemble .
- Complexité temporelle : .
- Complexité spatiale : .
4. Arbres Couvrants de Poids Minimal (ACPM)
Section titled “4. Arbres Couvrants de Poids Minimal (ACPM)”On cherche un sous-graphe acyclique couvrant tous les sommets dont la somme des poids des arêtes est minimale (graphe non orienté connexe).
4.1 Algorithme de Kruskal (Glouton)
Section titled “4.1 Algorithme de Kruskal (Glouton)”- Trier toutes les arêtes par ordre de poids croissant.
- Parcourir les arêtes et les ajouter à l’ACPM si elles ne créent pas de cycle (test réalisé grâce à une structure de Union-Find / Disjoint-Set).
- Complexité temporelle : (dominée par le tri des arêtes).
4.2 Algorithme de Prim (Glouton)
Section titled “4.2 Algorithme de Prim (Glouton)”Similaire à Dijkstra, on fait croître un arbre à partir d’un sommet en ajoutant à chaque étape l’arête de plus petit poids connectant l’arbre à un nouveau sommet.
- Complexité temporelle : avec un tas binaire.
5. Flots dans les Réseaux
Section titled “5. Flots dans les Réseaux”Définitions
Section titled “Définitions”Un réseau de transport est un graphe orienté avec :
- Une source (sans prédécesseur) et un puits (sans successeur).
- Une capacité pour chaque arc .
Un flot est une fonction telle que :
- Contrainte de capacité : .
- Conservation du flot : .
La valeur du flot est la quantité totale sortant de la source : .
5.1 Algorithme de Ford-Fulkerson
Section titled “5.1 Algorithme de Ford-Fulkerson”- Principe : Utilisation du graphe résiduel et recherche de chemins augmentants (par BFS ou DFS dans ).
- Théorème du flot maximal / coupe minimale (Ford-Fulkerson) : Un flot est maximal si et seulement s’il n’existe plus de chemin augmentant dans le graphe résiduel.
- Complexité : Si les capacités sont des entiers, l’algorithme termine en où est la valeur du flot maximal.
- Variante (Edmonds-Karp) : En choisissant les chemins augmentants les plus courts via un BFS, la complexité devient polynomiale :
6. Algorithmique Avancée sur les Chaînes (Complément)
Section titled “6. Algorithmique Avancée sur les Chaînes (Complément)”Algorithme de KMP (Knuth-Morris-Pratt)
Section titled “Algorithme de KMP (Knuth-Morris-Pratt)”Recherche efficace d’un motif de longueur dans un texte de longueur .
- Principe : Utilisation d’une table de transpositions (le tableau ou pi-table) précalculée sur le motif pour éviter de relire les caractères déjà comparés dans le texte.
- Complexité temporelle : (garantie dans le pire des cas, contrairement à l’algorithme naïf en ).