• Non ci sono risultati.

Organizzazione logica di un disco

N/A
N/A
Protected

Academic year: 2022

Condividi "Organizzazione logica di un disco"

Copied!
24
0
0

Testo completo

(1)

Indici con gli alberi

Alberi perfettamente bilanciati per

indici su memorie di massa: B-alberi

(2)

Indici su memorie secondarie

Spesso i dati da ordinare sono in quantità tale da richiedere dispositivi di

memoria secondaria, come i dischi

(3)

Organizzazione logica di un disco

blocco (record fisico)

settore traccia (cilindro)

testina

I dischi sono

strutturati in blocchi adiacenti detti pagine Ogni accesso ha un

tempo di latenza

(4)

Un albero binario impaginato

Queste pagine hanno dimensione costante: ora sono piene

(5)

Un albero di ricerca impaginato

15

7 23

5

2 6

11

9 12

18

16 20

30

25 31

7 15 23

2 5 6 9 11 12 16 18 20 25 30 31

(6)

B-alberi

Un B-albero è un albero perfettamente bilanciato (rami tutti della stessa lunghezza) di “pagine” di dimensione fissata, tali che:

1. le pagine sono sempre riempite almeno per metà, ad eccezione della radice;

2. se una pagina ha r chiavi e non è un foglia, allora ha r + 1 figli;

3. le chiavi nelle pagine sono ordinate, e la relazione con le chiavi dei sottoalberi è quella degli alberi di ricerca.

Un B-albero è un albero perfettamente bilanciato (rami tutti della stessa lunghezza) di “pagine” di dimensione fissata, tali che:

1. le pagine sono sempre riempite almeno per metà, ad eccezione della radice;

2. se una pagina ha r chiavi e non è un foglia, allora ha r + 1 figli;

3. le chiavi nelle pagine sono ordinate, e la relazione con le chiavi dei sottoalberi è quella degli alberi di ricerca.

B-alberi da Bayer (che li ha inventati con McCreight) o forse da “bilanciato”

(7)

Un B-albero

25

10 20 30 40

2 5 7 8 13 14 15 18 41 42 45 46 26 27 28 32 35 38 41 42 45 46

In un nodo (diverso dalla radice) ci sono t ≤ i ≤ 2t chiavi:

t è il grado dell’albero (= 1/2 max numero delle chiavi in un nodo)

(8)

L’altezza di un B-albero

Teorema. Se un B-albero di grado t ed altezza h contiene n chiavi, allora h ≤ log t+1 (n + 1)/2

Teorema. Se un B-albero di grado t ed altezza h contiene n chiavi, allora h ≤ log t+1 (n + 1)/2

1

t

t t + 1 t

t

t t + 1 t

t + 1 t + 1 t + 1 t + 1

Questo è il peggior rapporto tra h e n

t 2 1

) 1 (

2t t + )2

1 (

2t t +

chiavi

(9)

L’altezza di un B-albero

Teorema. Se un B-albero di grado t ed altezza h contiene n chiavi, allora h ≤ log t+1 (n + 1)/2

Teorema. Se un B-albero di grado t ed altezza h contiene n chiavi, allora h ≤ log t+1 (n + 1)/2

: dunque chiavi,

) 1 (

2 sono ci

livello

Sul i t t + i1

1 )

1 (

1 2 )

1 2 (

1

) 1 (

2 1 )

1 (

2

1 1

0 1

1

+

= + +

=

+ +

= +

+

∑ ∑

=

=

h h

h i h i

i

i

t t t t

t t

t t

n

h è O(logt n): quindi la costante moltiplicativa è tanto minore quanto maggiore è t

(10)

Ricerca in un B-albero

Search(k, T)

// Post: true sse k è una chiave in T if T = ∅ then return false

else (y, b) ← Src(k, root(T)) return b

Src(k, x)

// Pre: x ≠ nil

// Post: ritorna (y, b) dove y è un nodo dell’albero T t.c. x = root(T), // se k è in y allora b = true

// se k non è in y allora b = false e y è una foglia

(11)

Ricerca in un B-albero

Src(k, x) sia x =

if k ∈ {k1, …, kr} then return (x, true) else if x è una foglia then return (x, false) else if k < k1 then return Src(k, x1)

else sia i ∈ 1 .. r t.c. k ∈ ki .. ki+1 (posto kr+1 = +∞) return Src(k, xi+1)

x1 k1 x2 … xr kr xr+1

È una generalizzazione della ricerca in un albero

binario di ricerca

(12)

Inserimento

I B-alberi “crescono” dalle foglie: quando non c’è più

posto si innesca un

meccanismo di propagazione delle suddivisioni dei nodi

(13)

Divisione di un nodo

10 30

35 40 22 26

7 10 15 18 20

26 30 35 40 7 10 15 18

22

Caso in cui l’inserimento di una chiave avviene in un nodo pieno diverso dalla radice

(14)

Divisione della radice

26 52 79 91 22

a b c d e

a16 a”

a

22

(15)

Divisione della radice

52

16 26

b c d e

aa”

79 91

Questo è il solo caso in cui l’altezza aumenta

(16)

Inserimento

Insert(k, T) // Pre: il grado di T è t; Post: T risulta dall’inserimento di k in T if T = ∅ then T ← [nil, k, nil]

else (x, b) ← Src(k, root(T)), u ← nil, v ← nil

while not b do // se b = true allora non c’è più nulla da fare

sia x = [y1 k1 y2 … yr kr yr+1], i t.c. k ∈ ki .. ki+1 (posto kr+1 = +∞) z ← [y1 k1 y2 … kr u k v ki+1 … yr kr yr+1]

if r < 2t then x ← z, b ← true // c’è posto in x

else // r = 2t i.e. x era pieno e z ha una chiave in più sia z = [y’1 k’1 y’2 … y’r k’r y’r+1]

k ← k’t+1, u ← [y’1 k’1 y’2 … y’t k’t y’t+1]

v ← [y’t+2 k’t+2 y’t+3 … y’r k’r y’r+1] if x = root(T) then root(T) ← [u, k, v], b ← true

(17)

Cancellazione

Per cancellare la chiave k distinguiamo i casi:

1. La chiave k è in una foglia

2. La chiave k è in un nodo interno

(18)

Cancellazione

La chiave k è in una foglia x:

1. Il nodo x rimane con almeno t chiavi: OK 2. Tolta k, x ha t – 1 chiavi (e non è una foglia,

altrimenti OK):

k’

x y

t – 1 r > t

Caso:

(19)

Cancellazione

La chiave k è in una foglia x:

1. Il nodo x rimane con almeno t chiavi: OK 2. Tolta k, x ha t – 1 chiavi (e non è una foglia,

altrimenti OK):

min(y)

y – {min(y)}

x, k’

(risultato)

(20)

Cancellazione

La chiave k è in una foglia x:

1. Il nodo x rimane con almeno t chiavi: OK 2. Tolta k, x ha t – 1 chiavi (e non è una foglia,

altrimenti OK):

k’

x y

t – 1 t – 1

Caso:

(21)

Cancellazione

La chiave k è in una foglia x:

1. Il nodo x rimane con almeno t chiavi: OK 2. Tolta k, x ha t – 1 chiavi (e non è una foglia,

altrimenti OK):

max(y)

x, k’, y – max(y) (risultato)

(22)

Cancellazione

k k’

x y

> t

Caso:

max(x) k’

x – max(x) y

(risultato)

bilanciamento

La chiave k è in un nodo interno

(23)

Cancellazione

La chiave k è in un nodo interno

k k’

x y

Caso:

t – 1 t – 1

Ma ora dobbiamo controllare se qui ci sono ancora ≥ t

chiavi

k’

x, y fusione

(24)

Analisi della complessità

• Le operazioni di ricerca, inserimento e cancellazione sono O(h)

• h è O(logt n) = O(log n) (ma t conta in pratica: meglio t grande)

• gli accessi al disco (e i tempi di latenza) sono O(h)

2 X 2

Meglio fermarsi = 5

qui: buon weekend

Riferimenti

Documenti correlati

[r]

[r]

[r]

Sembravano tutti aspettare qualcosa e visto che tutti erano tranquilli Il cerbiatto pensò che fosse normale per gli esseri umani avere gli alberi dentro casa!. Così pensando

una quercia. A  su per il tronco di  si stava arrampicando  tutto sudato e sporco da  scuola, 

Un albero binario si dice degenere se ha n nodi e altezza n −1, cioè se ogni nodo interno ha un solo figlio. Osservazioni: Per

Un arco che attraversa un taglio si dice leggero se ha peso pari al minimo tra i pesi di tutti gli archi che attraversano tale taglio..

costruire un albero binario di ricerca Marco Lapegna – Laboratorio di Programmazione 2 Cenni agli alberi. procedura ricerca(in: radice, e;