From 1cc0620914385431766de421abaa6dd9fa9083c5 Mon Sep 17 00:00:00 2001
From: Vincent Nivoliers <vincent.nivoliers@gmail.com>
Date: Wed, 6 Mar 2019 00:37:15 +0100
Subject: [PATCH] fin de l'optimisation dans le sujet

---
 Images/uf_compression.png | Bin 0 -> 9166 bytes
 Images/uf_compression.tex |  56 ++++++++++++++++++++++++++++++++++++++
 readme.md                 |  40 +++++++++++++++++++++++++--
 3 files changed, 94 insertions(+), 2 deletions(-)
 create mode 100644 Images/uf_compression.png
 create mode 100644 Images/uf_compression.tex

diff --git a/Images/uf_compression.png b/Images/uf_compression.png
new file mode 100644
index 0000000000000000000000000000000000000000..58ee9b276621e92c9348804ac8e00aae614a76e1
GIT binary patch
literal 9166
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
VZ8JOXGwJLNzyM~d+n|kz`X5u9EtLQO

literal 0
HcmV?d00001

diff --git a/Images/uf_compression.tex b/Images/uf_compression.tex
new file mode 100644
index 0000000..63ebb92
--- /dev/null
+++ b/Images/uf_compression.tex
@@ -0,0 +1,56 @@
+\documentclass{standalone}
+\usepackage{tikz}
+
+\begin{document}
+
+\tikzset{
+  ufnode/.style={
+    circle,
+    draw,
+    thick
+  },
+  ufedge/.style={
+    -latex, 
+    thick
+  }
+}
+
+\begin{tikzpicture}
+  \draw
+  (0,1) node[ufnode] (n00) {0}
+  (1,2) node[ufnode] (n10) {1}
+  (2,1) node[ufnode] (n20) {2}
+  (-1,0) node[ufnode] (n30) {3}
+  (1,0) node[ufnode] (n40) {4}
+  (1,-1) node[ufnode] (n50) {5}
+  ;
+
+  \draw[ufedge] (n00) -- (n10) ;
+  \draw[ufedge] (n20) -- (n10) ;
+  \draw[ufedge] (n30) -- (n00) ;
+  \draw[ufedge] (n40) -- (n00) ;
+  \draw[ufedge] (n50) -- (n40) ;
+  \draw[ufedge] (n10) edge[loop above] (n10) ;
+
+  \draw[ufedge] (4,1) -- (6.5,1) ;
+
+  \draw
+  (-0.5,1) +(9,0) node[ufnode] (n01) {0}
+  (1,2)    +(9,0) node[ufnode] (n11) {1}
+  (2.5,1)  +(9,0) node[ufnode] (n21) {2}
+  (-1.5,0) +(9,0) node[ufnode] (n31) {3}
+  (0.5,1)  +(9,0) node[ufnode] (n41) {4}
+  (1.5,1)  +(9,0) node[ufnode] (n51) {5}
+  ;
+
+  \draw[ufedge] (n01) -- (n11) ;
+  \draw[ufedge] (n21) -- (n11) ;
+  \draw[ufedge] (n31) -- (n01) ;
+  \draw[ufedge] (n41) -- (n11) ;
+  \draw[ufedge] (n51) -- (n11) ;
+  \draw[ufedge] (n11) edge[loop above] (n11) ;
+
+
+\end{tikzpicture}
+
+\end{document}
diff --git a/readme.md b/readme.md
index 4d8f47a..fd3e105 100644
--- a/readme.md
+++ b/readme.md
@@ -173,7 +173,43 @@ peuvent être nettement améliorées grâce à deux idées simples à mettre en
 
 Lorsque vous cherchez la racine d'un arbre, vous partez d'un nœud et sautez de
 nœud en nœud pour la trouver. La compression de chemin fait en sorte qu'une fois
-la racine trouvée, tous les nœuds sur le chemin changent de parent, pour prendre
-directement la racine pour parente.
+la racine trouvée, tous les nœuds sur le chemin changent de parent pour prendre
+directement la racine pour parente. Cette optimisation est particulièrement
+facile dans le cadre d'une implémentation récursive de la recherche de racine.
+Dans l'image ci-dessous, une recherche de racine sur le noeud 5 va modifier les
+parents de 5 et 4 pour qu'ils se placent directement sous 1.
+
+![exemple compression de chemin](Images/uf_compression.png)
 
 #### Minimisation des hauteurs
+
+La complexité d'une recherche dans le pire cas est la hauteur de l'arbre dans
+laquelle elle est lancée. Lors de l'union de deux ensembles, il est possible
+d'essayer de faire en sorte de n'augmenter les hauteurs des arbres que le moins
+possible. Si les deux arbres dont de profondeurs différentes, en spécifiant la
+racine de l'arbre le plus profond comme parente de la racine de l'arbre le moins
+profond, la profondeur de l'arbre final est la même que celle de l'arbre le plus
+profond. Ce n'est donc que lorsqu'on fusionne deux arbres de mêmes hauteurs
+que nous obtenons un arbre de profondeur plus importante.
+
+La compression de chemin modifie la profondeur des arbres. Il est ainsi
+difficile d'avoir la valeur exacte de leur profondeur. On se contente donc d'une
+approximation, en faisant comme s'il n'y avait jamais eu de compression de
+chemin. Cette approximation est donc toujours pire que la réalité.
+
+Pour stocker les hauteurs, il vous suffit d'ajouter un tableau qui stocke pour
+chaque nœud une profondeur. Initialement toutes les profondeurs sont à 1. Lors
+d'une fusion, seule les profondeurs des racines sont importantes. Les
+profondeurs des nœuds ne restent donc utiles que tant qu'il sont la racine de
+leur arbre. Dès qu'ils se retrouvent sous un parent, il n'est plus nécessaire de
+mettre à jour leur profondeur.
+
+#### Complexité finale
+
+Avec ces deux optimisations, la compression de chemin devient beaucoup plus
+efficace lorsque la complexité est examinée de façon amortie sur un grand nombre
+d'opérations. Les deux opérations de recherche et d'union peuvent ainsi être
+réalisées avec une complexité de l'ordre de l'inverse de la fonction
+d'Ackermann. En pratique, pour des valeurs de n raisonnables, l'inverse de la
+fonction d'Ackermann ne dépasse pas 5, donc cette complexité est très proche
+d'une complexité constante.
-- 
GitLab