Parfait ! Voici le résumé détaillé du cours d'Algorithmes Répartis, formaté en Markdown.

# 🎓 Résumé Détaillé du Cours d'Algorithmes Répartis

[cite_start]Ce cours couvre les concepts fondamentaux des systèmes distribués et les algorithmes clés pour résoudre des problèmes de coordination et d'accord, tels que l'élection, l'exclusion mutuelle, le consensus, et la diffusion d'information[cite: 1540, 2061].

---

## I. Concepts Fondamentaux des Systèmes Distribués

### Définition et Caractéristiques

[cite_start]Un système distribué est un ensemble d'unités de traitement autonomes (**processus**, **processeurs**, ou **nœuds**) interconnectées sans mémoire partagée, que l'utilisateur voit pourtant comme une machine unique[cite: 1560, 1562].

* [cite_start]**Autonomie** : Chaque nœud prend ses propres décisions locales (programmes, mémoires)[cite: 1584, 1586].
* [cite_start]**Interconnexion** : Les échanges d'informations se font via **messages**[cite: 1624, 1629].
* [cite_start]**Asynchronisme et Absence de Temps Global** : L'exécution des nœuds est asynchrone, et les horloges locales sont différentes[cite: 1593, 1594, 1863]. [cite_start]Cela implique un ordre seulement **partiel** entre les actions, défini par la **causalité** (ordre de Lamport)[cite: 1865].

### Modélisation et Hypothèses

[cite_start]Les caractéristiques d'un système distribué dépendent de sa **topologie**, de ses **liens de communication**, de ses **processus**, et du **temps**[cite: 1907, 1908, 1909, 1910].

| Caractéristique | Modèles et Spécificités Techniques | Sources |
| :--- | :--- | :--- |
| **Topologie** | [cite_start]Graphe $G=(V, E)$ (anneau, arbre, étoile, clique)[cite: 1916, 1934, 1935, 1936, 1937]. [cite_start]On suppose souvent des communications **bidirectionnelles** et une topologie **connexe**[cite: 1921]. [cite_start]| [cite: 1916, 1934, 1935, 1936, 1937, 1921] |
| **Communications** | [cite_start]**Fiabilité** (fiable, perte équitable)[cite: 1943]. [cite_start]**Ordre** (FIFO, quelconque)[cite: 1946]. [cite_start]**Temps d'acheminement** : **Synchrone** (borne $c$ connue sur le temps de transmission) ou **Asynchrone** (pas de borne connue)[cite: 1956, 1957, 1948]. [cite_start]| [cite: 1943, 1946, 1956, 1957, 1948] |
| **Processus** | [cite_start]**Identifié** (UID unique, e.g., adresse IP) ou **Anonyme**[cite: 1980, 1981, 1992]. [cite_start]Sujet ou non aux **pannes** (arrêt, omission, byzantine)[cite: 1962, 2008, 2009, 2010, 2011]. [cite_start]| [cite: 1980, 1981, 1992, 1962, 2008, 2009, 2010, 2011] |
| **Complexité** | [cite_start]Évaluée en nombre de **messages** (espace) ou en nombre de **rondes** (temps, en synchrone)[cite: 2072, 2075]. [cite_start]| [cite: 2072, 2075] |

---

## II. Les Horloges Logiques et l'Ordre Causal

[cite_start]Les horloges logiques permettent d'ordonner les événements sans horloge physique globale[cite: 2100].

### Relation de Précédence (Happens-Before $\rightarrow$)

[cite_start]La relation $\rightarrow$ établit un **ordre partiel** entre les événements[cite: 2214].

* [cite_start]$E_1 \rightarrow E_2$ si $E_1$ et $E_2$ se suivent dans le même processus[cite: 2116].
* [cite_start]$E_1 \rightarrow E_2$ si $E_1$ est l'émission d'un message et $E_2$ sa réception[cite: 2117].
* [cite_start]Elle est **transitive**, **irréflexible** et **antisymétrique**[cite: 2127, 2129, 2131].
* [cite_start]Deux événements $E$ et $E'$ sont **concurrents** ($E || E'$) s'ils n'ont pas de relation de précédence[cite: 2227].

### Types d'Horloges Logiques

| Type | Représentation | Mise à Jour (Événement Local $P_i$) | Mise à Jour (Réception $m$ de $P_j$, estampillé $H$) | Caractéristique / Propriété | Sources |
| :--- | :--- | :--- | :--- | :--- | :--- |
| **Scalaire (Lamport)** | [cite_start]Entier $H_i$[cite: 2279]. | [cite_start]$H_i := H_i + 1$[cite: 2283]. | [cite_start]$H_i := \mathbf{Max}(H_i, H) + 1$[cite: 2284]. | [cite_start]Si $E_1 \rightarrow E_2$, alors $H(E_1) < H(E_2)$ (condition faible)[cite: 2088]. [cite_start]Ne garantit pas la causalité[cite: 2578]. [cite_start]| [cite: 2279, 2283, 2284, 2088, 2578] |
| **Vectorielle (Mattern)** | [cite_start]Vecteur $V_i$ de taille $N$[cite: 2714]. | [cite_start]$V_i[i] := V_i[i] + 1$[cite: 2716]. | [cite_start]$V_i[i] := V_i[i] + 1$, et $\forall k \ne i, V_i[k] := \mathbf{max}(V_i[k], V[k])$[cite: 2719, 2720]. | [cite_start]$\mathbf{E_1 \rightarrow E_2 \Leftrightarrow V(E_1) < V(E_2)}$ (préserve la causalité)[cite: 2753, 2752]. [cite_start]$V[i]$ : nombre d'événements de $P_i$ connus[cite: 2686]. [cite_start]| [cite: 2714, 2716, 2719, 2720, 2753, 2752, 2686] |
| **Matricielle** | [cite_start]Matrice $HM_i$ de taille $N \times N$[cite: 2792]. | [cite_start]$HM_i[i, i] := HM_i[i, i] + 1$, $HM_i[i, j] := HM_i[i, j] + 1$ (émission vers $P_j$)[cite: 2804, 2805]. | [cite_start]Mise à jour conditionnelle pour garantir la délivrance causale[cite: 2814, 2815]. | [cite_start]$HM_i[j, k]$ : connaissance de $P_i$ sur le nombre de messages de $P_j$ vers $P_k$[cite: 2796]. [cite_start]| [cite: 2792, 2804, 2805, 2814, 2815, 2796] |

---

## III. Problèmes Fondamentaux et Algorithmes

### 1. Problème d'Élection 👑

[cite_start]**Spécification** : Un et un seul nœud termine dans l'état **ÉLU**[cite: 331].

| Algorithme | Modèle / Topologie | Idée Clé | Complexité en messages (Pire Cas) | Sources |
| :--- | :--- | :--- | :--- | :--- |
| **Impossibilité** | Anneau synchrone, **anonyme** | [cite_start]La symétrie ne peut pas être brisée[cite: 338, 366]. | [cite_start]N/A | [cite: 338, 366] |
| **Chang & Roberts** | [cite_start]Anneau unidirectionnel asynchrone, identifié[cite: 399, 396]. | Propagation des candidatures (UID). [cite_start]L'ID maximal gagne et fait une annonce **LEADER**[cite: 405, 407, 437]. | [cite_start]$O(N^2)$ [cite: 566] [cite_start]| [cite: 399, 396, 405, 407, 437, 566] |
| **Hirschberg & Sinclair** | [cite_start]Anneau **bidirectionnel** asynchrone, identifié[cite: 675]. | [cite_start]Rondes d'envoi de l'ID sur des **distances croissantes** ($2^k$)[cite: 689, 690]. [cite_start]Le vainqueur est celui qui réussit à transmettre sur toute la distance[cite: 691]. | [cite_start]$O(N \log N)$ [cite: 712] [cite_start]| [cite: 675, 689, 690, 691, 712] |

---

### 2. Problème d'Exclusion Mutuelle 🔒

[cite_start]**Propriétés** : **Sûreté** (un seul processus en SC) et **Vivacité** (toute demande est satisfaite en temps fini)[cite: 908, 909].

| Algorithme | Type | Principe Clé | Complexité en messages (Par accès) | Sources |
| :--- | :--- | :--- | :--- | :--- |
| **Centralisé** | [cite_start]Basé sur un **coordinateur**[cite: 913]. | [cite_start]Le coordinateur centralise les requêtes, gère une file d'attente et délivre les permissions[cite: 916, 917]. | [cite_start]$2$ ou $3$ messages (Demande, Permission, Sortie)[cite: 984]. [cite_start]| [cite: 913, 916, 917, 984] |
| **Le Lann** | [cite_start]Basé sur un **jeton** dans un anneau unidirectionnel[cite: 999, 1000]. | [cite_start]Seul le détenteur du jeton entre en SC[cite: 1001, 1059]. | [cite_start]$N$ (un tour d'anneau)[cite: 1085]. [cite_start]| [cite: 999, 1000, 1059, 1085] |
| **Lamport** | [cite_start]Basé sur les **permissions** et les **horloges scalaires**[cite: 2280]. | Requêtes triées par estampille (date + UID). [cite_start]Nécessite un **ACK** de tous les autres processus[cite: 2298, 2305]. | [cite_start]$3(N-1)$ messages[cite: 2384]. [cite_start]| [cite: 2280, 2298, 2305, 2384] |
| **Ricart et Agrawala** | [cite_start]Basé sur les **permissions** et les **horloges scalaires**[cite: 2487]. | Évite l'ACK systématique. [cite_start]Envoie un $REL$ (permission) seulement si la requête est prioritaire ou si le processus n'est pas demandeur[cite: 2491, 2502, 2503]. | [cite_start]$2(N-1)$ messages[cite: 2566]. [cite_start]| [cite: 2487, 2491, 2502, 2503, 2566] |

---

### 3. Problème de Consensus et Généraux Byzantins 🤝

[cite_start]**Objectif** : Accord des processus sur une valeur unique[cite: 10].

* [cite_start]**Problème des Généraux Byzantins** [cite: 14] [cite_start]: Les processus (généraux) doivent se mettre d'accord sur un plan de bataille (valeur) malgré la présence de **traîtres** (fautes arbitraires) qui envoient des messages contradictoires[cite: 15, 95, 96].
    * [cite_start]**Impossibilité Fondamentale** : Aucune solution n'existe si le nombre de processus $N$ est inférieur ou égal à $\mathbf{3f}$, où $f$ est le nombre de processus défectueux ($N \le 3f$)[cite: 150].
    * [cite_start]**Condition de Solution** : Une solution est possible si $\mathbf{N \ge 3f + 1}$[cite: 150].

---

### 4. Problème de Diffusion d'Information 📢

[cite_start]Cas où un processus envoie un message à tous les autres, en assurant la cohérence[cite: 1288, 1315].

| Type de Diffusion | Contrainte d'Ordre | Mise en Œuvre Technique | Sources |
| :--- | :--- | :--- | :--- |
| **Fiable (Reliable)** | [cite_start]**Accord** : tous les processus corrects livrent le message[cite: 1314]. | [cite_start]Utilise un **numéro de séquence** et une propagation aux voisins pour s'assurer que le message est bien délivré par tous[cite: 1324, 1329, 1347]. [cite_start]| [cite: 1314, 1324, 1329, 1347] |
| **FIFO** | [cite_start]L'ordre d'émission par un processus est respecté à la livraison (délivrer $m_1$ avant $m_2$ si $m_1$ a été émis avant $m_2$)[cite: 1359]. | [cite_start]Utilisation de $msgBag$ et d'un compteur $next[q]$ pour différer la livraison des messages non attendus[cite: 1386, 1409]. [cite_start]| [cite: 1359, 1386, 1409] |
| **Causale** | [cite_start]L'ordre causal ($\rightarrow$) est respecté (délivrer $m_1$ avant $m_2$ si $m_1 \rightarrow m_2$)[cite: 1425]. | Estampillage des messages avec un **vecteur d'horloges**. [cite_start]Le récepteur diffère la livraison si des messages causalement précédents manquent[cite: 1445, 1446]. [cite_start]| [cite: 1425, 1445, 1446] |
| **Atomique (Totale)** | [cite_start]Tous les processus livrent les messages dans le **même ordre total**[cite: 1482]. | [cite_start]Utilise un **protocole de validation à deux phases** pour déterminer une estampille définitive unique[cite: 1492, 1493]. [cite_start]| [cite: 1482, 1492, 1493] |

---

Ce résumé fournit une vue complète des objectifs, des mécanismes et de la complexité des principaux algorithmes étudiés. Souhaitez-vous approfondir l'analyse de la complexité ou la preuve de l'un de ces algorithmes ?
