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

Documents pareils