1 / 70

Structures de données avancées : Fichiers multidimensionnels

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

Download Presentation

Structures de données avancées : Fichiers multidimensionnels

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 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

  2. Concepts du multidimensionnel

  3. 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

  4. 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.

  5. 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.

  6. Concepts du multidimensionnel: Tableau statique Exemple pour un tableau A(3, 2, 3)

  7. Concepts du multidimensionnel: Tableau statique Adresse d'un élément A(i1, i2 .., in) ? Posons di = bi - ai + 1 Partie variable : i1i=2,n di + i2i=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 -(a1i=2,ndi+ a2i=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 )

  8. 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]

  9. 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.

  10. 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

  11. 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).

  12. 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 )

  13. 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

  14. 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

  15. 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 )

  16. 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...

  17. Concepts du multidimensionnel: Tableau linéaire dynamique Évolution du fichier ( vue par niveau ) Adresses logiques des cases pour l = 5:

  18. Hachage linéaire multidimensionnel (MLH)

  19. 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

  20. 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é

  21. 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, ... ) .

  22. 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}

  23. 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)

  24. 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

  25. 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

  26. 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.

  27. 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.

  28. 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 ?

  29. 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

  30. 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

  31. 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

  32. 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

  33. MLH: Fonction de mapping Exemples

  34. 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

  35. 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

  36. 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, ...

  37. 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, ... }

  38. 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é

  39. 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

  40. 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) ?

  41. 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

  42. 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 brhL+1(kr) m  M(b0, b1, ..bd-1) Fsi Écrire(m) Finpour

  43. 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.

  44. Hachage digital multidimensionnel(MTH)

  45. 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.

  46. 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.

  47. MTH: Exemple

  48. 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

  49. 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

  50. 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

More Related