TD4 : Splay tree
Transcription
TD4 : Splay tree
MIT 1re année - 2010/11 Module Algo2 TD4 : Splay tree Introduction Ce TD est tiré de l’article Self-adjusting Binary Search Trees, Sleator et Tarjan, 1985. On souhaite réaliser une séquence d’accès sur un ensemble d’éléments muni d’une relation d’ordre total. L’accès à un élément prend en entrée une clé, et retourne soit l’élément concerné avec ses informations s’il existe, soit une information indiquant que l’élément n’existe pas. Une façon de résoudre ce problème est d’utiliser des arbres binaires de recherche (ABR). Supposons que l’on souhaite réaliser m accès successifs à des éléments de l’ensemble. Afin de réduire le coût total d’accès il faut que les éléments les plus fréquemment touchés soient près de la racine. Principe Les arbres déployés sont une forme d’arbres binaires de recherche auto-ajustables. Ils remontent près de la racine les éléments régulièrement accédés. Pour cela, on utilise l’heuristique déployer (splaying). Déployer en un élément x de l’arbre consiste à appliquer autant de fois que nécessaire les rotations suivantes afin de faire remonter x à la racine (on note p(x) le père de x) : 1. (zig) : si p(x) est la racine, retourner l’arête joignant x à p(x) 2. (zig-zig) : sinon, si x et p(x) sont tous les deux des fils gauches (ou droits), alors retourner l’arête joignant p(x) avec p(p(x)), puis celle joignant x avec p(x) 3. (zig-zag) : sinon (x est un fils gauche et p(x) est un fils droit, ou inversement), retourner l’arête joignant x avec p(x), puis celle joignant x avec le nouveau p(x). (1) zig (2) zig-zig (3) zig-zag Figure 1 – Les trois types de rotations (cas symétriques omis) Question 1 Dérouler le déploiement sur un exemple (voir tableau). Question 2 Quelle est la complexité d’un déploiement en un nœud x de l’arbre ? 1 MIT 1re année - 2010/11 Module Algo2 Analyse amortie du déploiement On définit le potentiel d’un arbre déployé ainsi : – chaque élément i possède un poids P positif w(i), de valeur arbitraire mais fixée. – la taille d’un nœud x, s(x) = i∈sa(x) w(xi ). – le rang d’un noeud x est r(x) = log(s(x)). – le potentiel d’un arbre est la somme des rangs de ses nœuds. Le coût réel de déployer est le nombre de rotations effectuées (1 s’il n’y en a pas). Question 3 On note azig , azig-zig et azig-zag les coûts amortis des rotations. Montrer que azig ≤ 1 + 3(r0 (x) − r(x)), azig-zig ≤ 3(r0 (x) − r(x)) et azig-zag ≤ 3(r0 (x) − r(x)) avec r(x) le rang de x avant l’opération, et r0 (x) le rang après. On pourra utiliser le fait que si x, y > 0 et x + y ≤ 1, alors log(x) + log(y) ≤ −2. Question 4 (Lemme d’accès) En déduire que le temps amorti pour déployer sur x d’un arbre enraciné en t est d’au plus 3(r(t) − r(x)) + 1 = O(log(s(t)/s(x))). Le poids des éléments est un paramètre de l’analyse et non de l’algorithme. En choisissant bien ces poids, on peut obtenir des résultats intéressants sur les splay tree. On considère Pn maintenant une suite de m accès, et on pose W = i=1 w(i). Dans la suite, on choisira les w(i) tels que W = 1. Question 5 (Théorème d’équilibre) Montrer que le temps total d’accès est O((m + n) log(n) + m). Ce théorème affirme que sur une séquence suffisamment longue d’accès un arbre déployé est aussi efficace que n’importe quelle forme d’arbre équilibré. Question 6 (Théorème d’optimalité statique) Soit q(i) le nombre d’accès à l’élément i. Montrer P que si tous les objets sont accédés au moins une fois, alors le temps total d’accès m )). Ce théorème implique qu’un arbre déployé est aussi efficace est O(m + ni=1 q(i) log( q(i) qu’un arbre de recherche fixé, y compris l’arbre optimal pour la séquence d’accès. En effet, P m le temps total d’accès pour n’importe quel arbre fixé est Ω(m + ni=1 q(i) log( q(i) )). Implémentation Les splay tree supportent les fonctionalités suivantes : test d’appartenance, insertion, suppression. Elles sont toutes réalisables à partir d’opération(s) de déploiement et de modification à la racine d’un arbre. Elles ont donc un coût comparable à celui du déploiement. Remarque : déployer en un élément i absent de l’arbre consiste à réaliser le déploiement sur le dernier noeud i0 sur le chemin d’accès à i. Question 7 Implémenter la structure de donnée des splay tree (l’opération de déploiement est donnée). Pour simplifier, on suppose que les clefs sont les éléments mêmes de l’arbre. 2