Algoritmi e Programmazione Avanzata - Politecnico di...

148
1/296 Algoritmi e Programmazione Avanzata - teoria 2/296 Che cosa c’è nella lezione Questa lezione si occupa di strutture dati: tipi di dato astratto le pile le code le liste gli alberi binari di ricerca le tabelle di hash.

Transcript of Algoritmi e Programmazione Avanzata - Politecnico di...

Page 1: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

1

1/296

Algoritmi e Programmazione Avanzata - teoria

2/296

Che cosa c’è nella lezione

Questa lezione si occupa di strutture dati:

tipi di dato astratto

le pile

le code

le liste

gli alberi binari di ricerca

le tabelle di hash.

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 1
Page 2: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

2

3/296

Algoritmi e Programmazione Avanzata - teoria

4/296

Tipo di Dato Astratto:

Definizione

Modello matematico sul quale è definito un insieme di operazioni.

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 2
Page 3: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

3

5/296

Modello: insieme di elementi genericiOperazioni:

unione (X,Y)inters (X,Y)diff (X,Y)

Modello: intervallo di interiOperazioni:

+-*:

Esempio

6/296

Tipi primitivi: quelli supportati da un linguaggio (int, float, char per il C) con le loro operazioni (+, -, *, /, % etc.).

Tipi di Dati Astratti : estensione dell’insieme dei tipi di dato supportati.

Estensione dei tipi primitivi

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 3
Page 4: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

4

7/296

nuove operazioni sui tipi primitivinuove operazioni su nuovi tipi

Tipi di Dato Astratto: associazione nuovo tipo ↔ nuovo insieme di operazioni.

Operatori: predefiniti, operazioni elementari sui tipi primitivi.

Procedure come estensione degli operatori:

Estensione

8/296

Definizione del Tipo di Dato Astratto indipendente da:

linguaggio di programmazione

scelta implementativa (struttura dati)

Implementazione

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 4
Page 5: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

5

9/296

Definire in un file separato le procedure corrispondenti alle operazioni definite dal Tipo di Dato Astratto.

Definire un tipo di dato corrispondente al Tipo di Dato Astratto.

Lavorare sul Tipo di Dato Astratto esclusivamente utilizzando le procedure fornite.

Campi dato visibili solo attraverso le funzioni.

Implementazione in C

10/296

Esempio

Definizione del tipo:typedef SET_ELEM int;

Esempi di procedure:SET_ELEM *unione (SET_ELEM *, SET_ELEM *);SET_ELEM *inters(SET_ELEM *, SET_ELEM *);SET_ELEM *diff(SET_ELEM *, SET_ELEM *);SET_ELEM *make_null(void);int size (SET_ELEM *); void dump (SET_ELEM *);

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 5
Page 6: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

6

11/296

Algoritmi e Programmazione Avanzata - teoria

12/296

Tipo di dato astratto con politica LIFO (Last In First Out) con operazioni:

Push: inserisce nuovo elemento nella pilaPop: estrae dalla pila l’ultimo elementoinseritoEmpty: vero se pila vuotaInit: crea nuova pila

Definizione

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 6
Page 7: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

7

13/296

Esempio

Init()

14/296

Esempio

Push (K1)

K1

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 7
Page 8: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

8

15/296

Esempio

Push (K2)

K1

K2

16/296

Esempio

Push (K3)

K1

K3

K2

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 8
Page 9: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

9

17/296

Esempio

Pop

K1

K2 K3

18/296

Esempio

Pop

K1

K2

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 9
Page 10: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

10

19/296

Vettore buff di N elementi

Variabile top: indice dell’ultimo elemento inserito

Complessità delle operazioni T(n) = O(1)

Implementazione tramite vettore

20/296

#define N 100int buff[N];int top;void push(int val);int pop(void);int empty(void);void push(int val) {

buff[++top] = val;return;

}

Implementazione C 1/2

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 10
Page 11: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

11

21/296

int pop(void) {

return(buff[top--]);}int empty(void){

if(top == 0)return (1);

elsereturn (0);

}

Implementazione C 2/2

22/296

Algoritmi e Programmazione Avanzata - teoria

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 11
Page 12: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

12

23/296

Tipo di dato astratto con politica FIFO (First In First Out) con operazioni:

Enqueue: inserisce un nuovo elementonella codaDequeue: estrae dalla coda il primo elemento inserito Empty: vero se coda vuotaInit: crea nuova coda.

Definizione

24/296

Esempio

Init()

Dequeue Enqueue

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 12
Page 13: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

13

25/296

Esempio

K1

Dequeue Enqueue

Enqueue(K1)

26/296

Esempio

K1

Dequeue Enqueue

Enqueue(K2) K2

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 13
Page 14: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

14

27/296

Esempio

K1

Dequeue Enqueue

Enqueue(K3) K2 K3

28/296

Esempio

K2

Dequeue Enqueue

K3K1Dequeue

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 14
Page 15: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

15

29/296

Esempio

K3

Dequeue Enqueue

K2Dequeue

30/296

Vettore buffer di N+1 elementi per code di Nelementi

Variabili:head: indice del primo elemento inseritotail: indice del primo elemento disponibileper l’inserimento

Vettore come buffer circolare

Complessità delle operazioni T(n) = O(1)

Implementazione tramite vettore

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 15
Page 16: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

16

31/296

Dequeue: incrementa head modulo N+1

Enqueue: incrementa tail modulo N+1

Inizialmente head = 0, tail = 0

Coda piena (overflow):head = (tail + 1) modulo N+1

Coda vuota (underflow):head = tail

Buffer circolare

32/296

Esempio

1 2 3 4 50

Coda con max 5 elementi (N=5)

head tail

Coda vuota

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 16
Page 17: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

17

33/296

Esempio

1 2 3 4 50

Coda con max 5 elementi (N=5)

head tail

Enqueue(A)

34/296

Esempio

1 2 3 4 50

Coda con max 5 elementi (N=5)

Enqueue(A)

A

head tail

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 17
Page 18: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

18

35/296

Esempio

1 2 3 4 50

Coda con max 5 elementi (N=5)

Enqueue(B)

A

tailhead

36/296

Esempio

1 2 3 4 50

Coda con max 5 elementi (N=5)

Enqueue(B)

A

tail

B

head

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 18
Page 19: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

19

37/296

Esempio

1 2 3 4 50

Coda con max 5 elementi (N=5)

Enqueue(C)

A

tail

B

head

38/296

Esempio

C

1 2 3 4 50

Coda con max 5 elementi (N=5)

Enqueue(C)

A B

tailhead

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 19
Page 20: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

20

39/296

Esempio

C

1 2 3 4 50

Coda con max 5 elementi (N=5)

Enqueue(D)

A B

tailhead

40/296

Esempio

C

1 2 3 4 50

Coda con max 5 elementi (N=5)

Enqueue(D)

A B

tail

D

head

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 20
Page 21: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

21

41/296

Esempio

C

1 2 3 4 50

Coda con max 5 elementi (N=5)

Dequeue

A B

tail

D

head

42/296

Esempio

C

1 2 3 4 50

Coda con max 5 elementi (N=5)

Dequeue

B

head tail

DA

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 21
Page 22: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

22

43/296

Esempio

C

1 2 3 4 50

Coda con max 5 elementi (N=5)

Enqueue(E)

B

head tail

D

44/296

Esempio

C E

1 2 3 4 50

Coda con max 5 elementi (N=5)

Enqueue(E)

B

head tail

D

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 22
Page 23: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

23

45/296

Esempio

C E

1 2 3 4 50

Coda con max 5 elementi (N=5)

Enqueue(F)

B

head tail

D

46/296

Esempio

C E F

1 2 3 4 50

Coda con max 5 elementi (N=5)

Enqueue(F)

B

head

D

tail

Coda piena

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 23
Page 24: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

24

47/296

Esempio

C E F

1 2 3 4 50

Coda con max 5 elementi (N=5)

Dequeue

B

head

D

tail

48/296

Esempio

C E F

1 2 3 4 50

Coda con max 5 elementi (N=5)

Dequeue

head

D

tail

B

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 24
Page 25: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

25

49/296

Esempio

C E F

1 2 3 4 50

Coda con max 5 elementi (N=5)

Enqueue(G)

head

D

tail

50/296

Esempio

G C E F

1 2 3 4 50

Coda con max 5 elementi (N=5)

Enqueue(G)

head

D

tail Coda piena

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 25
Page 26: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

26

51/296

Esempio

G C E F

1 2 3 4 50

Coda con max 5 elementi (N=5)

Dequeue

head

D

tail

52/296

Esempio

G E F

1 2 3 4 50

Coda con max 5 elementi (N=5)

Dequeue

head

D

tail

C

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 26
Page 27: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

27

53/296

Esempio

G E F

1 2 3 4 50

Coda con max 5 elementi (N=5)

Dequeue

headtail

D

54/296

Esempio

G F

1 2 3 4 50

Coda con max 5 elementi (N=5)

Dequeue

headtail

E

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 27
Page 28: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

28

55/296

Esempio

G

1 2 3 4 50

Coda con max 5 elementi (N=5)

Dequeue

head tail

F

56/296

Esempio

1 2 3 4 50

Coda con max 5 elementi (N=5)

Dequeue

G

head tailCoda vuota

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 28
Page 29: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

29

57/296

Implementazione in C

#define DIM 10int buffer[DIM+1];int tail=0, head=0;

int enqueue(int elem);int dequeue(void);int empty(void);

58/296

Implementazione in C

int enqueue(int elem){if((tail+1)==head||(tail==DIM && head==0))return(-1);

buffer[tail++] = elem;if(tail == (DIM+1))tail = 0;

return(0);}

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 29
Page 30: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

30

59/296

Implementazione in C

int dequeue(void){int ret;if(head == tail)

return(-1);ret = buffer[head++];if(head == (DIM+1))

head = 0;return(ret);

}

60/296

Implementazione in C

int empty(void){

if(head == tail)return(1);

elsereturn(0);

}

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 30
Page 31: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

31

61/296

Algoritmi e Programmazione Avanzata - teoria

62/296

Struttura dati lineare:elementi allocati/deallocati separatamenteelementi concatenati (e quindi accessibili) attraverso puntatorivariabile head: accesso al primo elementooperazioni:

- insert (in testa di linea non ordinata o in lista ordinata)

- search- delete

Definizione

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 31
Page 32: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

32

63/296

Vantaggi/svantaggi:

memoria corrispondente agli elementieffettivamente utilizzataaccesso mediante scansione

Classificazione:

liste ordinate / non ordinate

Definizione

64/296

Operazioni:Insert(L, k): nserisce una chiave k nella lista L

- liste non ordinate: in testa

- liste ordinate: posizione corretta

Search(L, k): cerca la chiave k nella lista L Delete(L, x): cancella la chiave k dalla lista L dato il puntatore x all’elemento che la contiene.

Definizione

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 32
Page 33: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

33

65/296

Esempio

head(L)

key nextLista concatenata doppia

head(L) NIL

key nextLista concatenata semplice

NILNIL

previous

66/296

Inserimento in testa (lista non ordinata)

head(L) Z P NIL

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 33
Page 34: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

34

67/296

Inserimento in testa (lista non ordinata)

head(L) Z P NIL

A NILxinsert(L, x)

68/296

Inserimento in testa (lista non ordinata)

head(L)

Z P NIL

A next(x) = head(L)head(L) = x

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 34
Page 35: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

35

69/296

Implementazione C

struct e {int key;struct e *next;};

struct e *insert(struct e *pTop,int val);

struct e *search(struct e *pTop,int *val,int *status);

struct e *newE( );

70/296

Implementazione C

struct e *newE ( )

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 35
Page 36: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

36

71/296

Implementazione C

struct e *newE ( )

Allocazione di un nuovo nodo

72/296

Implementazione C

struct e *newE ( ){

struct e *ePtr;

ePtr = (struct e *) malloc (sizeof(struct e));

if (ePtr==NULL) {fprintf (stderr, "Allocazione

fallita.");exit (FAILURE);

}return (ePtr);

}

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 36
Page 37: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

37

73/296

Implementazione C

struct e *insert (struct e *pTop,int val)

74/296

Implementazione C

struct e *insert (struct e *pTop,int val)

Inserimento in testa

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 37
Page 38: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

38

75/296

Implementazione C

struct e *insert (struct e *pTop,int val){

struct e *pNew;

pNew = newE ();

pNew->key = val;pNew->next = pTop;

76/296

Implementazione C

struct e *insert (struct e *pTop,int val){

struct e *pNew;

pNew = newE ();

pNew->key = val;pNew->next = pTop;

next(x) = head(L)

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 38
Page 39: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

39

77/296

Implementazione C

struct e *insert (struct e *pTop,int val){

struct e *pNew;

pNew = newE ();

pNew->key = val;pNew->next = pTop;pTop = pNew;

78/296

Implementazione C

struct e *insert (struct e *pTop,int val){

struct e *pNew;

pNew = newE ();

pNew->key = val;pNew->next = pTop;pTop = pNew;

head(L) = x

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 39
Page 40: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

40

79/296

Implementazione C

struct e *insert (struct e *pTop,int val){

struct e *pNew;

pNew = newE ();

pNew->key = val;pNew->next = pTop;pTop = pNew;

return (pTop);}

80/296

Ricerca

Scansione della lista a partire da head

Confronto chiave cercata / chiave corrente

Terminazione:

trovata la chiave cercata

fine lista

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 40
Page 41: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

41

81/296

Implementazione C

struct e *search (struct e *pTop,int *val,int*status)

82/296

Implementazione C

struct e *search (struct e *pTop,int *val,int*status) ricerca

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 41
Page 42: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

42

83/296

Implementazione C

struct e *search (struct e *pTop,int *val,int*status){

struct e *pTmp;*status = FAILURE;pTmp=pTop;while ((pTmp!=NULL) && (*status==FAILURE))

{if (pTmp->key==*val) {

*status = SUCCESS;} else {

pTmp=pTmp->next;}

}

84/296

Implementazione C

if (*status==SUCCESS) {fprintf (stdout,"Trovato %d\n",pTmp->key);

} else {fprintf (stdout,"NON Trovato \n");

}

return (pTop);}

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 42
Page 43: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

43

85/296

Cancellazione

Richiede:

una ricerca, che produce il puntatore x all'elemento da cancellare

il riaggiustamento dei puntatori- all’elemento da cancellare- all’elemento precedente- all’elemento seguente (lista concatenata doppia)

86/296

Cancellazione

head(L) NILNIL P A Z

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 43
Page 44: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

44

87/296

Cancellazione

head(L) NILNIL P A Z

delete(L, x) x

88/296

Cancellazione

prev[next[x]] = prev[x]next[prev[x]] = next[x]

head(L) NILNIL P A Z

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 44
Page 45: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

45

89/296

Complessità

Inserzione in testa di lista non ordinata:T(n) = O(1)

Ricerca:T(n) = O(n)

Cancellazione (dato il puntatore all’elemento da cancellare):

T(n) = O(1)

90/296

Algoritmi e Programmazione Avanzata - teoria

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 45
Page 46: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

46

91/296

Tipo di dato astratto con operazioni:searchminimummaximumpredecessorsuccessorinsertdelete

Implementano dizionari e code prioritarie.

Definizione 1/2

92/296

Proprietà:∀nodo x vale che:

∀ nodo y ∈Left(x), key[y] ≤ key[x]∀ nodo y ∈Right(x), key[y] ≥ key[x]

Definizione 2/2

≤ ≥Left(x) Right(x)

x

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 46
Page 47: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

47

93/296

Esempi

5

3 7

2 4 8

5

3

7

2

4

8

94/296

Attraversamenti

Attraversamento: elenco dei nodi secondo una strategia:

Pre-ordine: x, Left(x), Right(x)In-ordine: Left(x), x, Right(x) Post-ordine: Left(x), Right(x), x

Complessità: T(n) = Θ(n)

Attraversamento in-ordine: ordinamento crescente delle chiavi.

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 47
Page 48: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

48

95/296

Esempio

15

6 18

17 203 7

2 4 13

9

96/296

Esempio

15

6 18

17 203 7

2 4 13

9

15Visita in pre-ordine

1

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 48
Page 49: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

49

97/296

Esempio

15

6 18

17 203 7

2 4 13

9

15

2

1

Visita in pre-ordine

6

98/296

Esempio

15

6 18

17 203 7

2 4 13

9

15

3

2

1

Visita in pre-ordine

63

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 49
Page 50: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

50

99/296

Esempio

15

6 18

17 203 7

2 4 13

9

15

4

3

2

1

Visita in pre-ordine

632

100/296

Esempio

15

6 18

17 203 7

2 4 13

9

15

4

3

5

2

1

Visita in pre-ordine

6324

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 50
Page 51: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

51

101/296

Esempio

15

6 18

17 203 7

2 4 13

9

15

4

3

5

2

6

1

Visita in pre-ordine

63247

102/296

Esempio

15

6 18

17 203 7

2 4 13

9

15

4

3

5

2

6

7

1

Visita in pre-ordine

6324713

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 51
Page 52: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

52

103/296

Esempio

15

6 18

17 203 7

2 4 13

9

15

4

3

5

2

6

8

7

1

Visita in pre-ordine

63247139

104/296

Esempio

15

6 18

17 203 7

2 4 13

9

15

4

3

5

2

6

8

7

1

9

Visita in pre-ordine

6324713918

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 52
Page 53: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

53

105/296

Esempio

15

6 18

17 203 7

2 4 13

9

15

4

3

5

2

6

8

7

1

10

9

Visita in pre-ordine

632471391817

106/296

Esempio

15

6 18

17 203 7

2 4 13

9

15

4

3

5

2

6

8

7

1

10

9

11

Visita in pre-ordine

63247139181720

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 53
Page 54: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

54

107/296

Esempio

15

6 18

17 203 7

2 4 13

9

Visita in-ordine

108/296

Esempio

15

6 18

17 203 7

2 4 13

9

2

1

Visita in-ordine

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 54
Page 55: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

55

109/296

Esempio

15

6 18

17 203 7

2 4 13

9

2

1

2

Visita in-ordine

3

110/296

Esempio

15

6 18

17 203 7

2 4 13

9

2

1

2

3

Visita in-ordine

34

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 55
Page 56: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

56

111/296

Esempio

15

6 18

17 203 7

2 4 13

9

2

1

2

3

4

Visita in-ordine

346

112/296

Esempio

15

6 18

17 203 7

2 4 13

9

2

1

2

3

4

5

Visita in-ordine

3467

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 56
Page 57: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

57

113/296

Esempio

15

6 18

17 203 7

2 4 13

9

2

1

2

3

4

5

6

Visita in-ordine

34679

114/296

Esempio

15

6 18

17 203 7

2 4 13

9

2

1

2

3

4

5

6

7

Visita in-ordine

3467913

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 57
Page 58: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

58

115/296

Esempio

15

6 18

17 203 7

2 4 13

9

2

1

2

3

4

5

6

7

8

Visita in-ordine

346791315

116/296

Esempio

15

6 18

17 203 7

2 4 13

9

2

1

2

3

4

5

6

7

8

9

Visita in-ordine

34679131517

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 58
Page 59: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

59

117/296

Esempio

15

6 18

17 203 7

2 4 13

9

2

1

2

3

4

5

6

7

8

10

9

Visita in-ordine

3467913151718

118/296

Esempio

15

6 18

17 203 7

2 4 13

9

2

1

2

3

4

5

6

7

8

10

9 11

Visita in-ordine

346791315171820

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 59
Page 60: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

60

119/296

Esempio

15

6 18

17 203 7

2 4 13

9

Visita in post-ordine

120/296

Esempio

15

6 18

17 203 7

2 4 13

9

1

Visita in post-ordine2

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 60
Page 61: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

61

121/296

Esempio

15

6 18

17 203 7

2 4 13

9

1 2

Visita in post-ordine24

122/296

Esempio

15

6 18

17 203 7

2 4 13

9

1

3

2

Visita in post-ordine243

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 61
Page 62: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

62

123/296

Esempio

15

6 18

17 203 7

2 4 13

9

1

3

2

4

Visita in post-ordine2439

124/296

Esempio

15

6 18

17 203 7

2 4 13

9

1

3

2

4

5

Visita in post-ordine243913

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 62
Page 63: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

63

125/296

Esempio

15

6 18

17 203 7

2 4 13

9

1

3

2

6

4

5

Visita in post-ordine2439137

126/296

Esempio

15

6 18

17 203 7

2 4 13

9

1

3

2

7

6

4

5

Visita in post-ordine24391376

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 63
Page 64: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

64

127/296

Esempio

15

6 18

17 203 7

2 4 13

9

1

3

2

7

6

4

5

8

Visita in post-ordine2439137617

128/296

Esempio

15

6 18

17 203 7

2 4 13

9

1

3

2

7

6

4

5

98

Visita in post-ordine243913761720

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 64
Page 65: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

65

129/296

Esempio

15

6 18

17 203 7

2 4 13

9

1

3

2

7

6

4

5

9

10

8

Visita in post-ordine24391376172018

130/296

Esempio

15

6 18

17 203 7

2 4 13

9

1

3

2

7

6

4

5

9

10

8

11

Visita in post-ordine2439137617201815

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 65
Page 66: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

66

131/296

Search

Ricerca ricorsiva di un nodo con chiave k:

percorrimento dell’albero dalla radice;

terminazione: trovato k oppure giunti a una foglia;

ricorsione: dal nodo x - su sottoalbero sinistro se k < key[x] - su sottoalbero destro se k ≥ key[x].

132/296

Esempio

15

18

17 20

k = 13

6

3 7

2 4 13

9

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 66
Page 67: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

67

133/296

Esempio

15

18

17 20

k = 13

6

3 7

2 4 13

9

134/296

Esempio

15

18

17 20

k = 1313 ≠ 15

6

3 7

2 4 13

9

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 67
Page 68: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

68

135/296

Esempio

15

18

17 20

k = 1313 ≠ 1513 < 15

6

3 7

2 4 13

9

136/296

Esempio

15

18

17 20

k = 1313 ≠ 1513 < 15

6

3 7

2 4 13

9

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 68
Page 69: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

69

137/296

Esempio

15

18

17 20

k = 13

6

3 7

2 4 13

9

138/296

Esempio

15

18

17 20

k = 13

6

3 7

2 4 13

9

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 69
Page 70: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

70

139/296

Esempio

15

18

17 20

k = 1313 ≠ 6

6

3 7

2 4 13

9

140/296

Esempio

15

18

17 20

k = 1313 ≠ 613 > 6

6

3 7

2 4 13

9

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 70
Page 71: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

71

141/296

Esempio

15

18

17 20

k = 1313 ≠ 613 > 6

6

3 7

2 4 13

9

142/296

Esempio

15

18

17 20

k = 13

6

3 7

2 4 13

9

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 71
Page 72: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

72

143/296

Esempio

15

18

17 20

k = 13

6

3 7

2 4 13

9

144/296

Esempio

15

18

17 20

k = 1313 ≠ 7

6

3 7

2 4 13

9

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 72
Page 73: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

73

145/296

Esempio

15

18

17 20

k = 1313 ≠ 713 > 7

6

3 7

2 4 13

9

146/296

Esempio

15

18

17 20

k = 1313 ≠ 713 > 7

6

3 7

2 4 13

9

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 73
Page 74: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

74

147/296

Esempio

15

18

17 20

k = 13

6

3 7

2 4 13

9

148/296

Esempio

15

18

17 20

k = 13

6

3 7

2 4 13

9

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 74
Page 75: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

75

149/296

Esempio

15

18

17 20

k = 1313=13

6

3 7

2 4 13

9

150/296

Esempio

15

18

17 20

k = 1313=13

6

3 7

2 4 13

9 Trovato!

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 75
Page 76: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

76

151/296

Min e max

Min:seguire il puntatore al sottoalbero sinistro finchè esiste.

Max:seguire il puntatore al sottoalbero destro finchèesiste.

152/296

Esempio

15

6 18

17 203 7

2 4 13

9

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 76
Page 77: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

77

153/296

Esempio

15

6 18

17 203 7

2 4 13

9

154/296

Esempio

15

6 18

17 203 7

2 4 13

9

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 77
Page 78: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

78

155/296

Esempio

15

6 18

17 203 7

2 4 13

9

min = 2

156/296

Esempio

15

6 18

17 203 7

2 4 13

9

min = 2

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 78
Page 79: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

79

157/296

Esempio

15

6 18

17 203 7

2 4 13

9

min = 2max = 20

158/296

Successor

Successore di un nodo x:nodo con la più piccola chiave k > key[x].Due casi:

∃ Right(x): succ(x) = min(Right(x))∃ Right(x): succ(x) = primo antenato di x ilcui figlio sinistro è anche un antenato di x.

x

p[x]

x

p[x]

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 79
Page 80: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

80

159/296

Esempio

15

6 18

17 203 7

2 4 13

9

160/296

Esempio

15

6 18

17 203 7

2 4 13

9

x

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 80
Page 81: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

81

161/296

Esempio

15

6 18

17 203 7

2 4 13

9

x

162/296

Esempio

15

6 18

17 203 7

2 4 13

9

x

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 81
Page 82: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

82

163/296

Esempio

15

6 18

17 203 7

2 4 13

9

x

succ(x)

164/296

Esempio

15

6 18

17 203 7

2 4 13

9

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 82
Page 83: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

83

165/296

Esempio

15

6 18

17 203 7

2 4 13

9x

166/296

Esempio

15

6 18

17 203 7

2 4 13

9x

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 83
Page 84: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

84

167/296

Esempio

15

6 18

17 203 7

2 4 13

9x

succ(x)

168/296

Predecessor

Predecessore di un nodo x:nodo con la più grande chiave k < key[x].

Due casi:

∃ Left(x): pred(x) = max(Left(x))

∃ Left(x): pred(x) = primo antenato di x il cui figlio destro è anche un antenato di x.

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 84
Page 85: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

85

169/296

Esempio

15

6 18

17 203 7

2 4 13

9

170/296

Esempio

15

6 18

17 203 7

2 4 13

9

x

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 85
Page 86: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

86

171/296

Esempio

15

6 18

17 203 7

2 4 13

9

x

172/296

Esempio

15

6 18

17 203 7

2 4 13

9

x

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 86
Page 87: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

87

173/296

Esempio

15

6 18

17 203 7

2 4 13

9

x

pred(x)

174/296

Esempio

15

6 18

17 203 7

2 4 13

9

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 87
Page 88: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

88

175/296

Esempio

15

6 18

17 203 7

2 4 13

9 x

176/296

Esempio

15

6 18

17 203 7

2 4 13

9 x

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 88
Page 89: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

89

177/296

Esempio

15

6 18

17 203 7

2 4 13

9 x

pred(x)

178/296

Insert

Inserire in un albero binario di ricerca un nodo z con chiave key[z] ⇒ mantenimento della proprietà:

creazione del nuovo nodo z, con Left[z]=Right[z]=NIL;

posizione di inserimento di z come foglia, simulando la ricerca di key[z];

aggiornamento dei puntatori.

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 89
Page 90: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

90

179/296

Esempio

insert(T,z)

z12

5 18

15 202 9

17

13

T

180/296

Esempio

insert(T,z)

z12

5 18

15 202 9

17

13

T

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 90
Page 91: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

91

181/296

Esempio

insert(T,z)

z12

5 18

15 202 9

17

13

T

182/296

Esempio

z12

5 18

15 202 9

17

13

T insert(T,z)

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 91
Page 92: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

92

183/296

Esempio

z12

5 18

15 202 9

17

13

T insert(T,z)

184/296

Esempio

z12

5 18

15 202 9

17

13

T insert(T,z)

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 92
Page 93: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

93

185/296

Esempio

12

5 18

15 202 9

1713

T

186/296

Delete

Cancellazione da un albero binario di ricerca di un nodo z ⇒

mantenimento della proprietàmantenimento della struttura ad alberobinario.

Tre casi:1. nodo z foglia2. nodo z con 1 solo figlio 3. nodo z con 2 figli.

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 93
Page 94: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

94

187/296

Caso 1: foglia

15

6 18

17 203 7

2 4 13

9 z

188/296

Caso 1: foglia

15

6 18

17 203 7

2 4 13

9 z

delete(z):rimozione immediata.

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 94
Page 95: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

95

189/296

Caso 1: foglia

15

6 18

17 203 7

2 4 13

190/296

Caso 2: 1 figlio

15

6 18

17 203 7

2 4 13

9

delete(z):

z

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 95
Page 96: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

96

191/296

Caso 2: 1 figlio

15

6 18

17 203 7

2 4 13

9

delete(z):

x

z

192/296

Caso 2: 1 figlio

15

6 18

17 203 7

2 4 13

9

x

p

delete(z):il figlio x di z diventafiglio del padre p di z.

z

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 96
Page 97: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

97

193/296

Caso 2: 1 figlio

15

6 18

17 203

2 4 13

9

194/296

Caso 3: 2 figli

15

6 18

17 203 7

2 4 13

9

delete(z):z

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 97
Page 98: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

98

195/296

Caso 3: 2 figli

15

6 18

17 203 7

2 4 13

9

y

delete(z):si cancella y = succ(z)z

196/296

Caso 3: 2 figli

15

6 18

17 203 7

2 4 13

9

y

delete(z):si cancella y = succ(z)si copia y su z

z

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 98
Page 99: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

99

197/296

Caso 3: 2 figli

15

6 18

17 203 7

2 4 13

9

y

delete(z):si cancella y = succ(z)si copia y su z

z

Nota: y può esserepred(z)

198/296

Caso 3: 2 figli

17

6 18

203 7

2 4 13

9

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 99
Page 100: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

100

199/296

Complessità

Le operazioni hanno complessità T(n) = O(h):

albero con n nodi completamente bilanciato- altezza h = log2 n

albero con n nodi completamente sbilanciato- altezza h = n

O(log2 n) ≤ T(n) ≤ O(n)

200/296

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 100
Page 101: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

101

201/296

Tipo di dato astrattoModello: insieme finito di simboli. Operazioni:

searchinsertdelete.

? ∃ corrispondenza biunivoca insieme finito di simboli

e intervallo di interi.

Dizionario

202/296

Applicazioni

Tabella dei simboli di un compilatore

Chiave = nome di un identificatoreDati aggiuntivi = tipo, contesto, dichiarazione.

Cache di file o URL

Chiave = pathDati aggiuntivi = attributi e contenuto.

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 101
Page 102: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

102

203/296

Chiave k ∈ U = {0, 1, …, m-1}

Tutte le chiavi sono distinte.

Vettore T[0, 1, …, m-1]:se ∃ k, T[k] punta a k, altrimenti T[k] = NIL.

Memorizzazione di un insieme K di |K| chiavi.

Tabelle ad accesso diretto 1/2

204/296

Tabelle ad accesso diretto 2/2

U (universo delle chiavi)

K (chiavi usate)

•7•4 •9

•5•3•8

•6

•0

•1

•2

012345678

m-1

23

5

8

chiave k

dati associati

T

x

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 102
Page 103: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

103

205/296

Operazioni

Search(T, k)

return(T[k])

Insert(T, x)

T[key[x]] = x

Delete(T, x)

T[key[x]] = NIL

206/296

Vantaggi/svantaggi

Complessità delle operazioni: T(n) = O(1)

Occupazione di memoria S(n) = O(|U|) = O(m)

applicabile per m piccolospreco di memoria per |K| << m.

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 103
Page 104: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

104

207/296

Tabelle di hash

In generale:m grande (vettore T non allocabile)|K| << m.

Tabella di hash:tipo di dato astratto con occupazione di spazio O(|K|) e tempo medio di accesso O(1).

208/296

Funzione di hash 1/2

La tabella di hash contiene |K| elementi (|K|<<|U|)

Funzione di hash h: mappa una chiave k in una posizione del vettore h(k)

h: U → { 0, 1, ..., m-1 }

Elemento x viene memorizzato nella locazione T[h(key[x])]

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 104
Page 105: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

105

209/296

Funzione di hash 2/2

•k1

012345678

m-1

T

U

•k3

•k2

•k4

•k5

210/296

Funzione di hash 2/2

•k1

012345678

m-1

T

U

•k3

•k2

•k4

•k5

h(k1)

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 105
Page 106: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

106

211/296

Funzione di hash 2/2

•k1

012345678

m-1

T

U

•k3

•k2

•k4

•k5

h(k1)

h(k2)

212/296

Funzione di hash 2/2

•k1

012345678

m-1

T

U

•k3

•k2

•k4

•k5

h(k1)

h(k2)

h(k3)

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 106
Page 107: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

107

213/296

Funzione di hash 2/2

•k1

012345678

m-1

T

U

•k3

•k2

•k4

•k5

h(k1)h(k4)

h(k2)

h(k3)

214/296

Funzione di hash 2/2

•k1

012345678

m-1

T

U

•k3

•k2

•k4

•k5

h(k1)h(k4)

h(k5)=h(k2)

h(k3)

Collisione

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 107
Page 108: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

108

215/296

Progetto della funzione di hash 1/2

Funzione ideale

hashing uniforme semplice:se le chiavi k sono equiprobabili, allora i valori di h(k) devono essere equiprobabili.

∑=

−==jkhk

mjm

kP)(:

1,,1,0,1

)( K

216/296

Progetto della funzione di hash 2/2

In pratica:

k non sono equiprobabili, anzi correlate:- usare tutti i bit della chiave- “amplificare” le differenze.

chiavi come numeri interi (illimitati)- “abc” diventa ‘a’*2562 + ‘b’*256 + ‘c’.

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 108
Page 109: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

109

217/296

Metodi

Divisione:

h(k) = k mod m

m: primo non troppo vicino a potenza di 2.

Evitare che m sia:- potenza di 2 (usa solo gli ultimi m bit di k);- una potenza di 10 (se i k sono numeri

decimali);- 2p-1 (per stringhe di caratteri in base 2p,

trasposizioni di caratteri ⇒ collisioni).

218/296

Esempio 1/2

n = 2000 elementi previsti

numero di confronti medio pari a 3 nelle ricerche

m = 701: numero primo vicino a 2000/3 ma distante dalle potenze di 2

h(k) = k mod 701

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 109
Page 110: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

110

219/296

Esempio 2/2

Moltiplicazione:data costante 0<A<1h(k) = m ⋅ (k⋅A - k⋅A)k⋅A “rimescola” i bit i km ⋅ (k⋅A - k⋅A) espande l’intervallo [0,1]nell’intervallo [0,m].

Scelta:m potenza di 2 (estrazione di sotto-sequenzadi bit);A = (√5 – 1) / 2 = 0.6180339887.

220/296

Collisione

Definizione: collisione: h(ki)=h(kj) per ki ≠ kj

Le collisioni sono inevitabili, occorre:minimizzarne il numero (buona funzione dihash);gestirle:- linear chaining- open addressing.

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 110
Page 111: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

111

221/296

Linear Chaining 1/2

Più elementi possono risiedere nella stessa locazione della tabella T ⇒ lista concatenata.

Operazioni:inserimento in testa alla listaricerca nella listacancellazione dalla lista.

222/296

Linear Chaining 2/2

•k1

012345678

m-1

T

U

•k3

•k2

•k4

•k5

•k6

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 111
Page 112: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

112

223/296

Linear Chaining 2/2

•k1

012345678

m-1

T

U

•k3

•k2

•k4

•k5

k1

•k6

224/296

Linear Chaining 2/2

•k1

012345678

m-1

T

U

•k3

•k2

•k4

•k5

k1

k2

•k6

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 112
Page 113: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

113

225/296

Linear Chaining 2/2

•k1

012345678

m-1

T

U

•k3

•k2

•k4

•k5

k1

k3

k2

•k6

226/296

Linear Chaining 2/2

•k1

012345678

m-1

T

U

•k3

•k2

•k4

•k5

k1

k4

k3

k2

•k6

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 113
Page 114: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

114

227/296

Linear Chaining 2/2

•k1

012345678

m-1

T

U

•k3

•k2

•k4

•k5

k1

k4

k3

k5 k2

•k6

228/296

Linear Chaining 2/2

•k1

012345678

m-1

T

U

•k3

•k2

•k4

•k5

k6

k4

k3

k5 k2

•k6

k1

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 114
Page 115: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

115

229/296

Complessità 1/2

Ipotesi:Liste non ordinate:

n = numero di elementi memorizzatim = dimensione della tabella di hash.

Hashing semplice uniforme: h(k) ha egual probabilità di generare gli m valori di uscita.

Definizionefattore di carico α=n/m (>, = o < 1)

230/296

Complessità 2/2

Inserimento: T(n) = O(1)

Ricerca: caso peggiore T(n) = Θ(n)caso medio T(n) = O(1+α)

Cancellazione:T(n) = O(1) se disponibile il puntatore ad xe la lista è doppiamente linkata;come la ricerca se disponibile il valore di x,oppure il valore della chiave k, oppure lalista è semplicemente linkata.

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 115
Page 116: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

116

231/296

Ogni cella di T può contenere un soloelemento.

Tutti gli elementi sono memorizzati in T.

Collisione: ricerca di cella non ancora occupata mediante probing:

generazione di una permutazione dellecelle = ordine di ricerca della cella libera.

h(k, i) : U × { 0,1,...,m-1 } → { 0,1,...,m-1 }

Open addressing

α≤1

chiave tentativo (0…m-1)

232/296

Funzioni di probing

Linear probingh(k, i) = (h’(k)+i) mod m

Double hashingh(k, i) = (h1(k)+ i h2(k) ) mod m dove:

h1(k) = k mod mh2(k) = 1 + (k mod m’) m’= m-1 o m-2

Quadratic probingh(k, i) = (h’(k)+ c1i + c2i2) mod m c1 e c2 ≠ 0

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 116
Page 117: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

117

233/296

Operazioni 1/2

Insert:tentativo i=0calcola h(k, i)se libero, inserisci chiave, altrimenti incrementa iripeti fino a i=m

Search:tentativo i=0calcola h(k, i)se trovata chiave, termina con successoincrementa iripeti fino a i=m o cella vuota (insuccesso).

234/296

Operazioni 2/2

Delete:operazione complessa che interrompe le catene di collisione.

L’open addressing è in pratica utilizzato solo quando non si deve mai cancellare.

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 117
Page 118: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

118

235/296

Complessità

Ipotesi:hashing semplice uniformeprobing uniforme.

Tentativi di “probing”:per l’inserimento: 1/(1–α)per la ricerca:

- senza successo: 1/(1–α)- con successo: 1/α ln (1/(1- α)) + 1/ α

236/296

Esempio 1

Inserimento delle chiavi

10, 22, 31, 4, 15, 28, 17, 88, 59

in tabella con m=11 con open addressing.

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 118
Page 119: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

119

237/296

Esempio 1

10, 22, 31, 4, 15, 28, 17, 88, 59

238/296

Esempio 1

10, 22, 31, 4, 15, 28, 17, 88, 59

Linear probingh(k, i) = (k mod 11 + i) mod 11

0123456789

10

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 119
Page 120: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

120

239/296

Esempio 1

10, 22, 31, 4, 15, 28, 17, 88, 59

Linear probingh(k, i) = (k mod 11 + i) mod 11

10

0123456789

10

240/296

Esempio 1

10, 22, 31, 4, 15, 28, 17, 88, 59

Linear probingh(k, i) = (k mod 11 + i) mod 11

22

10

0123456789

10

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 120
Page 121: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

121

241/296

Esempio 1

10, 22, 31, 4, 15, 28, 17, 88, 59

Linear probingh(k, i) = (k mod 11 + i) mod 11

22

1031

0123456789

10

242/296

Esempio 1

10, 22, 31, 4, 15, 28, 17, 88, 59

Linear probingh(k, i) = (k mod 11 + i) mod 11

22

1031

4

0123456789

10

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 121
Page 122: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

122

243/296

Esempio 1

10, 22, 31, 4, 15, 28, 17, 88, 59

Linear probingh(k, i) = (k mod 11 + i) mod 11

22

1031

4

0123456789

10

Collisione:h(15, 0) = 4

244/296

Esempio 1

10, 22, 31, 4, 15, 28, 17, 88, 59

Linear probingh(k, i) = (k mod 11 + i) mod 11

22

1031

154

0123456789

10

Collisione:h(15, 1) = 5

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 122
Page 123: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

123

245/296

Esempio 1

10, 22, 31, 4, 15, 28, 17, 88, 59

Linear probingh(k, i) = (k mod 11 + i) mod 11

22

1031

28154

0123456789

10

246/296

Esempio 1

10, 22, 31, 4, 15, 28, 17, 88, 59

Linear probingh(k, i) = (k mod 11 + i) mod 11

22

1031

28154

0123456789

10

Collisione:h(17, 0) = 6

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 123
Page 124: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

124

247/296

Esempio 1

10, 22, 31, 4, 15, 28, 17, 88, 59

Linear probingh(k, i) = (k mod 11 + i) mod 11

22

1031

1728154

0123456789

10

Collisione:h(17, 1) = 7

248/296

Esempio 1

10, 22, 31, 4, 15, 28, 17, 88, 59

Linear probingh(k, i) = (k mod 11 + i) mod 11

22

1031

1728154

0123456789

10

Collisione:h(88, 0) = 0

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 124
Page 125: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

125

249/296

Esempio 1

10, 22, 31, 4, 15, 28, 17, 88, 59

Linear probingh(k, i) = (k mod 11 + i) mod 11

22

1031

1728154

880123456789

10

Collisione:h(88, 1) = 1

250/296

Esempio 1

10, 22, 31, 4, 15, 28, 17, 88, 59

Linear probingh(k, i) = (k mod 11 + i) mod 11

22

1031

1728154

880123456789

10

Collisione:h(59, 0) = 4

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 125
Page 126: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

126

251/296

Esempio 1

10, 22, 31, 4, 15, 28, 17, 88, 59

Linear probingh(k, i) = (k mod 11 + i) mod 11

22

1031

1728154

880123456789

10

Collisione:h(59, 1) = 5

252/296

Esempio 1

10, 22, 31, 4, 15, 28, 17, 88, 59

Linear probingh(k, i) = (k mod 11 + i) mod 11

22

1031

1728154

880123456789

10

Collisione:h(59, 2) = 6

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 126
Page 127: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

127

253/296

Esempio 1

10, 22, 31, 4, 15, 28, 17, 88, 59

Linear probingh(k, i) = (k mod 11 + i) mod 11

22

1031

1728154

880123456789

10

Collisione:h(59, 3) = 7

254/296

Esempio 1

10, 22, 31, 4, 15, 28, 17, 88, 59

Linear probingh(k, i) = (k mod 11 + i) mod 11

22

1031591728154

880123456789

10

Collisione:h(59, 4) = 8

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 127
Page 128: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

128

255/296

Esempio 1

10, 22, 31, 4, 15, 28, 17, 88, 59

Linear probingh(k, i) = (k mod 11 + i) mod 11

22

1031591728154

88

primaryclustering

0123456789

10

256/296

Esempio 2

10, 22, 31, 4, 15, 28, 17, 88, 59

0123456789

10

Quadratic probingh(k, i) = (k mod 11+i+3i2) mod 11

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 128
Page 129: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

129

257/296

Esempio 2

10, 22, 31, 4, 15, 28, 17, 88, 59

10

0123456789

10

Quadratic probingh(k, i) = (k mod 11+i+3i2) mod 11

258/296

Esempio 2

10, 22, 31, 4, 15, 28, 17, 88, 59

22

10

0123456789

10

Quadratic probingh(k, i) = (k mod 11+i+3i2) mod 11

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 129
Page 130: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

130

259/296

Esempio 2

10, 22, 31, 4, 15, 28, 17, 88, 59

22

1031

0123456789

10

Quadratic probingh(k, i) = (k mod 11+i+3i2) mod 11

260/296

Esempio 2

10, 22, 31, 4, 15, 28, 17, 88, 59

22

1031

4

0123456789

10

Quadratic probingh(k, i) = (k mod 11+i+3i2) mod 11

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 130
Page 131: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

131

261/296

Esempio 2

10, 22, 31, 4, 15, 28, 17, 88, 59

22

1031

4

0123456789

10

Collisione:h(15, 0) = 4

Quadratic probingh(k, i) = (k mod 11+i+3i2) mod 11

262/296

Esempio 2

10, 22, 31, 4, 15, 28, 17, 88, 59

22

103115

4

0123456789

10

Collisione:h(15, 1) = 8

Quadratic probingh(k, i) = (k mod 11+i+3i2) mod 11

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 131
Page 132: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

132

263/296

Esempio 2

10, 22, 31, 4, 15, 28, 17, 88, 59

22

103115

28

4

0123456789

10

Quadratic probingh(k, i) = (k mod 11+i+3i2) mod 11

264/296

Esempio 2

10, 22, 31, 4, 15, 28, 17, 88, 59

22

103115

28

4

0123456789

10

Collisione:h(17, 0) = 6

Quadratic probingh(k, i) = (k mod 11+i+3i2) mod 11

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 132
Page 133: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

133

265/296

Esempio 2

10, 22, 31, 4, 15, 28, 17, 88, 59

22

103115

28

4

0123456789

10

Collisione:h(17, 1) = 10

Quadratic probingh(k, i) = (k mod 11+i+3i2) mod 11

266/296

Esempio 2

10, 22, 31, 4, 15, 28, 17, 88, 59

22

103115

28

4

0123456789

10

Collisione:h(17, 2) = 9

Quadratic probingh(k, i) = (k mod 11+i+3i2) mod 11

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 133
Page 134: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

134

267/296

Esempio 2

10, 22, 31, 4, 15, 28, 17, 88, 59

22

103115

28

4

0123456789

10

Collisione:h(17, 3) = 3

Quadratic probingh(k, i) = (k mod 11+i+3i2) mod 11

17

268/296

Esempio 2

10, 22, 31, 4, 15, 28, 17, 88, 59

22

103115

28

4

0123456789

10

Collisione:h(88, 0) = 0

Quadratic probingh(k, i) = (k mod 11+i+3i2) mod 11

17

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 134
Page 135: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

135

269/296

Esempio 2

10, 22, 31, 4, 15, 28, 17, 88, 59

22

103115

28

4

0123456789

10

Collisione:h(88, 1) = 4

Quadratic probingh(k, i) = (k mod 11+i+3i2) mod 11

17

270/296

Esempio 2

10, 22, 31, 4, 15, 28, 17, 88, 59

22

103115

28

4

0123456789

10

Collisione:h(88, 2) = 3

Quadratic probingh(k, i) = (k mod 11+i+3i2) mod 11

17

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 135
Page 136: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

136

271/296

Esempio 2

10, 22, 31, 4, 15, 28, 17, 88, 59

22

103115

28

4

0123456789

10

Collisione:h(88, 3) = 8

Quadratic probingh(k, i) = (k mod 11+i+3i2) mod 11

17

272/296

Esempio 2

10, 22, 31, 4, 15, 28, 17, 88, 59

22

103115

28

4

0123456789

10

Collisione:h(88, 4) = 8

Quadratic probingh(k, i) = (k mod 11+i+3i2) mod 11

17

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 136
Page 137: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

137

273/296

Esempio 2

10, 22, 31, 4, 15, 28, 17, 88, 59

22

103115

28

4

0123456789

10

Collisione:h(88, 5) = 3

Quadratic probingh(k, i) = (k mod 11+i+3i2) mod 11

17

274/296

Esempio 2

10, 22, 31, 4, 15, 28, 17, 88, 59

22

103115

28

4

0123456789

10

Collisione:h(88, 6) = 4

Quadratic probingh(k, i) = (k mod 11+i+3i2) mod 11

17

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 137
Page 138: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

138

275/296

Esempio 2

10, 22, 31, 4, 15, 28, 17, 88, 59

22

103115

28

4

0123456789

10

Collisione:h(88, 7) = 0

Quadratic probingh(k, i) = (k mod 11+i+3i2) mod 11

17

276/296

Esempio 2

10, 22, 31, 4, 15, 28, 17, 88, 59

22

103115

28

4

0123456789

10

Collisione:h(88, 8) = 2

Quadratic probingh(k, i) = (k mod 11+i+3i2) mod 11

1788

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 138
Page 139: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

139

277/296

Esempio 2

10, 22, 31, 4, 15, 28, 17, 88, 59

22

103115

28

4

0123456789

10

Collisione:h(59, 0) = 4

Quadratic probingh(k, i) = (k mod 11+i+3i2) mod 11

8817

278/296

Esempio 2

10, 22, 31, 4, 15, 28, 17, 88, 59

22

103115

28

4

0123456789

10

Collisione:h(59, 1) = 8

Quadratic probingh(k, i) = (k mod 11+i+3i2) mod 11

8817

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 139
Page 140: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

140

279/296

Esempio 2

10, 22, 31, 4, 15, 28, 17, 88, 59

22

1031155928

4

0123456789

10

Collisione:h(59, 2) = 7

Quadratic probingh(k, i) = (k mod 11+i+3i2) mod 11

8817

280/296

Esempio 3

10, 22, 31, 4, 15, 28, 17, 88, 59

0123456789

10

Double hashingh(k, i) = (k mod 11+i(1+k mod 10)) mod 11

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 140
Page 141: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

141

281/296

Esempio 3

10, 22, 31, 4, 15, 28, 17, 88, 59

10

0123456789

10

Double hashingh(k, i) = (k mod 11+i(1+k mod 10)) mod 11

282/296

Esempio 3

10, 22, 31, 4, 15, 28, 17, 88, 59

22

10

0123456789

10

Double hashingh(k, i) = (k mod 11+i(1+k mod 10)) mod 11

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 141
Page 142: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

142

283/296

Esempio 3

10, 22, 31, 4, 15, 28, 17, 88, 59

22

1031

0123456789

10

Double hashingh(k, i) = (k mod 11+i(1+k mod 10)) mod 11

284/296

Esempio 3

10, 22, 31, 4, 15, 28, 17, 88, 59

22

1031

4

0123456789

10

Double hashingh(k, i) = (k mod 11+i(1+k mod 10)) mod 11

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 142
Page 143: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

143

285/296

Esempio 3

10, 22, 31, 4, 15, 28, 17, 88, 59

22

1031

4

0123456789

10

Collisione:h(15, 0) = 4

Double hashingh(k, i) = (k mod 11+i(1+k mod 10)) mod 11

286/296

Esempio 3

10, 22, 31, 4, 15, 28, 17, 88, 59

22

1031

4

0123456789

10

Collisione:h(15, 1) = 10

Double hashingh(k, i) = (k mod 11+i(1+k mod 10)) mod 11

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 143
Page 144: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

144

287/296

Esempio 3

10, 22, 31, 4, 15, 28, 17, 88, 59

22

1031

4

0123456789

10

Collisione:h(15, 2) = 5

Double hashingh(k, i) = (k mod 11+i(1+k mod 10)) mod 11

15

288/296

Esempio 3

10, 22, 31, 4, 15, 28, 17, 88, 59

22

1031

28

4

0123456789

10

Double hashingh(k, i) = (k mod 11+i(1+k mod 10)) mod 11

15

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 144
Page 145: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

145

289/296

Esempio 3

10, 22, 31, 4, 15, 28, 17, 88, 59

22

1031

28

4

0123456789

10

Collisione:h(17, 0) = 6

Double hashingh(k, i) = (k mod 11+i(1+k mod 10)) mod 11

15

290/296

Esempio 3

10, 22, 31, 4, 15, 28, 17, 88, 59

22

1031

28

4

0123456789

10

Collisione:h(17, 1) = 3

Double hashingh(k, i) = (k mod 11+i(1+k mod 10)) mod 11

17

15

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 145
Page 146: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

146

291/296

Esempio 3

10, 22, 31, 4, 15, 28, 17, 88, 59

22

1031

28

4

0123456789

10

Collisione:h(88, 0) = 0

Double hashingh(k, i) = (k mod 11+i(1+k mod 10)) mod 11

17

15

292/296

Esempio 3

10, 22, 31, 4, 15, 28, 17, 88, 59

22

1031

28

4

0123456789

10

Collisione:h(88, 1) = 9

Double hashingh(k, i) = (k mod 11+i(1+k mod 10)) mod 11

17

15

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 146
Page 147: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

147

293/296

Esempio 3

10, 22, 31, 4, 15, 28, 17, 88, 59

22

1031

8828

4

0123456789

10

Collisione:h(88, 2) = 7

Double hashingh(k, i) = (k mod 11+i(1+k mod 10)) mod 11

17

15

294/296

Esempio 3

10, 22, 31, 4, 15, 28, 17, 88, 59

22

1031

8828

4

0123456789

10

Collisione:h(59, 0) = 4

Double hashingh(k, i) = (k mod 11+i(1+k mod 10)) mod 11

17

15

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 147
Page 148: Algoritmi e Programmazione Avanzata - Politecnico di Torinocorsiadistanza.polito.it/on-line/Algoritmi_programmazione_Teoria/... · Questa lezione si occupa di strutture dati: tipi

148

295/296

Esempio 3

10, 22, 31, 4, 15, 28, 17, 88, 59

22

1031

8828

4

0123456789

10

Collisione:h(59, 1) = 3

Double hashingh(k, i) = (k mod 11+i(1+k mod 10)) mod 11

17

15

296/296

Esempio 3

10, 22, 31, 4, 15, 28, 17, 88, 59

22

1031

8828

4

59

0123456789

10

Collisione:h(59, 2) = 2

Double hashingh(k, i) = (k mod 11+i(1+k mod 10)) mod 11

17

15

ovcin
Algoritmi e Programmazione Avanzata Strutture dati
ovcin
© 2003 Politecnico di Torino 148