700 likes | 788 Views
Structures de données avancées : Fichiers multidimensionnels. Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI) zegour.esi.dz email: d_zegour@esi.dz. Concepts du multidimensionnel. Concepts du multidimensionnel. Les méthodes modernes N'utilisent pratiquement pas d'index
E N D
Structures de données avancées : Fichiers multidimensionnels Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI) zegour.esi.dz email: d_zegour@esi.dz
Concepts du multidimensionnel • Les méthodes • modernes • N'utilisent pratiquement pas d'index • Utilisent le concept des tableaux extensibles • Visent un accès disque 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 : Terminologie Principales opérations Article = ( k1, k2, ...kd) d attributs A1, A2, ......, Ad , d est la dimension Ki appartient à un domaine Di • Requête exacte (Exact match query ) Tous les attributs sont spécifiés ( Articles avec A1=k1, A2=k2, ....Ad=Kd ) Article = point de l'espace d-dimensionnel D1 X D2 X....X Dd Généralement, une clé primaire (k1) et d-1 clés secondaires (k2, K3, ...Kd) • Requête partielle (Partial match query ) : • Quelques attributs sont spécifiés • Requête par intervalle ( Regionquery ) Un intervalle est spécifié pour chaque attribut.
Concepts du multidimensionnel: Tableau statique Une déclaration typique : A(a1:b1; a2:b2; ......an:bn) Ordre de rangement des sous tableaux A(i, *, *, ..., *) : A(a1, *, *, ..., *), A(a1+1, *, *, ..., *), A(a1+2, *, *, ..., *), ........., A(b1, *, *, ..., *) 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.
Concepts du multidimensionnel: Tableau statique Exemple pour un tableau A(3, 2, 3)
Concepts du multidimensionnel: Tableau statique Adresse d'un élément A(i1, i2 .., in) ? Posons di = bi - ai + 1 Partie variable : i1i=2,n di + i2i=3,ndi + ...+ in-1dn + in Adresse de A(i1, *, *, ....) : AD1 = Base + (i1-a1) d2d3...dn Adresse de A(i1, i2, *, ....) : AD2 = AD1 + (i2-a2)d3d4...dn Adresse de A(i1, i2, ...in) : ADn = Base + (i1-a1)d2d3..dn + (i2-a2)d3d4...dn + ....+(in-1-an-1)dn + (in-an) Partie constante : Base -(a1i=2,ndi+ a2i=3,n di+...+an-1dn + an) Si a1 = a2 = ...... = an = 0, l‘adresse de A(i1, i2, ...in) est i1d2d3..dn + i2d3d4...dn + ....+in-1dn + in = j=1,n ( ij . i=j+1,ndi )
Concepts du multidimensionnel: Tableau extensible Fonction d’allocation A[0:U1, 0:U2, ....,0:Uk ], Ui variable L'état initial Ui est 0 pour tout i dans {1, 2, ...,k) • Un schéma d'allocation du tableau A est une fonction bijective Loc : Nk ---> N telle que : (i) Loc(<0, 0, 0>) = 0 (ii) Loc(<a1, a2,...ak>) < Loc(<b1, b2, ...bk>) ssi pour i k , at = bt pour 1 t < i et ai < bi sinon Le tableau est représenté en mémoire de manière contiguë M[0..V] avec V = i=1,k [ ( Ui + 1) ] – 1 A[0, 0, ...] a comme image M[0]. A[j1, j2, ...jk] représente un élément du tableau. Chaque ji est dans l'intervalle [0..Ui]
Concepts du multidimensionnel: Tableau extensible Rangement(KDEA : K-Dimensional Extensible Array ) 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 (U1, U2, ....,Uk ) IXA = K tableaux 2-dimensionnel distinct Bi [0..Ui , 1..k] avec i=1, k.
Concepts du multidimensionnel: Tableau extensible Exemple Mécanisme d'expansion dans le cas d'un 2DEA ( U1, U2 ) = J1 12 1 3 2 1 0 12 13 14 15 19 18 17 16 (0, 1) [Axe 2] 6 1 6 7 8 11 10 9 (0, 2) [Axe 2] 3 1 3 4 5 (1, 2) [Axe 1] (2, 2) [Axe 1] B2 0 1 2 0 1 J2 (2, 3) [Axe 2] B1 0 1 2 3 4 (3, 3) [Axe 1] (3, 4) [Axe 2] 1 1 1 1 1 B2 0 1 2 9 16
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). Donc il suffit de prendre le Max entre B2(5,2) et B1 (1,1).
Concepts du multidimensionnel: Tableau extensible Fonction d'accès: Adresse de A(j1, j2, ..., jk ) ? Procédure d'allocation: Étendre(t) : t index, t =1, k 1. Étendre Bt[0:Ut, 1..K] à Bt[0:Ut + 1, 1..K ] 2. Bt[Ut+1,t] (Ut+1)* r=1, k et r # t.(Ur+ 1) [base] 3. Bt(Ut+1, q] r=q+1, ..., k et r # t ( Ur + 1) [facteurs multiplicatifs] q=1, K et q <> t. • 1. Déterminer l'indice t tel que Bt[jt, t] Max { Bi[ji, i], i=1, ..,K } • 2. Adresse Bt[jt,t]+ r = 1, ...,K et r # t ( Bt[jt, r] * jr )
Concepts du multidimensionnel: Tableau extensible Exemple Calcul d’adresse k=2 ; E= 1, 1, 2, 2, 1, 2, 1, 1, 2 Calcul des adresses • Adr(0,0)=0 Adr(0,1)=3 Adr(0,2)=6 Adr(0,3)=12 Adr(0,4)=24 Adr(1,0)=1 • Adr(1,1)=4 Adr(1,2)=7 Adr(1,3)=13 Adr(1,4)=25 Adr(2,0)=2 Adr(2,1)=5 • Adr(2,2)=8 Adr(2,3)=14 Adr(2,4)=26 Adr(3,0)=9 Adr(3,1)=10 Adr(3,2)=11 Adr(3,3)=15 Adr(3,4)=27 Adr(4,0)=16 Adr(4,1)=17 Adr(4,2)=18 Adr(4,3)=19 • Adr(4,4)=28 Adr(5,0)=20 Adr(5,1)=21 Adr(5,2)=22 Adr(5,3)=23 Adr(5,4)=29 B1 1 : 0 1 2 9 16 20 2 : 1 1 1 1 1 1 B2 1 : 1 1 1 1 1 2 : 0 3 6 12 24
Concepts du multidimensionnel: Tableau extensible Exemple Calcul d’adresse k=3; E=1, 2, 3, 1, 2, 3, 1, 2, 3 B1 B3 B2 1 : 0 1 8 27 2 : 1 1 2 3 3 : 1 1 1 1 1 : 1 1 2 3 2 : 0 2 12 36 3 : 1 1 1 1 1 : 1 2 3 4 2 : 1 1 1 1 3 : 0 4 18 48
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: A0= { A(0, 0, ..., 0) } Al+1= Al U Al‘ A0= tableau d-dim contenant le seul élément A(0, 0, ...,0) Al et Al‘ sont des ensembles ordonnés tel que (1) Al Al‘= (2) Pour chaque élément A(i0, i1 ...,id-1) de Al dans un ordre linéaire ajouter A(i'0, i'1, ...,i'd-1) où i'j = ij pour tout j, j#r i'r = ir + 2L Avec l = L.d + r (d : dimension ; L : nombre de cycles; l : nombre d’extensions )
Concepts du multidimensionnel: Tableau linéaire dynamique l = L.d + r Exemple pour d = 2 4. A3= A2U A'2 l=2 ==> L=1 et r=0 donc 2L = 2 A3= { 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 2L =2 à la composante r=0 des éléments de A2 1. A0= {A(0, 0)} 3. A2= A1U A'1 l=1 ==> L=0 et r=1 donc 2L = 1 A2= { A(0, 0), A(1, 0) , A(0, 1), A(1, 1)} (Ajouter 2L = 1 à la composante r=1 des éléments de A1 ) 2. A1= A0U A'0 l=0 L = 0 et r=0 donc 2L = 1 A1= { A(0, 0), A(1, 0) } (Ajouter 2L à 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:
MLH : Considérations Soit K = D0 X D1 X.....X Dd-1 l’espace des clés Di est le domaine correspondant à l'attribut Ai. Une clé k = (k0, k1, ..., kd-1) peut être vue comme un vecteur dans un espace D-dimensionnel, où chaque axe correspond à un attribut différent. Utilise les tableaux linéaires dynamiques
MLH: Principe Appliquer LH consécutivement sur chaque axe Chaque division dépend seulement de l'axe courant. En fin de cette séquence de division, le nombre de cases double. 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 k0) 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é
MLH: Remarques importantes La case rajoutée est donnée par P + 2l(Si N=1, Sinon P + 2l.N) P pointeur de la case à éclater l : niveau de la fonction Dans la formule P + 2l, 2l représente la taille du fichier avant les éclatements le long d'un axe donné. 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) 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 : 21N, après axe 2 : 22N, ... ) .
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 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: Fonction de hachage Supposons N = 1 ( au départ ) et Ii = {0, 1, ....2i - 1} Hl, pour le niveau l (avec l = Ld+r) , sera définie comme une fonction de D0 X D1 X...Dd-1 R0 X R1 X ....Rd-1 avec Ri = IL+1 pour i < r et Ri = ILpour i r Pour une clé k, Hl (k) = (hL+1 (k0), hL+1 (k1), .....hL+1 (kr-1), hL (kr), ...hL (kd-1) La prochaine séquence de division s'effectuera le long de l'axe r, on utilisera alors : Hl+1 (k) = (hL+1 (k0), hL+1 (k1),.., hL+1 (kr-1), hL+1 (kr), hL (kr+1), …, hL (kd-1)
MLH: Fonctions de division H1, H2, ...sont des fonctions de division pour MLH si elles satisfont les deux conditions suivantes Condition de rang: Hl : K {0, 1, ...2l -1} (par projection) Condition de division: Pour chaque niveau l du fichier avec l = L d + r et pour chaque clé k de K : Hl+1 (k) = Hl (k) ou bien Hl+1 (k) =(hL+1 (k0), ..., hL+1 (kr-1), hL (kr)+2L, hL (kr+1) ...hL (kd-1) = Hl (k) + ( 0, 0, ...,2L, 0, 0,....) Noter que : hL+1 (kr) = hL (kr) + 2L
MLH: Exemple (d=2) Les divisions sont contrôlées par le facteur de chargement a 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 a = n / ( s.b + s'.b') b = 3 et b' = 2. seuil s= 0.6 Utilisation du modulo pour les fonctions de division
MLH: Exemple (d=2) Première séquence de division (a) Au départ, une seule case est allouée pour le fichier. Les 3 premiers articles sont insérés avec la fonction H0=(h0, h0) où h0(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 H1= (h1 h0) avec h1(k) = k Mod 2 (c) La clé (21217, 31)est insérée dans la case 1.
MLH: Exemple (d=2) Deuxième séquence de division • 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 H2=(h1, h1). • Noter que H2(k) = H1(k) ou • H2(k) = H1(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) 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 ?
MLH: Projection µ un point dans Id , I étant un intervalle quelconque ( I = [0..v] par exemple ) Détermine pour µ donné, les coordonnées de la projection de µ le long de l'axe i, i( µ ) := (0, 0, ..., µi, 0, ...0) µi: i-ème coordonnée de µ, 0 i d-1 Projection i: Id ---> Id
MLH: Fonction de mapping Une fonction M de Id (Espace à d dim) dans J (espace à 1 dim)est une fonction de stockage si elle satisfait la contrainte suivante : M ( Hl+1(k) ) = M (Hl(k)) + 2l M(Hl(k)+(0,0,..,2L, 0,0..) ) = M (Hl(k)) + 2l ou bien M(i0, i1, ...,ir-1,ir+2L, ir+1, ...id-1) = M(i0, i1, ...., ir, ...id-1) + 2l où l = L.d + r
MLH: Fonction de mapping Théorème 1 :M ( µ ) = i=0,d-1 M (i (µ) ), M est une fonction bijective Exemple : M(3, 2) = M(3, 0) + M(0, 2) La démo se fait par récurrence Théorème 2 : Si M(0,0,..,0) = 0, alors M est une fonction sur la droite Il ( Il = {0, 1, 2, … ,2l-1} avec l = L.d + r
MLH: Fonction de mapping • Exemple ( d=2) • Calcul de M(6, 3) (6)2= 1 1 0 0.20 + 1.22 + 1.24 (3)2= 1 1 1.21 + 1.23 M(6, 3) = 30 • Calcul de M(4, 2) (4)2= 1 0 0 0.20 + 0.22 + 1.24 (2)2= 1 0 0.21 + 1.23 M(4, 2) = 24 Théorème 3 : M est complètement caractérisée par : M ( µ ) = j=0,d-1(i=0,xj(2d.i+ j . bij )) où xj= Ent ( Log µj) et bxj j bxj-1 j....b0j est la représentation binaire de µj
MLH: Fonction de mapping Exemples
MLH: Fonction de mapping Connaissant le niveau l du fichier on peut déterminer M(x, y, z, ...) Algorithme : 1. Déduire L et r 2. Calcul de M 3. l := l - 1 4. Reprendre à partir de 1 Pour la dimension 2 on a les formules : M(a, b) = M(a, b-2L) + 2l si r = 1 = M(a-2L, b) + 2l si r = 0
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) + 23 Pour l = 2 ==> L = 1 et r = 0 M(3, 1) = M(1, 1) + 22 Pour l = 1 ==> L = 0 et r = 1 M(1, 1) = M(1, 0) + 21 Pour l = 0 ==> L = 0 et r = 0 M(1, 0) = M(0, 0) + 20 M(3, 3) = 23 + 22 + 21 + 20 = 15
MLH: Fonction inverse Étant donné une adresse m obtenue par la fonction M Soit bxm, bx-1m, ...b0m sa représentation binaire La fonction inverse R peut être exprimée comme : R = ( m0, m1, ..., md-1) avec mj= ( 2 k div d . bkm ) , k dans Em(j) Em(j) = { k tel que k = d.i + j et bkm est dans la représentation binaire de m } Pour déterminer mj, on ne considère que les bits de rang k = di + j j = 0, 1, .., ,d-1 i = 0, 1, ...
MLH: Fonction inverse Exemples Pour d=2 ; m = 27, puis m= 12 Exemples • Pour d = 2 Em(0) = { 0, 2, 4, ... } Em(1) = { 1, 3, 5, ... } • Pour d = 3 Em(0) = { 0, 3, 6, ... } Em(1) = { 1, 4, 7, ... } Em(2) = { 2, 5, 8, ... }
MLH: Requête exacte Soit k = (k0, k1, ..kd-1) et l = Ld + r le nombre de séquences de divisions accomplies, 1. Appliquer Hl(k) <-- ( hL+1(k0), ..., hL+1(kr-1), hL(kr), ...hL(kd-1)) 2. m M( Hl(k) ) = i=0, d-1( M(i(Hl(k) ) 3. Si m < P alors m := M ( Hl+1(k)) (P : prochaine case à éclater) l'algorithme qui suit rend l'adresse logique où l'article est rangé
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) 3. m < P donc H4(k)=(h2, h2)(k)=(1,3) M(1, 0) = 1; M(0, 3) = 10 m 11 2. M(1, 1) = M(1, 0) + M(0, 1) M(1, 0) = 1; M(0, 1) = 2 m 3
MLH: Requête partielle • Rechercher des clés de la forme k= (k0, k1, ...,kd-1) • ki est • soit une valeur du domaine Di • soit une valeur non spécifiée (‘*’). On désigne par bl(k) l'ensemble des cases à rechercher ( l = L.d + r ) bl(k)={b0(k0),...., br(kr), .....bd-1(kd-1) ) Comment définir bi(ki) ?
MLH: Requête partielle bi(ki) est défini comme suit : ki est spécifié et i < r : bi(ki) = hL+1(ki) ki est spécifié et i r : bi(ki) = hL(ki) ki = * et i=r : 0 bi(ki) 2L+1 - 1 + Lasti Last = P - 1 : dernière case éclatée Lasti dénote la i-ieme ( i = r) coordonnée obtenue par l'application de la fonction inverse R ki = * et i # r : 0 bi(ki) 2m - 1 avec m = L+1 si i < r et m = L si i > r
MLH: Requête partielle Soit la requête k=(k0, k1 ..., kd-1) et l = Ld + r, l'algorithme retourne les adresses des cases où les articles avec les attributs spécifiés sont rangés. Pour Chaque b dans bl( k) m M(b0,b1, ....,bd-1) Si kr est spécifié et m < P brhL+1(kr) m M(b0, b1, ..bd-1) Fsi Écrire(m) Finpour
MLH: Synthèse • 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 1.74. • Inconvénient : absence de l’ordre.
MTH: Concept • 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é (k1, k2, ..., kn), chaque ki 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(<i1, i2,.., id>). Le fichier est un tableau à d dimensions rangé linéairement sur le disque. 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: Fonction de mapping Calcul de F (j1, j2, …jd) 1. Choisir t = m tel que Bm[jm, m] = Max { Br[jr, r]}, r = 1, 2, …d 2. Adr = Bt[jt, t] + r=1, d Bt[jt, r] * jr et r t 3. Retourner Adr
MTH: Eclatement 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 = (Uj + 1) j#t t étant l'axe sur lequel se fait l'extension. Uj index maximal dans l'arbre Tj
MTH: Eclatement • En cas de collision : • Choisir un axe d’extension (de manière cyclique) • Ajouter un nouveau segment • Redistribuer les clés entre l’ancien et le nouveau segment Extension par bloc de plusieurs cases