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. + + #### 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