organizace a zpracování dat i
DESCRIPTION
Organizace a zpracování dat I. Dynamické metody. Rozšiřitelné hašování (Fagin). K lokalizaci stránek s daty využívá adresář. Připouští jak přidávání, tak odebírání záznamů. K získání dat stačí 1-2 přístupy na disk. - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: Organizace a zpracování dat I](https://reader035.vdocuments.net/reader035/viewer/2022062816/56814bf0550346895db8d905/html5/thumbnails/1.jpg)
Organizace a zpracování dat I
Dynamické metody
![Page 2: Organizace a zpracování dat I](https://reader035.vdocuments.net/reader035/viewer/2022062816/56814bf0550346895db8d905/html5/thumbnails/2.jpg)
Rozšiřitelné hašování (Fagin)
• K lokalizaci stránek s daty využívá adresář.• Připouští jak přidávání, tak odebírání
záznamů.• K získání dat stačí 1-2 přístupy na disk.• Neumí se vypořádat se situací, kdy pro
příliš mnoho různých klíčů je hašovaná hodnota totožná.
![Page 3: Organizace a zpracování dat I](https://reader035.vdocuments.net/reader035/viewer/2022062816/56814bf0550346895db8d905/html5/thumbnails/3.jpg)
Rozšiřitelné hašování - schéma
3
2
3
3
1
000001010011
100101110111
![Page 4: Organizace a zpracování dat I](https://reader035.vdocuments.net/reader035/viewer/2022062816/56814bf0550346895db8d905/html5/thumbnails/4.jpg)
Rozšiřitelné hašování – schéma (2)
3
2
3
3
2
000001010011
100101110111
2
![Page 5: Organizace a zpracování dat I](https://reader035.vdocuments.net/reader035/viewer/2022062816/56814bf0550346895db8d905/html5/thumbnails/5.jpg)
Rozšiřitelné hašování – schéma (3)
42
3
4
2
0000
0001
0010
0011
0100
0101
0110
0111
21000
100110101011
1100
1101
1110
1111
4
![Page 6: Organizace a zpracování dat I](https://reader035.vdocuments.net/reader035/viewer/2022062816/56814bf0550346895db8d905/html5/thumbnails/6.jpg)
Rozšiřitelné hašování – pomocné funkce
• GetPage(pt,pg) – čte stránku z adresy pt do vyrovnávací paměti pg.
• Collision-Act – ošetřuje kolizi/nenalezení záznamu
![Page 7: Organizace a zpracování dat I](https://reader035.vdocuments.net/reader035/viewer/2022062816/56814bf0550346895db8d905/html5/thumbnails/7.jpg)
Rozšiřitelné hašování - Access
procedure Access(var pt:pgadr; var index:integer; k:key; var found:bool);
var pg:page; b:hashkey;begin b:=h(k); pt:=directory[brbr-1…br-d+1];
index:=bt+sbt+s+1…bt+1; GetPage(pt,pg);if pg.body[index].dk = k thenbegin found:=true; return end;Collision-Act(pg,index,k,found);
end;
![Page 8: Organizace a zpracování dat I](https://reader035.vdocuments.net/reader035/viewer/2022062816/56814bf0550346895db8d905/html5/thumbnails/8.jpg)
Rozšiřitelné hašování - Insertprocedure Insert(r:drec; var ok:Bool);var index,j,k:integer; found:Bool; pt,pt1:pgadr; buffer,pg,pg1:page;begin Access(pt,index,r.dk,found);
if found then ok:=false; return end;GetPage(pt,pg);
if not IsFree(pg) then beginbuffer:=pg; pg.LocD:=pg.LocD+1; pg1.LocD:=pg.LocD; Clean(pg);for i:=1 to m do Insert1(buffer.body[i],pg,pg1);Insert1(r,pg,pg1); Indicate(pt,j,k);for i:=j to k do directory[i]:=pt1;PutPage(pt1,pg1);
end else Insert1(r,pg,pg);ok:=true; PutPage(pt,pg);
end;
![Page 9: Organizace a zpracování dat I](https://reader035.vdocuments.net/reader035/viewer/2022062816/56814bf0550346895db8d905/html5/thumbnails/9.jpg)
Rozšiřitelné hašování - vlastnosti
• Nalezení záznamu vyžaduje 2 přístupy na disk• Adresář bývá možné držet ve vnitřní paměti
(pak je jen 1 přístup na disk)• Lze zrychlit provádění aktualizací při dávkovém
zpracování: požadavky setřídit dle hašované hodnoty, a pak postupovat jako při aktualizaci setříděných sekvenčních souborů
![Page 10: Organizace a zpracování dat I](https://reader035.vdocuments.net/reader035/viewer/2022062816/56814bf0550346895db8d905/html5/thumbnails/10.jpg)
Lineární hašování – Litwin, 1980
• Stránky je možné štěpit po pevném počtu vložení záznamů
• Předpokládá se hašovací funkce h(K), která pro libovolný klíč vrátí binární celé číslo v dostatečném rozsahu
![Page 11: Organizace a zpracování dat I](https://reader035.vdocuments.net/reader035/viewer/2022062816/56814bf0550346895db8d905/html5/thumbnails/11.jpg)
Lineární hašování – postupné štěpení stánek
0 01
012
0123
01234
expanze
expanze
![Page 12: Organizace a zpracování dat I](https://reader035.vdocuments.net/reader035/viewer/2022062816/56814bf0550346895db8d905/html5/thumbnails/12.jpg)
Lineární hašování - GetLinAddr
FUNCTION GetLinAddr(K:Key):BlockAddr;VAR w, a : Integer;BEGIN
w:=log2(pages+1) ; a:=h(K) mod 2w;
IF a pages THEN a:=a mod 2w+1;return a
END;
![Page 13: Organizace a zpracování dat I](https://reader035.vdocuments.net/reader035/viewer/2022062816/56814bf0550346895db8d905/html5/thumbnails/13.jpg)
Lineární hašování - dokončení
• Aneb: stačí využít vhodný počet dolních bitů z hašovaného klíče.
• Při štěpení stránky rozdělujeme záznamy dle (w-1)-ního bitu: ty s ‚0‘ zůstávají, ty s ‚1‘ jdou do nové stránky.
• Pozor! Musí se zpracovat i záznamy ze stránky přetečení!!
![Page 14: Organizace a zpracování dat I](https://reader035.vdocuments.net/reader035/viewer/2022062816/56814bf0550346895db8d905/html5/thumbnails/14.jpg)
Skupinové štěpení stránek
• Stránky štěpeny po určitém počtu přidaných záznamů do souboru
• Snaha o rovnoměrnější rozdělení záznamů do stránek než u lineárního hašování
• Soubor dělený do s skupin po g stránkách• Skupiny se při štěpení přerozdělují do g+1
stránek
![Page 15: Organizace a zpracování dat I](https://reader035.vdocuments.net/reader035/viewer/2022062816/56814bf0550346895db8d905/html5/thumbnails/15.jpg)
Skupinové štěpení stránek (2)• Předpoklad: Existence posloupnosti nezávislých
hašovacích funkcí h0,h1,… : K<0,g>
FUNCTION PgAddr(k:key,d,sp:integer):integer;VAR j,s,x: integer;BEGIN
x:=hash(k); s:=s0;FOR j:=0 TO d-1 DO BEGIN x:=x mod s + hj(k)*s; s:=s*(g+1)/g END;IF x mod s < sp THEN x:=x mod s+hd(k)*s;PgAddr:=x
END;
![Page 16: Organizace a zpracování dat I](https://reader035.vdocuments.net/reader035/viewer/2022062816/56814bf0550346895db8d905/html5/thumbnails/16.jpg)
Skupinové štěpení stránek
• Algoritmus přístupu k datům simuluje umístění záznamu v průběhu celého postupu štěpení stránek.
• Lineární (Litwinovo) hašování je skupinovým štěpením stránek pro g=1.
![Page 17: Organizace a zpracování dat I](https://reader035.vdocuments.net/reader035/viewer/2022062816/56814bf0550346895db8d905/html5/thumbnails/17.jpg)
Stromy• Asi nejčastější dynamická datová na vnějších
pamětech s přímým přístupem.• Orientovaný graf je složený z uzlů a hran –
uspořádaných dvojic uzlů.• Každý uzel má konečnou množinu uzlů -
(bezprostředních) následníků / potomků a množinu uzlů zvaných předchůdci či rodiče.
• Strom je orientovaný graf, kdy každý uzel kromě jednoho má právě jednoho rodiče. Uzel bez rodiče se nazývá kořen stromu, uzly bez potomků nazýváme listy.
![Page 18: Organizace a zpracování dat I](https://reader035.vdocuments.net/reader035/viewer/2022062816/56814bf0550346895db8d905/html5/thumbnails/18.jpg)
B-stromB-strom (řádu m) je rozvětvený výškově
vyvážený strom splňující tato omezení:1. kořen má nejméně dva potomky, není-li
listem2. každý uzel kromě kořene a listů má
nejméně m/2 a nejvýše m potomků3. každý uzel má nejméně m/2 - 1 a nejvíce
m-1 datových záznamů4. všechny větve jsou stejně dlouhé
![Page 19: Organizace a zpracování dat I](https://reader035.vdocuments.net/reader035/viewer/2022062816/56814bf0550346895db8d905/html5/thumbnails/19.jpg)
B-strom (2)
• data v uzlu jsou organizována takto:p0,(k1,p1,d1),(k2,p2,d2),…,(kn,pn,dn),u
kde pi jsou ukazatelé na potomky, ki klíče, di data a u nevyužitý prostor
• záznamy (ki,pi,di) jsou uspořádány vzestupně dle klíčů
![Page 20: Organizace a zpracování dat I](https://reader035.vdocuments.net/reader035/viewer/2022062816/56814bf0550346895db8d905/html5/thumbnails/20.jpg)
B-strom - modifikace
• kořen podstromu může rozdělovat klíče v uzlech podstromu neostře (strom pak nazýváme redundantní - na původní verzi se budeme odkazovat jako na neredundantní), což dovolí i následující úpravy:– data mohou být uložena pouze v listech - v nelistových
uzlech jsou pouze klíče– data mohou být uložena odděleně - na poslední úrovni
pak ukazatelé neukazují na další uzly stromu, ale na data
![Page 21: Organizace a zpracování dat I](https://reader035.vdocuments.net/reader035/viewer/2022062816/56814bf0550346895db8d905/html5/thumbnails/21.jpg)
B-strom - příklad
51
25 68
12 17 35 42 57 62 85
Neredundantní B-strom (2-3-strom)
![Page 22: Organizace a zpracování dat I](https://reader035.vdocuments.net/reader035/viewer/2022062816/56814bf0550346895db8d905/html5/thumbnails/22.jpg)
B-strom - struktury
• Pro neredundantní variantu s daty v uzlech můžeme použít tyto struktury:
TYPErec = RECORD p:PgAdr; k:Key; d:Data END; page = RECORD
m : Integer; {zaplnění stránky}leaf : Boolean; {je to list?} body : ARRAY [1..MaxM] OF rec;
END;
![Page 23: Organizace a zpracování dat I](https://reader035.vdocuments.net/reader035/viewer/2022062816/56814bf0550346895db8d905/html5/thumbnails/23.jpg)
B-strom – struktury (2)
• Pro rekurzivní variantu s daty v uzlech je třeba použít variantní strukturu:
TYPEirec = RECORD p:PgAdr; k:Key; END; drec = RECORD k:Key; d:Data END;
![Page 24: Organizace a zpracování dat I](https://reader035.vdocuments.net/reader035/viewer/2022062816/56814bf0550346895db8d905/html5/thumbnails/24.jpg)
B-strom – struktury (3)
• Také je třeba si pamatovat celou větev ve stromě (přinejmenším pro vkládání a vypouštění):
TYPEBranch = RECORDh:integer; PgPtr: ARRAY [1..hmax] OF PgAdr; Ind: ARRAY [1..hmax] OF Integer; END;
![Page 25: Organizace a zpracování dat I](https://reader035.vdocuments.net/reader035/viewer/2022062816/56814bf0550346895db8d905/html5/thumbnails/25.jpg)
B-strom - AccessPROCEDURE Access(root:PgAdr; k:Key; VAR s:Branch;
VAR found:Boolean); VAR pt:PgAdr; i:Integer; BEGIN
s.h:=0; pt:=root; IF root=NIL THEN BEGIN found:=false; Exit END; REPEAT
s.h:=s.h+1; s.ptr[s.h]:=pt; GetPage(pt,pg); Search(pg,k,found,i,pt); s.ind[s.h]:=i
UNTIL pg.leaf END;
![Page 26: Organizace a zpracování dat I](https://reader035.vdocuments.net/reader035/viewer/2022062816/56814bf0550346895db8d905/html5/thumbnails/26.jpg)
B-strom - InsertPROCEDURE Insert(VAR root:PgAdr; r:rec; VAR
ok:Boolean); VAR wr:rec; wk:Key; pt:PgAdr; p1,p2:page;
found:Boolean; s:Branch; i:Integer; BEGIN
IF root=NIL THEN InitRoot(root,s) ELSE BEGIN Access(root,r.k,s,found); IF found THEN BEGIN ok:=false; Exit ENDEND;ok:=true; wr:=r; GetPage(s.ptr[s.h],p1);
![Page 27: Organizace a zpracování dat I](https://reader035.vdocuments.net/reader035/viewer/2022062816/56814bf0550346895db8d905/html5/thumbnails/27.jpg)
B-strom – Insert (2)FOR i:=s.h DOWNTO 1 DOWITH p1 DO BEGINIF m<MaxM THEN BEGIN MemIns(p1,wr,s.ind[i]); Exit END; Split(p1,wr,p2,pt); IF i=1 THEN BEGIN NewRoot(p1,p2,root,pt); Exit END; wk:=body[m].k; GetPage(s.ptr[i-1],p1);body[s.ind[i-1]].k:=wk; wr.k:=p2.ibody[p2.m].k; wr.p:=pt END;
END;