Structures de données avancées : Fichiers multidimensionnels Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI) zegour.esi.dz
Concepts du multidimensionnel
Les méthodes traditionnelles Utilisent les listes inversées Autant d'indexes secondaires que d'attributs Coûteuses pour les grands fichiers Concepts du multidimensionnel Les méthodes modernes N'utilisent pratiquement pas d'index Utilisent le concept des tableaux extensibles Visent un accès disque
Article = point de l'espace d- dimensionnel D 1 X D 2 X....X D d Concepts du multidimensionnel : Terminologie Article = ( k 1, k 2,...k d ) d attributs A 1, A 2,......, A d, d est la dimension K i appartient à un domaine D i Généralement, une clé primaire (k 1 ) et d-1 clés secondaires (k 2, K 3,...K d ) Requête exacte (Exact match query ) Tous les attributs sont spécifiés ( Articles avec A1=k1, A2=k2,....Ad=Kd ) Requête partielle (Partial match query ) : Quelques attributs sont spécifiés Requête par intervalle ( Region query ) Un intervalle est spécifié pour chaque attribut. Principales opérations
Ordre de rangement des sous tableaux A(i, *, *,..., *) : A(a 1, *, *,..., *), A(a 1 +1, *, *,..., *), A(a 1 +2, *, *,..., *), , A(b 1, *, *,..., *) Concepts du multidimensionnel: Tableau statique Une déclaration typique : A(a 1 :b 1 ; a 2 :b 2 ;......a n :b n ) A l'intérieur de chaque sous tableau A(i, *, *,...., *), l'ordre suivant des sous sous-tableaux est considéré : A(i, a2, *, *,..., *), A(i, a2+1, *, *,..., *), A(i, a2+2, *, *,..., *),......, A(i, b2, *, *,..., *) Etc.
Exemple pour un tableau A(3, 2, 3) Concepts du multidimensionnel: Tableau statique
Partie variable : i 1 i=2,n d i + i 2 i=3,n d i i n-1 d n + i n Adresse d'un élément A(i 1, i 2.., i n ) ? Posons d i = b i - a i + 1 Adresse de A(i 1, *, *,....) : AD 1 = Base + (i 1 -a 1 ) d 2 d 3...d n Adresse de A(i 1, i 2, *,....) : AD 2 = AD 1 + (i 2 -a 2 )d 3 d 4...d n Adresse de A(i 1, i 2,...i n ) : AD n = Base + (i 1 -a 1 )d 2 d 3..d n + (i 2 -a 2 )d 3 d 4...d n (i n-1 -a n-1 )d n + (i n -a n ) Partie constante : Base -(a 1 i=2,n d i + a 2 i=3,n d i +...+a n-1 d n + a n ) Si a1 = a2 = = an = 0, l‘adresse de A(i1, i2,...in) est i1d2d3..dn + i2d3d4...dn in-1dn + in = j=1,n ( i j. i=j+1,n d i ) Concepts du multidimensionnel: Tableau statique
Le tableau est représenté en mémoire de manière contiguë M[0..V] avec V = i=1,k [ ( U i + 1) ] – 1 A[0, 0,...] a comme image M[0]. Concepts du multidimensionnel: Tableau extensible A[0:U 1, 0:U 2,....,0:U k ], U i variable L'état initial U i est 0 pour tout i dans {1, 2,...,k) A[j 1, j 2,...j k ] représente un élément du tableau. Chaque j i est dans l'intervalle [0..U i ] Un schéma d'allocation du tableau A est une fonction bijective Loc : Nk ---> N telle que : (i) Loc( ) = 0 (ii) Loc( ) ) ssi pour i k, a t = b t pour 1 t < i et a i < b i sinon Fonction d’allocation
Utilisation d’un tableau d'index : IXA[1..K, 0..X, 1..K) Première dimension : 1 tableau par dimension Deuxième dimension :évolution des indices Troisième dimension : base et facteur multiplicatif pour chaque dimension X = Max (U 1, U 2,....,U k ) Concepts du multidimensionnel: Tableau extensible Rangement(KDEA : K-Dimensional Extensible Array ) IXA = K tableaux 2-dimensionnel distinct Bi [0..Ui, 1..k] avec i=1, k.
B J1 J Exemple Mécanisme d'expansion dans le cas d'un 2DEA ( U 1, U 2 ) = (3, 4) [Axe 2] (3, 3) [Axe 1] (2, 3) [Axe 2] (2, 2) [Axe 1] (1, 2) [Axe 1] (0, 2) [Axe 2] (0, 1) [Axe 2] B1 B2 Concepts du multidimensionnel: Tableau extensible
Donc il suffit de prendre le Max entre B2(5,2) et B1 (1,1). Concepts du multidimensionnel: Tableau extensible Comment calculer l‘adresse d'un élément arbitraire soit A (1, 5) ? Est-ce que A(1, 5) appartient à une ligne ou une colonne? Si A(1, 5) a été ajouté à la ligne 1, B2 (5,2) devrait avoir une valeur inférieure à l‘adresse début de la ligne 1 qui est B1 (1, 1).
1. Étendre B t [0:U t, 1..K] à B t [0:U t + 1, 1..K ] 2. B t [U t +1,t] (U t +1)* r=1, k et r # t. (U r + 1) [base] 3. B t (U t +1, q] r=q+1,..., k et r # t ( U r + 1) [facteurs multiplicatifs] q=1, K et q <> t. Concepts du multidimensionnel: Tableau extensible Procédure d'allocation: Étendre(t) : t index, t =1, k 1. Déterminer l'indice t tel que B t [j t, t] Max { B i [j i, i], i=1,..,K } 2. Adresse B t [j t,t]+ r = 1,...,K et r # t ( B t [j t, r] * j r ) Fonction d'accès: Adresse de A(j 1, j 2,..., j k ) ?
Calcul des adresses Adr(0,0)=0Adr(0,1)=3 Adr(0,2)=6 Adr(0,3)=12 Adr(0,4)=24 Adr(1,0)=1 Adr(1,1)=4Adr(1,2)=7 Adr(1,3)=13Adr(1,4)=25 Adr(2,0)=2Adr(2,1)=5 Adr(2,2)=8Adr(2,3)=14 Adr(2,4)=26Adr(3,0)=9 Adr(3,1)=10Adr(3,2)=11 Adr(3,3)=15Adr(3,4)=27 Adr(4,0)=16Adr(4,1)=17 Adr(4,2)=18Adr(4,3)=19 Adr(4,4)=28Adr(5,0)=20 Adr(5,1)=21Adr(5,2)=22 Adr(5,3)=23Adr(5,4)=29 Exemple Calcul d’adresse k=2 ; E= 1, 1, 2, 2, 1, 2, 1, 1, 2 B1 1 : : : : B2 Concepts du multidimensionnel: Tableau extensible
1 : : : Exemple Calcul d’adresse k=3; E=1, 2, 3, 1, 2, 3, 1, 2, 3 1 : : : : : : B1 B2 B3 Concepts du multidimensionnel: Tableau extensible
A 0 = tableau d-dim contenant le seul élément A(0, 0,...,0) Concepts du multidimensionnel: Tableau linéaire dynamique Un tableau d-dimensionnel est dit tableau linéaire dynamique s'il peut être généré récursivement comme suit: A 0 = { A(0, 0,..., 0) } A l+1 = A l U A l‘ A l et A l‘ sont des ensembles ordonnés tel que (1) A l A l‘ = (2) Pour chaque élément A(i 0, i 1...,i d-1 ) de A l dans un ordre linéaire ajouter A(i' 0, i' 1,...,i' d-1) où i' j = i j pour tout j, j#r i' r = i r + 2 L Avec l = L.d + r (d : dimension ; L : nombre de cycles; l : nombre d’extensions )
3. A 2 = A 1 U A' 1 l=1 ==> L=0 et r=1 donc 2 L = 1 A 2 = { A(0, 0), A(1, 0), A(0, 1), A(1, 1)} (Ajouter 2 L = 1 à la composante r=1 des éléments de A 1 ) 4. A 3 = A 2 U A' 2 l=2 ==> L=1 et r=0 donc 2 L = 2 A 3 = { A(0, 0), A(1, 0), A(0, 1), A(1, 1), A(2, 0), A(3, 0), A(2, 1), A(3, 1) } Ajouter 2 L =2 à la composante r=0 des éléments de A2 l = L.d + r Concepts du multidimensionnel: Tableau linéaire dynamique Exemple pour d = 2 1. A 0 = {A(0, 0)} 2. A 1 = A 0 U A' 0 l=0 L = 0 et r=0 donc 2 L = 1 A 1 = { A(0, 0), A(1, 0) } (Ajouter 2 L à la composante r=0) Ect...
Concepts du multidimensionnel: Tableau linéaire dynamique Évolution du fichier ( vue par niveau ) Adresses logiques des cases pour l = 5:
Hachage linéaire multidimensionnel (MLH)
Une clé k = (k 0, k 1,..., k d-1 ) peut être vue comme un vecteur dans un espace D-dimensionnel, où chaque axe correspond à un attribut différent. MLH : Considérations Soit K = D 0 X D 1 X.....X D d-1 l’espace des clés D i est le domaine correspondant à l'attribut A i. Utilise les tableaux linéaires dynamiques
En fin de cette séquence de division, le nombre de cases double. MLH: Principe Appliquer LH consécutivement sur chaque axe Chaque division dépend seulement de l'axe courant. Les N premières collisions sont résolues selon uniquement l'axe 0 (comme si les clés ne sont composées que d'une seule composante k 0 ) En général, N=1 au départ Par la suite, si des collisions apparaissent, elles sont résolues le long de l'axe 1, jusqu'à ce que le fichier double de nouveau. Etc. Pour chaque séquence, on éclate à partir de la case 0. Pour chaque séquence, le niveau est incrémenté
La case rajoutée est donnée par P + 2 l (Si N=1, Sinon P + 2 l.N) P pointeur de la case à éclater l : niveau de la fonction MLH: Remarques importantes En général, le prochain axe sur lequel les éclatements sont réalisés est déterminé de manière cyclique : (i+1) Mod d ( i est l'axe courant, d : nombre de dimensions) Dans la formule P + 2 l, 2 l représente la taille du fichier avant les éclatements le long d'un axe donné. A la fin d'un cycle ( d séquences d'éclatements), l'espace des adresses est incrémenté par un facteur de 2d. (au départ c'est 1.N, après axe 1 : 2 1 N, après axe 2 : 2 2 N,... ).
L 'ensemble des cases a été éclaté (L+1) fois le long des axes {0, 1,...r-1} et L fois le long des axes {r,...d-1} MLH: Propriétés Si l désigne le nombre total de séquences de divisions réalisées sur tous les axes, alors l = Ld + r L : nombre de cycles
H l, pour le niveau l (avec l = Ld+r), sera définie comme une fonction de D 0 X D 1 X...D d-1 R 0 X R 1 X....R d-1 avec R i = I L+1 pour i < r et R i = I L pour i r MLH: Fonction de hachage Supposons N = 1 ( au départ ) et I i = {0, 1,....2 i - 1} Pour une clé k, H l (k) = (h L+1 (k 0 ), h L+1 (k 1 ),.....h L+1 (k r-1 ), h L (k r ),...h L (k d-1 ) La prochaine séquence de division s'effectuera le long de l'axe r, on utilisera alors : H l+1 (k) = (h L+1 (k 0 ), h L+1 (k 1 ),.., h L+1 (k r-1 ), h L+1 (k r ), h L (k r+1 ), …, h L (k d-1 )
H 1, H 2,...sont des fonctions de division pour MLH si elles satisfont les deux conditions suivantes MLH: Fonctions de division H l : K {0, 1,...2 l -1} (par projection) Pour chaque niveau l du fichier avec l = L d + r et pour chaque clé k de K : H l+1 (k) = H l (k) ou bien H l+1 (k) =(h L+1 (k 0 ),..., h L+1 (k r-1 ), h L (k r )+2 L, h L (k r+1 )...h L (k d-1 ) = H l (k) + ( 0, 0,...,2 L, 0, 0,....) Condition de rang: Condition de division: Noter que : h L+1 (k r ) = h L (k r ) + 2 L
n : nombre d'articles insérés s : nombre de cases primaires s' : nombre de cases en débordement b : capacité case primaire b' : capacité case de débordement MLH: Exemple (d=2) Les divisions sont contrôlées par le facteur de chargement a Utilisation du modulo pour les fonctions de division a = n / ( s.b + s'.b') b = 3 et b' = 2. seuil s= 0.6
(a) Au départ, une seule case est allouée pour le fichier. Les 3 premiers articles sont insérés avec la fonction H 0 =(h 0, h 0 ) où h 0 (k)=k Mod 1 (b) insertion de l'article (19000, 21): Collision sur la case 0. Résolue par l'éclatement de la case 0 le long de l'axe 0, utilisant la fonction H 1 = (h 1 h 0 ) avec h 1 (k) = k Mod 2 (c) La clé (21217, 31)est insérée dans la case 1. MLH: Exemple (d=2) Première séquence de division
(a)L'insertion de (15241, 26) cause une collision sur la case 1 le long de l'axe 1, puisque a=6/6 = 1. L’article est mis en débordement et c’est la case 0 qui s’éclate. L'éclatement est accompli par H 2 =(h 1, h 1 ). Noter que H 2 (k) = H 1 (k) ou H 2 (k) = H 1 (K) + (0, 1) (b) Insertion de(59219, 35) : H2 donne (1, 1) : en dehors. Donc H1 qui donne(1, 0) : case 1. Éclatement. MLH: Exemple (d=2) Deuxième séquence de division
MLH: Exemple (d=2) Adresses logiques des cases durant les 4 premières séquences de division. Problème : Association entre les coordonnées et les adresses de cases ?
Détermine pour µ donné, les coordonnées de la projection de µ le long de l'axe i, i ( µ ) := (0, 0,..., µ i, 0,...0) MLH: Projection µ un point dans I d, I étant un intervalle quelconque ( I = [0..v] par exemple ) µ i : i-ème coordonnée de µ, 0 i d-1 Projection i : I d ---> I d
M ( H l+1 (k) ) = M (H l (k)) + 2 l M(H l (k)+(0,0,..,2 L, 0,0..) ) = M (H l (k)) + 2 l MLH: Fonction de mapping M(i0, i 1,...,i r-1,i r +2 L, i r+1,...i d-1 ) = M(i 0, i 1,...., i r,...i d-1 ) + 2 l où l = L.d + r ou bien Une fonction M de I d (Espace à d dim) dans J (espace à 1 dim)est une fonction de stockage si elle satisfait la contrainte suivante :
Théorème 1 : M ( µ ) = i=0,d-1 M ( i (µ) ), MLH: Fonction de mapping Théorème 2 : Si M(0,0,..,0) = 0, alors M est une fonction sur la droite I l ( I l = {0, 1, 2, …,2 l -1} avec l = L.d + r M est une fonction bijective Exemple : M(3, 2) = M(3, 0) + M(0, 2) La démo se fait par récurrence
Exemple ( d=2) Calcul de M(6, 3) (6) 2 = (3) 2 = M(6, 3) = 30 Calcul de M(4, 2) (4) 2 = (2) 2 = M(4, 2) = 24 Théorème 3 : M est complètement caractérisée par : M ( µ ) = j=0,d-1 ( i=0,xj (2 d.i+ j. b ij )) où x j = Ent ( Log µ j ) et b xj j b xj-1 j....b 0 j est la représentation binaire de µ j MLH: Fonction de mapping
Exemples MLH: Fonction de mapping
Algorithme : 1. Déduire L et r 2. Calcul de M 3. l := l Reprendre à partir de 1 MLH: Fonction de mapping Connaissant le niveau l du fichier on peut déterminer M(x, y, z,...) Pour la dimension 2 on a les formules : M(a, b) = M(a, b-2 L ) + 2 l si r = 1 = M(a-2 L, b) + 2 l si r = 0
M(3, 3) = = 15 MLH: Fonction de mapping Exemple : Calcul M(3, 3) sachant que l = 3 Si l = 3 ==> L = 1 et r = 1 M(3, 3) = M(3, 1) Pour l = 2 ==> L = 1 et r = 0 M(3, 1) = M(1, 1) Pour l = 1 ==> L = 0 et r = 1 M(1, 1) = M(1, 0) Pour l = 0 ==> L = 0 et r = 0 M(1, 0) = M(0, 0) + 2 0
La fonction inverse R peut être exprimée comme : R = ( m 0, m 1,..., m d-1 ) avec m j = ( 2 k div d. b k m ), k dans E m (j) MLH: Fonction inverse Étant donné une adresse m obtenue par la fonction M Soit b x m, b x-1 m,...b 0 m sa représentation binaire E m (j) = { k tel que k = d.i + j et b k m est dans la représentation binaire de m } Pour déterminer m j, on ne considère que les bits de rang k = di + j j = 0, 1,..,,d-1 i = 0, 1,...
Exemples Pour d = 2 E m (0) = { 0, 2, 4,... } E m (1) = { 1, 3, 5,... } Pour d = 3 E m (0) = { 0, 3, 6,... } E m (1) = { 1, 4, 7,... } E m (2) = { 2, 5, 8,... } MLH: Fonction inverse Exemples Pour d=2 ; m = 27, puis m= 12
1. Appliquer H l (k) <-- ( h L+1 (k 0 ),..., h L+1 (k r-1 ), h L (k r ),...h L (k d-1 )) 2. m M( H l (k) ) = i=0, d-1 ( M( i (H l (k) ) 3. Si m < P alors m := M ( H l+1 (k)) (P : prochaine case à éclater) MLH: Requête exacte Soit k = (k 0, k 1,..k d-1 ) et l = Ld + r le nombre de séquences de divisions accomplies, l'algorithme qui suit rend l'adresse logique où l'article est rangé
3. m < P donc H4(k)=(h2, h2)(k)=(1,3) M(1, 0) = 1; M(0, 3) = 10 m 11 MLH: Requête exacte Trouver l'adresse de (30121, 35) en supposant que l = 3 et P = 4 1. H3(k)=( h2(30121), h1(35) ) = (1, 1) 2. M(1, 1) = M(1, 0) + M(0, 1) M(1, 0) = 1; M(0, 1) = 2 m 3
On désigne par b l (k) l'ensemble des cases à rechercher ( l = L.d + r ) b l (k)={b 0 (k 0 ),...., b r (k r ),.....b d-1 (k d-1 ) ) MLH: Requête partielle Rechercher des clés de la forme k= (k 0, k 1,...,k d-1 ) k i est -soit une valeur du domaine D i -soit une valeur non spécifiée (‘*’). Comment définir b i (k i ) ?
k i = * et i=r : 0 b i (k i ) 2 L Last i Last = P - 1 : dernière case éclatée Last i dénote la i-ieme ( i = r) coordonnée obtenue par l'application de la fonction inverse R MLH: Requête partielle k i est spécifié et i < r : b i (k i ) = h L+1 (k i ) k i est spécifié et i r : b i (k i ) = h L (k i ) k i = * et i # r : 0 b i (k i ) 2 m - 1 avec m = L+1 si i r b i (k i ) est défini comme suit :
Pour Chaque b dans b l ( k) m M(b 0,b 1,....,b d-1 ) Si k r est spécifié et m < P b r h L+1 (k r ) m M(b 0, b 1,..b d-1 ) Fsi Écrire(m) Finpour MLH: Requête partielle Soit la requête k=(k 0, k 1..., k d-1 ) et l = Ld + r, l'algorithme retourne les adresses des cases où les articles avec les attributs spécifiés sont rangés.
Très bonnes performances ( recherche, insertion, suppression) Pour des divisions non contrôlées avec b=5 et b'=1, le coût d'accès est de 1.09 indépendamment de la dimension et le facteur de chargement est de 67%. Pour des division contrôlées, même avec un seuil de 90%, pour b=10 et b'=2, le temps d'accès est de Inconvénient : absence de l’ordre. MLH: Synthèse
Hachage digital multidimensionnel (MTH)
Utiliser d arbres digitaux en mémoire, un arbre par attribut Les nœuds feuilles désignent des indexes au lieu des adresses de cases du fichier Afin de localiser un article de clé (k 1, k 2,..., k n ), chaque k i est recherché dans l'arbre digital correspondant à l'attribut i. Appliquer une fonction de "mapping" afin de transformer le d-uplet formé en une adresse linéaire. MTH: Concept
Les cases sont représentées dans un espace d-dimensionnel où les d axes sont les d attributs. Un point avec les coordonnées (i1, i2,.., id) dans l'espace représente la case du fichier d'adresse F( ). Le fichier est un tableau à d dimensions rangé linéairement sur le disque. MTH: Concept La fonction de mapping utilise la technique des tableaux extensibles dans n'importe quelle direction. A chaque extension un bloc(d-1)-dimensionnel ( Segment ) est rajouté. La fonction de mapping utilise d tableaux bi-dimensionnel contenant les bases et le facteurs multiplicatifs pour chaque dimension.
MTH: Exemple
1. Choisir t = m tel que B m [j m, m] = Max { B r [j r, r]}, r = 1, 2, …d 2. Adr = B t [j t, t] + r=1, d B t [j t, r] * j r et r t 3. Retourner Adr MTH: Fonction de mapping Calcul de F (j 1, j 2, …j d )
Une insertion peut causer une collision. Le fichier est étendu par un bloc (d-1) dimensionnel de cases rajoutées à la fin du fichier Taille du bloc = (U j + 1) j#t t étant l'axe sur lequel se fait l'extension. U j index maximal dans l'arbre T j MTH: Eclatement
En cas de collision : a)Choisir un axe d’extension (de manière cyclique) b)Ajouter un nouveau segment c)Redistribuer les clés entre l’ancien et le nouveau segment Extension par bloc de plusieurs cases MTH: Eclatement
Exemple d’éclatement selon l’axe j1 MTH: Eclatement
1. Appliquer T 1, T 2,…,T d aux valeurs k 1, k 2,…, k d (i 1, i 2,…, i d ) 2. Pour j:=1, d Si i j = Nil - Etendre le tableau selon l’axe j - Mettre à jour l’arbre T j 3. Calculer F(i 1, i 2, …, i d ) adresse de case 4. Si Collision alors choisir un axe a cycliquement Étendre selon l’axe a Éclater l’arbre Ta Pour toutes les cases de l’ancien segment faire - Re hacher les clés - Si Nil ajouter segment MTH: Algorithme d’insertion Insertion de K = (k1, k2, …,kd)
Requête exacte C'est l'algorithme de recherche, puisque tous les attributs sont spécifiés. Requête partielle Considérer tous les indices pour les attributs non spécifiés Requête à intervalle Déterminer un ensemble d’indice dans chaque dimension MTH: Types de requêtes
i1 i3 i2 Arbres digitaux Fonction de mapping MTH: Requête exacte
Parcours d’un tableau à (d-q) dimensions i2 i1 := * i3 := * Spécification de q valeurs MTH: Requête partielle
Sous tableau d-dimensionnel R2 R1 R3 Intervalle pour chaque dimension MTH: Requête par intervalle
Fonction de mapping utilise un index : d tableaux contenant les bases et facteurs multiplicatifs Très bonnes performances d’accès. Facteur de chargement de l’ordre de 40%.(extension du fichier par des segments de plus en plus grands) Inconvénients : d-arbres digitaux en mémoire (sensibilité de la méthode) MTH: Synthèse
Arbres B Multidimensionnels (MBT)
Utilise un index permettant d'indexer tous les attributs du fichier. L'index est un arbre m-aire ou chaque nœud est un B arbre. Les nœuds internes au même niveau dans l'index correspondent aux B arbres indexant des valeurs différentes d'un même attribut. Le nœud racine correspond au B arbre contenant toutes les valeurs relatives à l'attribut 1. MBT : Structure générale
Chaque valeur V 1, dans cet arbre, pointe l'un des nœuds fils du niveau prochain ( B arbre de niveau 2) contenant les valeurs de A 2 apparaissant avec V 1 dans le fichier. Ces valeurs de A 2 ( B arbre de niveau 2 associé à V 1 ) forme ce qu'on appelle l'ensemble filial de V 1 au niveau 2. De même, chaque valeur de V 2 de cet ensemble pointe l'un des nœuds fils (B arbre au niveau 3) contenant toutes les valeurs apparaissant avec V 1 et V 2 dans le fichier. Ce processus continue jusqu'à ce que un nœud feuille est atteint, contenant ainsi toutes les adresses telles que : A 1 = V 1 & A 2 = V 2 &......& A n = V n MBT : Structure générale
Nœud = (K 1 F 1 P 1 ) (K 2 F 2 P 2 ) (K 3 F 3 P 3 ).....(K h-1, F h-1, P h-1 ) K j : valeur d'attribut P j : pointeur dans le même sous arbre contenant les valeurs entre K j et K j+1. F j : point l'ensemble filial de K j dans le niveau prochain. MBT : Structure générale Nœuds feuilles = pages d'accession contenant chacune des pointeurs vers les articles du fichier. Ces pages sont liées ( liste horizontale ). Si l'une de ces pages déborde, une liste orthogonale pour cette page est créée.
La racine de chaque B arbre contient 3 pointeurs additionnels : Left, Right et Next : – Left : pointeur du B arbre le plus à gauche du niveau prochain de son ensemble filial. – Next : pointeur au B arbre suivant du même niveau – Right : pointeur du B arbre le plus à droite du niveau prochain de son ensemble filial. Level(i) donnant le premier B arbre dans le niveau i. But : accéder directement à un niveau i quelconque de l'index ( utilisé dans les requêtes à intervalle) Informations additionnelles MBT : Structure générale
a2b0 a1b3 a2b4 a1b2 a3b0 a1b5 a1b4 a1b Fichier de données Exemple : fichier avec les clés : a 1 b 1, a 1 b 2, a 1 b 3, a 1 b 4, a 1 b 5, a 2 b 0, a 2 b 4, a 3 b 0 {b 1, b 2, b 3, b 4, b 5 } est l'ensemble filial de a 1. {b 0, b 4 } est l'ensemble filial de a 2. MBT : Exemple d’un MBT
1. Trouver le plus petit j tel que la combinaison a 1, a 2, …a j n’existe pas encore. 2. a j est inséré dans l'ensemble filial de a j Pour k:=j+1, n – Insertion d’un nouvel B- arbre contenant a k – Mise à jour du pointeur Next dans Pred(F k ) Insertion de MBT : Insertion a1 aj-1 aj aj+1 an Next Right
1. Trouver j tel que F j,…F n ne soient formés que d’une seule valeur chacun 2. Supprimer a j de F j Pour k:=j, n – Libérer F k – Mise à jour de Next dans Pred(F k ) Suppression de a1 aj-1 aj aj+1 an Next Right MBT : Suppression
Chaque attribut est recherché dans le B- arbre correspondant. a1 a2 an-1 an …………………… MBT : Requête exacte
MBT : Requête partielle
F_ptr Recherche de 2 valeurs dans des listes d’arbres à chaque niveau du répertoire. MBT : Requête par intervalle
Performances logarithmiques pour toutes les opérations. Facteur de chargement au voisinage de 70% Algorithmes complexes MBT : Synthèse