25
Diskrétne geometrické štruktúry 2. Martin Florek [email protected] www.sccg.sk/~florek originál Martin Samuelčík, zmeny Martin Florek

Diskrétne geometrické štruktúry

Embed Size (px)

DESCRIPTION

Diskrétne geometrické štruktúry. 2. Martin Florek [email protected] www.sccg.sk/~florek. Bin árny prehľadávací strom. Bin árny prehľadávací strom – zložitosť na základe výšky stromu Potreba zabezpečiť čo najmenšiu výšku stromu Pre kompletný binárny strom s výškou h je počet vrcholov 2 h – 1 - PowerPoint PPT Presentation

Citation preview

Page 1: Diskrétne geometrické štruktúry

Diskrétne geometrické štruktúry

2.

Martin [email protected]

www.sccg.sk/~florek

originál Martin Samuelčík, zmeny Martin Florek

Page 2: Diskrétne geometrické štruktúry

Binárny prehľadávací strom

• Binárny prehľadávací strom – zložitosť na základe výšky stromu

• Potreba zabezpečiť čo najmenšiu výšku stromu

• Pre kompletný binárny strom s výškou h je počet vrcholov 2h – 1

• Cestu možeme skrátiť až na lg(n+1)• Potreba vyváženosti v každom vrchole

Page 3: Diskrétne geometrické štruktúry

AVL stromy

• Adelson-Velskii a Landis• AVL strom je samovyvažujúci sa BPS• pre každý jeho vrchol v platí:

– buď v je list– alebo v má jedného syna, ktorý je list– alebo v má dvoch synov. Ak ľavý podstrom vrchola

v má výšku h1 a pravý h2, potom platí:h1 – h2 1.

– b(v) = h1 – h2

• lg(n+1) h 1,44*lg(n+2)

Page 4: Diskrétne geometrické štruktúry

Vkladanie prvku do AVL stromu

• Najprv Insert pre BPS• V niektorých vrcholoch môže vzniknúť

nevyváženosť• Vrchol x treba vyvažovať práve vtedy, keď

platia nasledujúce dve podmienky:– b(x) = 1 a nový vrchol je pridaný doľava od x, – b(x) = -1 a nový vrchol je pridaný doprava od x,– pre y, ktorý leží na ceste od x ku pridávanému

vrcholu platí: b(y) = 0

Page 5: Diskrétne geometrické štruktúry

Vyvažovanie

• Podstrom s nevyváženým vrcholom treba preskupiť aby nastala vyváženosť

• Treba zachovať pravidlá BPS• Treba zachovať výšku podstromu, aby sa

nemuseli vyvažovať ostatne vrcholy• Viaceré konfigurácie - rotácie

Page 6: Diskrétne geometrické štruktúry
Page 7: Diskrétne geometrické štruktúry

AVL_INSERT(T, v){

x = T->root;if (T->root == NULL) {T->root = v; v->b = 0;}else{

INSERT (T->root, v);MODIFY (x, v);if (x->b == 2){

if (x->left->b == 1) vyvažuj podľa Aif (x->left->b == -1) vyvažuj podľa B

}if (x->b == -2){ Symetricky ku (b(x) == 2);}

}}

struct AVLNode{

int key;AVLNode* left;AVLNode* right;AVLNode* parent;int b;void* data;

}

struct AVLTree{

AVLNode* root;}

MODIFY (u, v){

if (v->key < u->key)if (u->left != NULL) {

u->b = u->b + 1;MODIFY (u->left, v);

}if (v->key > u->key)

if (u->right != NULL) {

u->b = u->b – 1;MODIFY (u->right, v);

}}

INSERT (u, v){

if (v->key < u->key)if (u->left == NULL) {u->left = v; if (u->b != 0) x = u;}else{

if (u->b != 0) x = u; INSERT (u->left, v);}

if (v->key > u->key)if (u->right == NULL) { u->right = v; if (u->b != 0) x = u;}else{

if (u->b != 0) x = u; INSERT (u->right, v);}

}

AVL – algoritmy

Page 8: Diskrétne geometrické štruktúry

Rotácie

LL rotation

RR rotation

Page 9: Diskrétne geometrické štruktúry

Rotácie 2

LR rotation

RL rotation

Page 10: Diskrétne geometrické štruktúry

Vymazanie vrcholu z AVL• Rozšírenie DELETE pre BPS:• 1) v má najviac 1 syna:• - vrchol v vynecháme ako pri DELETE pre BPS• - x = vparent;• - BALANCE (x, v);• -delete v;• 2) v má dvoch synov: • - nájdeme maximum v ľavom podstrome vrchola

v (MAX)• - vymeníme v a MAX• - postupujeme podľa 1)

Page 11: Diskrétne geometrické štruktúry

Balance

BALANCE (x, v){

if (x != NULL){

if ((v->key < x->key) && (x->b 0)){

x->b = x->b – 1;if (x->b == 0) BALANCE (x->parent, v);

}if (v->key > x->key) and (x->b 0){

x->b = x->b + 1;if (x->b == 0) BALANCE (x->parent, v);

}if (v->key > x->key) and (x->b == 1) situácia A alebo Bif (v->key < x->key) and (x->b == -1) situácia symetr. ku A alebo Bif (vyvažovanie A resp. B && x->parent nevyváženosť) BALANCE (xparent, v);

}}

Page 12: Diskrétne geometrické štruktúry

Rotácie 3

Page 13: Diskrétne geometrické štruktúry

Zložitosť pre AVL stromy

• Daná výškou stromu• Asymptotická zložitosť operácií: O(log n)• Maximálny počet prechodov: 1.44 * lg(n)• Insert: možná jedna rotácia, priemerne 1

rotácia na 2 vloženia• Delete: možnosť veľa rotácií pre jedno

vymazanie, priemerne 1 rotácia na 5 vymazaní

Page 14: Diskrétne geometrické štruktúry

Červeno-čierne stromy

• Iné pravidlá pre vyváženie:1. Každý vrchol je čierny alebo červený2. Koreň stromu je čierny3. Všetky listy stromu sú čierne4. Synovia červeného vrcholu sú čierny5. Každá cesta z vrcholu v do nejakého listu má

rovnaký počet čiernych vrcholov

Page 15: Diskrétne geometrické štruktúry

Vlastnosti

• bh(n) – počet čiernych vrcholov na ceste z vrchola n do listu

• R-B strom má výšku maximálne 2.lg(n+1)• Dĺžka najdlhšej cesty z koreňa do listu nie je

väčšia ako dvojnásobná dĺžka najkratšej cesty z koreňa do listu

• Na jednej ceste z vrcholu do listu nemôže byť viac červených vrcholov ako čiernych

Page 16: Diskrétne geometrické štruktúry

Vkladanie

• BPS vkladanie• Vlož vrchol ako červený• Postupuj od vloženého vrcholu až do koreňa

hľadaj porušenie pravidla 3, 4 a 5• Ak je porušené pravidlo prefarbuj alebo rotuj

v okolí daného vrchola

Page 17: Diskrétne geometrické štruktúry

Vkladanie 2RB_INSERT (T, x){

BPS_INSERT(T, x);x->color = RED;while (x != T>root && x->parent->color == RED){

if (x->parent == x->parent->parent->left){

Y = x->parent->parent->right;if (y->color == RED){

x->parent->color = BLACK;y->color = BLACK;x->parent->parent = RED;x = x->parent->parent;

}else{

if (x == x->parent->right){ x = x->parent; LeftRotate(x);}x->parent->color = BLACK;x->parent->parent->color = RED;RightRotate(x->parent->parent);

}}else{ // symetricky, vymenit left a right}

}}

Prípad 1

Prípad 2

Prípad 3

Page 18: Diskrétne geometrické štruktúry
Page 19: Diskrétne geometrické štruktúry

Vymazanie vrcholu z R-B

• Mazanie ako pri BPS• Ak zmazaný vrchol bol červený, nič sa nedeje• Ak je vrchol čierny, treba urobiť spätný

prechod od mazaného vrcholu do koreňa a opravovať podmienky

• Použitie rotácií a prefarbovania

Page 20: Diskrétne geometrické štruktúry

B-stromy

• Každý vrchol obsahuje aspoň n synov• Každý vrchol obsahuje najviac 2n vrcholov• Všetky listy sú na jednej úrovni• V každom vrchole je počet kľúčov o 1 menší

ako počet potomkov• n – rád stromu• Výška stromu – O(lognN)

Page 21: Diskrétne geometrické štruktúry

B-stromy 2

• Vkladanie – kontrola na prekročenie limitu 2.n

• Mazanie – kontrola na počet potomkov aspoň n

• Náprava – rozdeľovanie, spájanie kľúčov, rotácie

Page 22: Diskrétne geometrické štruktúry

Halda

• Stromová štruktúra• Ak vrchol B je potomok vrcholu A, tak key(A)

key(B) (key(A) key(B))• Vytvorenie v O(n)• Použitie:

– Triedenie– Prehľadávanie utriedených množín– Grafové algoritmy– Prioritná fronta

Page 23: Diskrétne geometrické štruktúry

Zásobník

• Princíp Last In First Out (LIFO), posledný uložený prvok sa vyberie ako prvý

• Operácie (push, pop, peek, size, …)• Použitie:

– spracovanie výrazov– manament pämate– skladanie transformácií

Page 24: Diskrétne geometrické štruktúry

Fronta

• Princíp First In First Out (FIFO)• Prvky sa vkladajú na jednom konci, vyberajú

na druhom• Vyberá sa vždy „najstarší“ prvok vo fronte• Prioritná fronta:

– Pridaj prvok s definovanou prioritou– Vyber prvok s najvyššou prioritou

Page 25: Diskrétne geometrické štruktúry

koniec (-:[email protected]