Che cosa c è nella lezione. Questa lezione si occupa di strutture dati:

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Che cosa c è nella lezione. Questa lezione si occupa di strutture dati:"

Transcript

1 Algoritmi e Programmazione Avanzata - teoria / 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. /

2 Algoritmi e Programmazione Avanzata - teoria / Definizione Tipo di Dato Astratto: Modello matematico sul quale è definito un insieme di operazioni. /

3 Modello: insieme di elementi generici Operazioni: unione (X,Y) inters (X,Y) diff (X,Y) Modello: intervallo di interi Operazioni: + - * : / Estensione dei tipi primitivi 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. /

4 Estensione Operatori: predefiniti, operazioni elementari sui tipi primitivi. Procedure come estensione degli operatori: nuove operazioni sui tipi primitivi nuove operazioni su nuovi tipi Tipi di Dato Astratto: associazione nuovo tipo nuovo insieme di operazioni. / Implementazione Definizione del Tipo di Dato Astratto indipendente da: linguaggio di programmazione scelta implementativa (struttura dati) /

5 Implementazione in C 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. / 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 *); /

6 Algoritmi e Programmazione Avanzata - teoria / Definizione Tipo di dato astratto con politica LIFO (Last In First Out) con operazioni: Push: inserisce nuovo elemento nella pila Pop: estrae dalla pila l ultimo elemento inserito Empty: vero se pila vuota Init: crea nuova pila /

7 Init() / Push (K) K /

8 Push (K) K K / K Push (K) K K /

9 Pop K K K / Pop K K /

10 Implementazione tramite vettore Vettore buff di N elementi Variabile top: indice dell ultimo elemento inserito Complessità delle operazioni T(n) = O() / Implementazione C / #define N int buff[n]; int top; void push(int val); int pop(void); int empty(void); void push(int val) { buff[++top] = val; return; } /

11 Implementazione C / int pop(void) { return(buff[top--]); } int empty(void) { if(top == ) return (); else return (); } / Algoritmi e Programmazione Avanzata - teoria /

12 Definizione Tipo di dato astratto con politica FIFO (First In First Out) con operazioni: Enqueue: inserisce un nuovo elemento nella coda Dequeue: estrae dalla coda il primo elemento inserito Empty: vero se coda vuota Init: crea nuova coda. / Dequeue Enqueue Init() /

13 Dequeue Enqueue Enqueue(K) K / Dequeue Enqueue Enqueue(K) K K /

14 Dequeue Enqueue Enqueue(K) K K K / Dequeue Enqueue Dequeue K K K /

15 Dequeue Enqueue Dequeue K K / Implementazione tramite vettore Vettore buffer di N+ elementi per code di N elementi Variabili: head: indice del primo elemento inserito tail: indice del primo elemento disponibile per l inserimento Vettore come buffer circolare Complessità delle operazioni T(n) = O() /

16 Buffer circolare Dequeue: incrementa head modulo N+ Enqueue: incrementa tail modulo N+ Inizialmente head =, tail = Coda piena (overflow): head = (tail + ) modulo N+ Coda vuota (underflow): head = tail / Coda con max elementi (N=) Coda vuota head tail /

17 Coda con max elementi (N=) Enqueue(A) head tail / Coda con max elementi (N=) A Enqueue(A) head tail /

18 Coda con max elementi (N=) A Enqueue(B) head tail / Coda con max elementi (N=) A B Enqueue(B) head tail /

19 Coda con max elementi (N=) A B Enqueue(C) head tail / Coda con max elementi (N=) A B C Enqueue(C) head tail /

20 Coda con max elementi (N=) A B C Enqueue(D) head tail / Coda con max elementi (N=) A B C D Enqueue(D) head tail /

21 Coda con max elementi (N=) A B C D Dequeue head tail / Coda con max elementi (N=) Dequeue A B C D head tail /

22 Coda con max elementi (N=) B C D Enqueue(E) head tail / Coda con max elementi (N=) B C D E Enqueue(E) head tail /

23 Coda con max elementi (N=) B C D E Enqueue(F) head tail / Coda con max elementi (N=) B C D E F Enqueue(F) tail head Coda piena /

24 Coda con max elementi (N=) B C D E F Dequeue tail head / Coda con max elementi (N=) B C D E F Dequeue tail head /

25 Coda con max elementi (N=) C D E F Enqueue(G) tail head / Coda con max elementi (N=) G C D E F Enqueue(G) head tail Coda piena /

26 Coda con max elementi (N=) G C D E F Dequeue head tail / Coda con max elementi (N=) C G D E F Dequeue tail head /

27 Coda con max elementi (N=) D G E F Dequeue tail head / Coda con max elementi (N=) E G F Dequeue tail head /

28 Coda con max elementi (N=) F G Dequeue head tail / Coda con max elementi (N=) G Dequeue head tail Coda vuota /

29 Implementazione in C #define DIM int buffer[dim+]; int tail=, head=; int enqueue(int elem); int dequeue(void); int empty(void); / Implementazione in C int enqueue(int elem) { if((tail+)==head (tail==dim && head==)) return(-); buffer[tail++] = elem; if(tail == (DIM+)) tail = ; return(); } /

30 Implementazione in C int dequeue(void) { int ret; if(head == tail) return(-); ret = buffer[head++]; if(head == (DIM+)) head = ; return(ret); } / Implementazione in C int empty(void) { if(head == tail) return(); else return(); } /

31 Algoritmi e Programmazione Avanzata - teoria / Definizione Struttura dati lineare: elementi allocati/deallocatiseparatamente elementi concatenati (e quindi accessibili) attraverso puntatori variabile head: accesso al primo elemento operazioni: - insert (in testa di linea non ordinata o in lista ordinata) - search - delete /

32 Definizione Vantaggi/svantaggi: memoria corrispondente agli elementi effettivamente utilizzata accesso mediante scansione Classificazione: liste ordinate / non ordinate / Definizione 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. /

33 Lista concatenata semplice key next head(l) NIL Lista concatenata doppia previous key next head(l) NIL NIL / Inserimento in testa (lista non ordinata) head(l) Z P NIL /

34 Inserimento in testa (lista non ordinata) insert(l, x) x A NIL head(l) Z P NIL / Inserimento in testa (lista non ordinata) head(l) A next(x) = head(l) head(l) = x Z P NIL /

35 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( ); / Implementazione C struct e *newe ( ) /

36 Implementazione C struct e *newe ( ) Allocazione di un nuovo nodo / 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); /

37 Implementazione C struct e *insert (struct e *ptop,int val) / Implementazione C Inserimento in testa struct e *insert (struct e *ptop,int val) /

38 Implementazione C struct e *insert (struct e *ptop,int val) { struct e *pnew; pnew = newe (); pnew->key = val; pnew->next = ptop; / 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) /

39 Implementazione C struct e *insert (struct e *ptop,int val) { struct e *pnew; pnew = newe (); pnew->key = val; pnew->next = ptop; ptop = pnew; / 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 /

40 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); / Ricerca Scansione della lista a partire da head Confronto chiave cercata / chiave corrente Terminazione: trovata la chiave cercata fine lista /

41 Implementazione C struct e *search (struct e *ptop,int *val,int *status) / Implementazione C struct e *search (struct e *ptop,int *val,int *status) ricerca /

42 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; } } / Implementazione C if (*status==success) { fprintf (stdout,"trovato %d\n",ptmp->key); } else { fprintf (stdout,"non Trovato \n"); } } return (ptop); /

43 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) / Cancellazione head(l) NIL P A Z NIL /

44 Cancellazione delete(l, x) x head(l) NIL P A Z NIL / Cancellazione head(l) NIL P A Z NIL prev[next[x]] = prev[x] next[prev[x]] = next[x] /

45 Complessità Inserzione in testa di lista non ordinata: T(n) = O() Ricerca: T(n) = O(n) Cancellazione (dato il puntatore all elemento da cancellare): T(n) = O() / Algoritmi e Programmazione Avanzata - teoria /

46 Definizione / Tipo di dato astratto con operazioni: search minimum maximum predecessor successor insert delete Implementano dizionari e code prioritarie. / Definizione / Proprietà: nodo x vale che: nodo y Left(x), key[y] key[x] nodo y Right(x), key[y] key[x] x Left(x) Right(x) /

47 Esempi / 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) = Q(n) Attraversamento in-ordine: ordinamento crescente delle chiavi. /

48 / Visita in pre-ordine /

49 Visita in pre-ordine / Visita in pre-ordine /

50 Visita in pre-ordine / Visita in pre-ordine /

51 Visita in pre-ordine / Visita in pre-ordine /

52 Visita in pre-ordine / Visita in pre-ordine /

53 Visita in pre-ordine / Visita in pre-ordine /

54 Visita in-ordine / Visita in-ordine /

55 Visita in-ordine / Visita in-ordine /

56 Visita in-ordine / Visita in-ordine /

57 Visita in-ordine / Visita in-ordine /

58 Visita in-ordine / Visita in-ordine /

59 Visita in-ordine / Visita in-ordine /

60 Visita in post-ordine / Visita in post-ordine /

61 Visita in post-ordine / Visita in post-ordine /

62 Visita in post-ordine / Visita in post-ordine /

63 Visita in post-ordine / Visita in post-ordine /

64 Visita in post-ordine / Visita in post-ordine /

65 Visita in post-ordine / Visita in post-ordine /

66 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]. / k = /

67 k = / k = /

68 k = < / k = < /

69 k = / k = /

70 k = / k = > /

71 k = > / k = /

72 k = / k = /

73 k = > / k = > /

74 k = / k = /

75 k = = / k = = Trovato! /

76 Min e max Min: seguire il puntatore al sottoalbero sinistro finchè esiste. Max: seguire il puntatore al sottoalbero destro finchè esiste. / /

77 / /

78 min = / min = /

79 min = max = / 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 il cui figlio sinistro è anche un antenato di x. p[x] x x p[x] /

80 / x /

81 x / x /

82 x succ(x) / /

83 x / x /

84 succ(x) x / 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. /

85 / x /

86 x / x /

87 x pred(x) / /

88 x / x /

89 pred(x) x / 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. /

90 z T insert(t,z) / z T insert(t,z) /

91 z T insert(t,z) / z T insert(t,z) /

92 z T insert(t,z) / z T insert(t,z) /

93 T / Delete Cancellazione da un albero binario di ricerca di un nodo z mantenimento della proprietà mantenimento della struttura ad albero binario. Tre casi:. nodo z foglia. nodo z con solo figlio. nodo z con figli. /

94 Caso : foglia z / Caso : foglia delete(z): rimozione immediata. z /

95 Caso : foglia / Caso : figlio delete(z): z /

96 Caso : figlio delete(z): z x / Caso : figlio delete(z): il figlio x di z diventa figlio delpadre p di z. p z x /

97 Caso : figlio / z delete(z): Caso : figli /

98 z Caso : figli delete(z): si cancella y = succ(z) y / z Caso : figli delete(z): si cancella y = succ(z) si copia y su z y /

99 z Caso : figli delete(z): si cancella y = succ(z) si copia y su z y Nota: y può essere pred(z) / Caso : figli /

100 Complessità Le operazioni hanno complessità T(n) = O(h): albero con n nodi completamente bilanciato - altezza h = log n albero con n nodi completamente sbilanciato - altezza h = n O(log n) T(n) O(n) / /

101 Dizionario Tipo di dato astratto Modello: insieme finito di simboli. Operazioni: search insert delete.? corrispondenza biunivoca insieme finito di simboli e intervallo di interi. / Applicazioni Tabella dei simboli di un compilatore Chiave = nome di un identificatore Dati aggiuntivi = tipo, contesto, dichiarazione. Cache di file o URL Chiave = path Dati aggiuntivi = attributi e contenuto. /

102 Tabelle ad accesso diretto / Chiave k U = {,,, m-} Tutte le chiavi sono distinte. Vettore T[,,, m-]: se k, T[k] punta a k, altrimenti T[k] = NIL. Memorizzazione di un insieme K di K chiavi. / Tabelle ad accesso diretto / U (universo delle chiavi) T m- K (chiavi usate) dati associati chiave k x /

103 Operazioni Search(T, k) return(t[k]) Insert(T, x) T[key[x]] = x Delete(T, x) T[key[x]] = NIL / Vantaggi/svantaggi Complessità delle operazioni: T(n) = O() Occupazione di memoria S(n) = O( U ) = O(m) applicabile per m piccolo spreco di memoria per K << m. /

104 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(). / Funzione di hash / 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 fi {,,..., m- } Elemento x viene memorizzato nella locazione T[h(key[x])] /

105 Funzione di hash / U k k k k k m- T / Funzione di hash / U k k k k k m- T h(k ) /

106 Funzione di hash / U k k k k k m- T h(k ) h(k ) / Funzione di hash / U k k k k k m- T h(k ) h(k ) h(k ) /

107 Funzione di hash / U k k k k k m- T h(k ) h(k ) h(k ) h(k ) / Funzione di hash / U k k k k k m- T h(k ) h(k ) h(k )=h(k ) Collisione h(k ) /

108 Progetto della funzione di hash / Funzione ideale hashing uniforme semplice: se le chiavi k sono equiprobabili, allora i valori di h(k) devono essere equiprobabili. k: h( k) = j P( k) =, j =,, K, m m / Progetto della funzione di hash / 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 * + b * + c. /

109 Metodi Divisione: h(k) = k mod m m: primo non troppo vicino a potenza di. Evitare che m sia: - potenza di (usa solo gli ultimi m bit di k); - una potenza di (se i k sono numeri decimali); - p - (per stringhe di caratteri in base p, trasposizioni di caratteri collisioni). / / n = elementi previsti numero di confronti medio pari a nelle ricerche m = : numero primo vicino a / ma distante dalle potenze di h(k) = k mod /

110 / Moltiplicazione: data costante <A< h(k) = m (k A - k A ) k A rimescola i bit i k m (k A - k A ) espande l intervallo [,] nell intervallo [,m]. Scelta: m potenza di (estrazione di sotto-sequenza di bit); A = ( ) / =.. / Collisione Definizione: collisione: h(k i )=h(k j ) per k i k j Le collisioni sono inevitabili, occorre: minimizzarne il numero (buona funzione di hash); gestirle: - linear chaining - open addressing. /

111 Linear Chaining / Più elementi possono risiedere nella stessa locazione della tabella T lista concatenata. Operazioni: inserimento in testa alla lista ricerca nella lista cancellazione dalla lista. / Linear Chaining / U k k k k k k m- T /

112 Linear Chaining / U k k k k k k m- T k / Linear Chaining / U k k k k k k m- T k k /

113 Linear Chaining / U k k k k k k m- T k k k / Linear Chaining / U k k k k k k m- T k k k k /

114 Linear Chaining / U k k k k k k m- T k k k k k / Linear Chaining / U k k k k k k m- T k k k k k k /

115 Complessità / Ipotesi: Liste non ordinate: n = numero di elementi memorizzati m = dimensione della tabella di hash. Hashing semplice uniforme: h(k) ha egual probabilità di generare gli m valori di uscita. Definizione fattore di carico a=n/m (>, = o < ) / Complessità / Inserimento: T(n) = O() Ricerca: caso peggiore T(n) = Q(n) caso medio T(n) = O(+a) Cancellazione: T(n) = O() se disponibile il puntatore ad x e la lista è doppiamente linkata; come la ricerca se disponibile il valore di x, oppure il valore della chiave k, oppure la lista è semplicemente linkata. /

116 Open addressing Ogni cella di T può contenere un solo elemento. Tutti gli elementi sono memorizzati in T. Collisione: ricerca di cella non ancora occupata mediante probing: generazione di una permutazione delle celle = ordine di ricerca della cella libera. a h(k, i) : U {,,...,m- } fi {,,...,m- } chiave tentativo ( m-) / Funzioni di probing Linear probing h(k, i) = (h (k)+i) mod m Quadratic probing h(k, i) = (h (k)+ c i + c i ) mod m c e c Double hashing h(k, i) = (h (k)+ i h (k) ) mod m dove: h (k) = k mod m h (k) = + (k mod m ) m = m- o m- /

117 Operazioni / Insert: tentativo i= calcola h(k, i) se libero, inserisci chiave, altrimenti incrementa i ripeti fino a i=m Search: tentativo i= calcola h(k, i) se trovata chiave, termina con successo incrementa i ripeti fino a i=m o cella vuota (insuccesso). / Operazioni / Delete: operazione complessa che interrompe le catene di collisione. L open addressing è in pratica utilizzato solo quando non si deve mai cancellare. /

118 Complessità Ipotesi: hashing semplice uniforme probing uniforme. Tentativi di probing : per l inserimento: /( a) per la ricerca: - senza successo: /( a) - con successo: /a ln (/(- a)) + / a / Inserimento delle chiavi,,,,,,,, in tabella con m= con open addressing. /

119 ,,,,,,,, /,,,,,,,, Linear probing h(k, i) = (k mod + i) mod /

120 ,,,,,,,, Linear probing h(k, i) = (k mod + i) mod /,,,,,,,, Linear probing h(k, i) = (k mod + i) mod /

121 ,,,,,,,, Linear probing h(k, i) = (k mod + i) mod /,,,,,,,, Linear probing h(k, i) = (k mod + i) mod /

122 ,,,,,,,, Linear probing h(k, i) = (k mod + i) mod Collisione: h(, ) = /,,,,,,,, Linear probing h(k, i) = (k mod + i) mod Collisione: h(, ) = /

123 ,,,,,,,, Linear probing h(k, i) = (k mod + i) mod /,,,,,,,, Linear probing h(k, i) = (k mod + i) mod Collisione: h(, ) = /

124 ,,,,,,,, Linear probing h(k, i) = (k mod + i) mod Collisione: h(, ) = /,,,,,,,, Linear probing h(k, i) = (k mod + i) mod Collisione: h(, ) = /

125 ,,,,,,,, Linear probing h(k, i) = (k mod + i) mod Collisione: h(, ) = /,,,,,,,, Linear probing h(k, i) = (k mod + i) mod Collisione: h(, ) = /

126 ,,,,,,,, Linear probing h(k, i) = (k mod + i) mod Collisione: h(, ) = /,,,,,,,, Linear probing h(k, i) = (k mod + i) mod Collisione: h(, ) = /

127 ,,,,,,,, Linear probing h(k, i) = (k mod + i) mod Collisione: h(, ) = /,,,,,,,, Linear probing h(k, i) = (k mod + i) mod Collisione: h(, ) = /

128 ,,,,,,,, Linear probing h(k, i) = (k mod + i) mod primary clustering /,,,,,,,, Quadratic probing h(k, i) = (k mod +i+i ) mod /

129 ,,,,,,,, Quadratic probing h(k, i) = (k mod +i+i ) mod /,,,,,,,, Quadratic probing h(k, i) = (k mod +i+i ) mod /

130 ,,,,,,,, Quadratic probing h(k, i) = (k mod +i+i ) mod /,,,,,,,, Quadratic probing h(k, i) = (k mod +i+i ) mod /

131 ,,,,,,,, Quadratic probing h(k, i) = (k mod +i+i ) mod Collisione: h(, ) = /,,,,,,,, Quadratic probing h(k, i) = (k mod +i+i ) mod Collisione: h(, ) = /

132 ,,,,,,,, Quadratic probing h(k, i) = (k mod +i+i ) mod /,,,,,,,, Quadratic probing h(k, i) = (k mod +i+i ) mod Collisione: h(, ) = /

133 ,,,,,,,, Quadratic probing h(k, i) = (k mod +i+i ) mod Collisione: h(, ) = /,,,,,,,, Quadratic probing h(k, i) = (k mod +i+i ) mod Collisione: h(, ) = /

134 ,,,,,,,, Quadratic probing h(k, i) = (k mod +i+i ) mod Collisione: h(, ) = /,,,,,,,, Quadratic probing h(k, i) = (k mod +i+i ) mod Collisione: h(, ) = /

135 ,,,,,,,, Quadratic probing h(k, i) = (k mod +i+i ) mod Collisione: h(, ) = /,,,,,,,, Quadratic probing h(k, i) = (k mod +i+i ) mod Collisione: h(, ) = /

136 ,,,,,,,, Quadratic probing h(k, i) = (k mod +i+i ) mod Collisione: h(, ) = /,,,,,,,, Quadratic probing h(k, i) = (k mod +i+i ) mod Collisione: h(, ) = /

137 ,,,,,,,, Quadratic probing h(k, i) = (k mod +i+i ) mod Collisione: h(, ) = /,,,,,,,, Quadratic probing h(k, i) = (k mod +i+i ) mod Collisione: h(, ) = /

138 ,,,,,,,, Quadratic probing h(k, i) = (k mod +i+i ) mod Collisione: h(, ) = /,,,,,,,, Quadratic probing h(k, i) = (k mod +i+i ) mod Collisione: h(, ) = /

139 ,,,,,,,, Quadratic probing h(k, i) = (k mod +i+i ) mod Collisione: h(, ) = /,,,,,,,, Quadratic probing h(k, i) = (k mod +i+i ) mod Collisione: h(, ) = /

140 ,,,,,,,, Quadratic probing h(k, i) = (k mod +i+i ) mod Collisione: h(, ) = /,,,,,,,, Double hashing h(k, i) = (k mod +i(+k mod )) mod /

141 ,,,,,,,, Double hashing h(k, i) = (k mod +i(+k mod )) mod /,,,,,,,, Double hashing h(k, i) = (k mod +i(+k mod )) mod /

142 ,,,,,,,, Double hashing h(k, i) = (k mod +i(+k mod )) mod /,,,,,,,, Double hashing h(k, i) = (k mod +i(+k mod )) mod /

143 ,,,,,,,, Double hashing h(k, i) = (k mod +i(+k mod )) mod Collisione: h(, ) = /,,,,,,,, Double hashing h(k, i) = (k mod +i(+k mod )) mod Collisione: h(, ) = /

144 ,,,,,,,, Double hashing h(k, i) = (k mod +i(+k mod )) mod Collisione: h(, ) = /,,,,,,,, Double hashing h(k, i) = (k mod +i(+k mod )) mod /

145 ,,,,,,,, Double hashing h(k, i) = (k mod +i(+k mod )) mod Collisione: h(, ) = /,,,,,,,, Double hashing h(k, i) = (k mod +i(+k mod )) mod Collisione: h(, ) = /

146 ,,,,,,,, Double hashing h(k, i) = (k mod +i(+k mod )) mod Collisione: h(, ) = /,,,,,,,, Double hashing h(k, i) = (k mod +i(+k mod )) mod Collisione: h(, ) = /

147 ,,,,,,,, Double hashing h(k, i) = (k mod +i(+k mod )) mod Collisione: h(, ) = /,,,,,,,, Double hashing h(k, i) = (k mod +i(+k mod )) mod Collisione: h(, ) = /

148 ,,,,,,,, Double hashing h(k, i) = (k mod +i(+k mod )) mod Collisione: h(, ) = /,,,,,,,, Double hashing h(k, i) = (k mod +i(+k mod )) mod Collisione: h(, ) = /

Gianpiero Cabodi e Paolo Camurati Dip. Automatica e Informatica Politecnico di Torino

Gianpiero Cabodi e Paolo Camurati Dip. Automatica e Informatica Politecnico di Torino Le tabelle di hash Gianpiero Cabodi e Paolo Camurati Dip. Automatica e Informatica Politecnico di Torino Tabelle di hash Finora gli algoritmi di ricerca si erano basati sul confronto. Eccezione: tabelle

Dettagli

Algoritmi e Programmazione Avanzata. Pile e code. Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino

Algoritmi e Programmazione Avanzata. Pile e code. Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino Sommario ADT Pile Code. A.A. 2001/2002 APA - 2 1 Sommario ADT Pile Code. A.A. 2001/2002 APA - 3 ADT Le regole che

Dettagli

Pile e code. Sommario. Algoritmi e Programmazione Avanzata. Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino

Pile e code. Sommario. Algoritmi e Programmazione Avanzata. Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino Pile e code Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino Sommario ADT Pile Code. A.A. 2002/2003 APA - Pile e code 2 Politecnico di Torino Pagina 1 di 23 Sommario

Dettagli

alberi binari di ricerca (BST)

alberi binari di ricerca (BST) Le tabelle di simboli e gli alberi binari di ricerca (BT) ianpiero abodi e Paolo amurati Dip. utomatica e Informatica Politecnico di Torino Tabelle di simboli Definizione: una tabella di simboli è una

Dettagli

Strutture dati elementari. Vittorio Maniezzo - Università di Bologna

Strutture dati elementari. Vittorio Maniezzo - Università di Bologna Strutture dati elementari 1 Vittorio Maniezzo - Università di Bologna Pile (Stacks) Dati: un insieme S di elementi. Operazioni: PUSH, POP PUSH: inserisce un elemento in S POP: restituisce l ultimo elemento

Dettagli

TABELLE AD INDIRIZZAMENTO DIRETTO

TABELLE AD INDIRIZZAMENTO DIRETTO Tabelle Servono per implementare dizioniari in modo efficiente. dizionari insiemi di coppie (chiave, valore). Esempio: in un compilatore di un linguaggio di programmazione viene creata una tabella dei

Dettagli

Strutture dati elementari

Strutture dati elementari Strutture dati elementari 1 Vittorio Maniezzo - Università di Bologna Pile (Stacks) Dati: un insieme S di elementi. Operazioni: PUSH, POP PUSH: inserisceun elementoin S POP: restituiscel ultimoelementoinseritoe

Dettagli

In questa lezione Strutture dati elementari: Pila Coda Loro uso nella costruzione di algoritmi.

In questa lezione Strutture dati elementari: Pila Coda Loro uso nella costruzione di algoritmi. In questa lezione Strutture dati elementari: Pila Coda Loro uso nella costruzione di algoritmi. 1 strutture dati (astratte) Una struttura dati astratti consiste di uno o più insiemi con delle operazioni

Dettagli

Alberi binari di ricerca

Alberi binari di ricerca Alberi binari di ricerca Ilaria Castelli castelli@dii.unisi.it Università degli Studi di Siena Dipartimento di Ingegneria dell Informazione A.A. 2009/20010 I. Castelli Alberi binari di ricerca, A.A. 2009/20010

Dettagli

05EIP. Fulvio Corno, Matteo Sonza Reorda Dip. Automatica e Informatica Politecnico di Torino

05EIP. Fulvio Corno, Matteo Sonza Reorda Dip. Automatica e Informatica Politecnico di Torino Tabelle di Hash Fulvio Corno, Matteo Sonza Reorda Dip. Automatica e Informatica Politecnico di Torino ADT Dizionario In molte applicazioni è necessario un ADT Dizionario che supporti le seguenti operazioni:

Dettagli

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati Maria Rita Di Berardini, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino A.A. 2006/07 Il concetto di dato Il concetto di tipo di dato Insertion Sort for j 2 to lenght[a]

Dettagli

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati Maria Rita Di Berardini 2, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino 2 Polo di Scienze Università di Camerino ad Ascoli Piceno Il concetto di dato Il concetto

Dettagli

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati Strutture Elementari Maria Rita Di Berardini, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino 29 ottobre 2008 Strutture Dati Astratte Il concetto di dato Il concetto

Dettagli

Insiemi Dinamici. Operazioni tipiche (S:struttura, x: riferimento(puntatore) alla chiave, k: chiave)

Insiemi Dinamici. Operazioni tipiche (S:struttura, x: riferimento(puntatore) alla chiave, k: chiave) Insiemi Dinamici Insiemi che possono essere modificati Elementi: oggetti = eventualmente: chiavi + (eventuali) dati satellite; l insieme delle chiavi puo essere totalmente ordinato Operazioni tipiche (S:struttura,

Dettagli

Struttura di dati che può essere usata sia come dizionario, sia come coda con priorità

Struttura di dati che può essere usata sia come dizionario, sia come coda con priorità Albero binario di ricerca Struttura di dati che può essere usata sia come dizionario, sia come coda con priorità Proprietà: sia x un nodo di un (sotto)albero binario di ricerca Se y è un nodo del sottoalbero

Dettagli

Algoritmi e Strutture di Dati I 1. Algoritmi e Strutture di Dati I Massimo Franceschet francesc

Algoritmi e Strutture di Dati I 1. Algoritmi e Strutture di Dati I Massimo Franceschet  francesc Algoritmi e Strutture di Dati I 1 Algoritmi e Strutture di Dati I Massimo Franceschet http://www.sci.unich.it/ francesc Algoritmi e Strutture di Dati I 2 Oggetti e puntatori Un oggetto è un area di memoria

Dettagli

Tipi di dato e Strutture dati elementari

Tipi di dato e Strutture dati elementari Tipi di dato e Strutture dati elementari Ing. Paolo Craca Anno accademico 2007/2008 Tipi di dato e Strutture dati elementari 1 / 40 Cosa vedremo in questo seminario 1 Introduzione 2 Pile 3 Code 4 5 Bibliografia

Dettagli

Introduzione. Liste. Strutture ricorsive (2) Strutture ricorsive (1) DD p KP p

Introduzione. Liste. Strutture ricorsive (2) Strutture ricorsive (1) DD p KP p Introduzione Liste DD p. 449-474 KP p.397-424 Abbiamo fin ora studiato strutture dati con dimensione fissa: vettori e matrici strutture Introduciamo ora le strutture dati dinamiche (liste concatenate):

Dettagli

La struttura dati CODA

La struttura dati CODA Programmazione M-Z Ingegneria e Scienze Informatiche - Cesena A.A. 2016-2017 La struttura dati CODA Pietro Di Lena - pietro.dilena@unibo.it Introduzione Una coda (o queue) è una struttura dati astratta

Dettagli

Esercitazione 6. Alberi binari di ricerca

Esercitazione 6. Alberi binari di ricerca Esercitazione 6 Alberi binari di ricerca Struttura base Rappresentabile attraverso una struttura dati concatenata in cui ogni nodo è un oggetto di tipo struttura Ogni nodo contiene: campo chiave (key)

Dettagli

Esercitazione: Implementazione in linguaggio C dell ADT. Stack con l utilizzo. di linked list

Esercitazione: Implementazione in linguaggio C dell ADT. Stack con l utilizzo. di linked list Esercitazione: Implementazione in linguaggio C dell ADT Stack con l utilizzo di linked list Laboratorio di Programmazione Introduzione un ADT (Abstract Data Type) è un modello (formale) che generalizza

Dettagli

Heap scenario. Ho un insieme dinamico di oggetti, ciascuno identificato con una priorità. (la priorità è semplicemente un numero);

Heap scenario. Ho un insieme dinamico di oggetti, ciascuno identificato con una priorità. (la priorità è semplicemente un numero); Heap Heap scenario Ho un insieme dinamico di oggetti, ciascuno identificato con una priorità. (la priorità è semplicemente un numero); Voglio poter: inserire: nuovi elementi, ciascuno con una data priorità

Dettagli

Sommario. Le strutture dati elementari per implementare sequenze: Vettori Liste

Sommario. Le strutture dati elementari per implementare sequenze: Vettori Liste Sequenze Sommario Le strutture dati elementari per implementare sequenze: Vettori Liste Strutture dati elementari Le strutture dati vettore e lista sono fra le strutture dati più usate e semplici Il loro

Dettagli

Strutture Dati. Parte I: pile, code, liste, tabelle hash

Strutture Dati. Parte I: pile, code, liste, tabelle hash Strutture Dati Parte I: pile, code, liste, tabelle hash Scopo delle strutture dati Le strutture dati sono usate per contenere oggetti Rappresentano collezioni di oggetti Spesso (ma non sempre) gli oggetti

Dettagli

Algoritmi e Strutture di Dati

Algoritmi e Strutture di Dati Algoritmi e Strutture di Dati Capitolo 4 - Strutture di dati elementari This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike License. To view a copy of this license, visit

Dettagli

Laboratorio di Programmazione

Laboratorio di Programmazione Laboratorio di Programmazione (Laurea triennale in matematica) Lezione 25 ADT (Abstract Data Types) tipo di dato astratto Un ADT è un modello matematico con una collezione di operatori definiti su tale

Dettagli

Alberi di ricerca binari

Alberi di ricerca binari Fulvio Corno, Matteo Sonza Reorda Dip. Automatica e Informatica Politecnico di Torino Introduzione Gli alberi di ricerca binari (Binary Search Tree, o BST) sono una struttura di dati che supporta in modo

Dettagli

Fondamenti di Informatica e Laboratorio T-AB T-15 Strutture dati

Fondamenti di Informatica e Laboratorio T-AB T-15 Strutture dati Fondamenti di Informatica e Laboratorio T-AB T-15 Strutture dati Paolo Torroni Dipartimento di Elettronica, Informatica e Sistemistica Università degli Studi di Bologna Anno Accademico 2008/2009 Sommario

Dettagli

Dizionario. Marina Zanella Algoritmi e strutture dati Tabelle hash 1

Dizionario. Marina Zanella Algoritmi e strutture dati Tabelle hash 1 Dizionario Insieme dinamico che offre solo le seguenti operazioni: inserimento di un elemento dato cancellazione di un elemento dato ricerca di un elemento dato (verifica dell appartenenza di un elemento

Dettagli

Questa soluzione va contemplata quando le lunghezze stimate dalle liste usate sono significativamente maggiori delle dimensioni di un elemento.

Questa soluzione va contemplata quando le lunghezze stimate dalle liste usate sono significativamente maggiori delle dimensioni di un elemento. Un ulteriore semplificazione si ottiene utilizzando un elemento sentinella (dummy) che non contiene informazione, ma serve a segnalare la fine (e l inizio) di una lista. Questa soluzione va contemplata

Dettagli

Alberi binari e alberi binari di ricerca

Alberi binari e alberi binari di ricerca Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica Alberi Un albero è una collezione non vuota di: nodi con nome e informazioni

Dettagli

Fondamenti di Informatica II

Fondamenti di Informatica II Università degli studi di Messina Facoltà di Ingegneria Corso di Laurea in Ingegneria Informatica e delle Telecomunicazioni Fondamenti di Informatica II Tipi di dati astratti(adt)- seconda parte Coda Struttura

Dettagli

Strutture Dati. (parte I: pile, code, liste, tabelle hash)

Strutture Dati. (parte I: pile, code, liste, tabelle hash) Strutture Dati (parte I: pile, code, liste, tabelle hash) 1 Scopo delle strutture dati Le strutture dati sono aggeggi usati per contenere oggetti rappresentano collezioni di oggetti spesso (ma non sempre)

Dettagli

Alberi binari e alberi binari di ricerca

Alberi binari e alberi binari di ricerca Alberi binari e alberi binari di ricerca Violetta Lonati Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica

Dettagli

Laboratorio di Programmazione

Laboratorio di Programmazione Laboratorio di Programmazione (Laurea triennale in matematica) Lezione 25 Le liste in C struct nodo { int info; struct nodo *next; }; typedef struct nodo Nodo; typedef Nodo *PNodo; Inserimento in ordine

Dettagli

Alberi binari e alberi binari di ricerca

Alberi binari e alberi binari di ricerca Alberi binari e alberi binari di ricerca Violetta Lonati Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica giovedì 9

Dettagli

LE STRUTTURE DATI DINAMICHE: GLI ALBERI. Cosimo Laneve

LE STRUTTURE DATI DINAMICHE: GLI ALBERI. Cosimo Laneve LE STRUTTURE DATI DINAMICHE: GLI ALBERI Cosimo Laneve 1 argomenti 1. definizione di alberi e nozioni relative 2. implementazione degli alberi, creazione, visita 3. algoritmo di visita iterativa e sua implementazione

Dettagli

Liste concatenate. Violetta Lonati

Liste concatenate. Violetta Lonati Liste concatenate Violetta Lonati Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica 2 novembre 2017 Violetta Lonati Liste

Dettagli

Tabelle Hash! Presentare le tabelle hash e la nozione di funzione di hashing Discutere la complessità di questa realizzazione per le Tavole

Tabelle Hash! Presentare le tabelle hash e la nozione di funzione di hashing Discutere la complessità di questa realizzazione per le Tavole Tabelle Hash! n Obiettivi: Presentare le tabelle hash e la nozione di funzione di hashing Discutere la complessità di questa realizzazione per le Tavole 1 Tavole! n Una tavola è un tipo di dato astratto

Dettagli

Alberi. Se x è il genitore di y, allora y è un figlio di x. Un albero binario è un albero in cui ogni nodo ha al massimo due figli.

Alberi. Se x è il genitore di y, allora y è un figlio di x. Un albero binario è un albero in cui ogni nodo ha al massimo due figli. Alberi Un albero è un insieme di oggetti, chiamati nodi, su cui è definita una relazione binaria G(x, y) che leggiamo x è genitore di y tale che: 1. esiste un unico nodo, chiamato radice, che non ha genitori;

Dettagli

ALGORITMI E STRUTTURE DATI

ALGORITMI E STRUTTURE DATI ALGORITMI E STRUTTURE DATI Esercitazioni AndreA Orlandini http://www.dia.uniroma3.it/~orlandin/asd/ e-mail: orlandin@dia.uniroma3.it Orario di ricevimento: Martedì 14.00-16.00 Puntatori e Liste StudentiDIA

Dettagli

Algoritmi e Strutture Dati. Capitolo 6 Il problema del dizionario

Algoritmi e Strutture Dati. Capitolo 6 Il problema del dizionario Algoritmi e Strutture Dati Capitolo 6 Il problema del dizionario Il tipo dato Dizionario Suppongo sempre che mi venga dato un riferimento diretto all elemento da cancellare Applicazioni: gestione archivi

Dettagli

Algoritmi e Strutture Dati. Capitolo 3 Strutture dati elementari

Algoritmi e Strutture Dati. Capitolo 3 Strutture dati elementari Algoritmi e Strutture Dati Capitolo 3 Strutture dati elementari Gestione di collezioni di oggetti Tipo di dato: Specifica una collezione di oggetti e delle operazioni di interesse su tale collezione (es.

Dettagli

10/10/2016. Caratteristiche degli array. Il tipo RECORD. Il record. LABORATORIO DI PROGRAMMAZIONE 2 Corso di laurea in matematica

10/10/2016. Caratteristiche degli array. Il tipo RECORD. Il record. LABORATORIO DI PROGRAMMAZIONE 2 Corso di laurea in matematica Caratteristiche degli array Principali caratteristiche degli array: LABORATORIO DI PROGRAMMAZIONE 2 Corso di laurea in matematica Marco Lapegna Dipartimento di Matematica e Applicazioni Universita degli

Dettagli

algoritmi e strutture di dati

algoritmi e strutture di dati algoritmi e strutture di dati tipi astratti di dato (pile, code, liste implementate tramite array) m.patrignani nota di copyright queste slides sono protette dalle leggi sul copyright il titolo ed il copyright

Dettagli

Pile e code. ADT e strutture dati per la rappresentazione di sequenze ad accesso LIFO e FIFO

Pile e code. ADT e strutture dati per la rappresentazione di sequenze ad accesso LIFO e FIFO Pile e code ADT e strutture dati per la rappresentazione di sequenze ad accesso LIFO e FIFO Le Pile Una pila è una struttura dati lineare, alla quale gli elementi possono essere aggiunti o sottratti da

Dettagli

Algoritmi e Strutture Dati. Capitolo 3 Strutture dati elementari

Algoritmi e Strutture Dati. Capitolo 3 Strutture dati elementari lgoritmi e Strutture Dati Capitolo 3 Strutture dati elementari Gestione di collezioni di oggetti Tipo di dato: Specifica una collezione di oggetti e delle operazioni di interesse su tale collezione (es.

Dettagli

Alberi Binari di Ricerca

Alberi Binari di Ricerca Alberi Binari di Ricerca Algoritmi su gli alberi binari: visite Dato un puntatore alla radice di un albero vogliamo scandire in modo sistematico tutti i nodi di tale albero In una lista abbiamo una unica

Dettagli

Il vettore e la lista concatenate (o catena) sono due esempi di strutture interne.

Il vettore e la lista concatenate (o catena) sono due esempi di strutture interne. Strutture dati PILA e CODA Le strutture dati si dividono in interne e astratte. Quelle astratte sono rappresentazioni dei dati di un problema che rispecchiano le proprietà dei dati e le relazioni usate

Dettagli

TIPO DI DATO ASTRATTO

TIPO DI DATO ASTRATTO TIPO DI DATO ASTRATTO Tipo di dato astratto Esempio: Vogliamo rappresentare un sistema di prenotazione di esami universitari. Dati immagazzinati: prenotazioni esami Operazioni supportate: prenota(esame,

Dettagli

Liste con sentinella. intlist *createlist(void){ intlist *q = malloc(sizeof(intlist)); if(!q) { exit(-1); } q->next = q->prev = q; return q; }

Liste con sentinella. intlist *createlist(void){ intlist *q = malloc(sizeof(intlist)); if(!q) { exit(-1); } q->next = q->prev = q; return q; } Liste con sentinella Un ulteriore semplificazione delle operazioni sulle liste si ottiene utilizzando un elemento sentinella (dummy) che non contiene informazione, ma serve a segnalare la fine e l inizio

Dettagli

Alberi Binari di Ricerca

Alberi Binari di Ricerca Alberi Binari di Ricerca Prof. G. M. Farinella gfarinella@dmi.unict.it www.dmi.unict.it/farinella Riferimenti Bibliografici Cormen T.H., Leiserson C.E., Rivest R.L Introduction to Algorithms, Third Edition,

Dettagli

ricerca di un elemento, verifica dell appartenenza di un elemento

ricerca di un elemento, verifica dell appartenenza di un elemento Alberi Binari di Ricerca Gli alberi binari di ricerca (o, alberi di ricerca binaria) sono strutture dati che consentono, su un insieme di elementi con un ordine totale le operazioni di: ricerca di un elemento,

Dettagli

Fondamenti di Informatica

Fondamenti di Informatica Strutture dati complesse Esempi di strutture dati complesse analizzate in questa lezione: Fondamenti di Informatica 21. Strutture di dati complesse in C++ Array di puntatori Pila (Stack) Coda (queue) Liste

Dettagli

Algoritmi e Strutture di Dati

Algoritmi e Strutture di Dati Algoritmi e Strutture di Dati Tipi astratti di dato (pile e code realizzate tramite array) m.patrignani Nota di copyright queste slides sono protette dalle leggi sul copyright il titolo ed il copyright

Dettagli

heap heap heap? max- e min-heap concetti ed applicazioni heap = catasta condizione di heap non è una struttura ordinata

heap heap heap? max- e min-heap concetti ed applicazioni heap = catasta condizione di heap non è una struttura ordinata heap heap concetti ed applicazioni heap = catasta condizione di heap 1. albero binario perfettamente bilanciato 2. tutte le foglie sono a sinistra ma non è un BST!! 3. ogni nodo contiene una chiave maggiore

Dettagli

Organizzazioni hash. Corso di Basi di Dati e Sistemi Informativi

Organizzazioni hash. Corso di Basi di Dati e Sistemi Informativi Organizzazioni hash Corso di Basi di Dati e Sistemi Informativi 1 Hashing index-based data organizations: relazione tra chiave e indirizzo esplicita tramite puntatori. hash-based organizations: relazione

Dettagli

tipi di dato astratti

tipi di dato astratti tipi di dato astratti A. FERRARI ADT Un tipo di dato astratto o ADT (Abstract Data Type) è un tipo di dato le cui istanze possono essere manipolate con modalità che dipendono esclusivamente dalla semantica

Dettagli

Heap e code di priorità

Heap e code di priorità Heap e code di priorità Violetta Lonati Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica AA 2009/2010

Dettagli

PILE E CODE. Pile (stack):

PILE E CODE. Pile (stack): PILE E CODE Sono tipi di dato che consentono di rappresentare sequenze di elementi in cui gli inserimenti e le cancellazioni sono eseguiti con particolari modalita` (politiche o discipline). Pile (stack):

Dettagli

PROGRAMMAZIONE II canale A-D luglio 2008 TRACCIA DI SOLUZIONE

PROGRAMMAZIONE II canale A-D luglio 2008 TRACCIA DI SOLUZIONE PROGRAMMAZIONE II canale A-D 2007-2008 14 luglio 2008 TRACCIA DI SOLUZIONE 1. Si vogliono realizzare mediante puntatori delle liste circolari, cioè delle liste tali che l ultimo elemento della lista punta

Dettagli

Informatica 3. Informatica 3. LEZIONE 22: Politiche di risoluzione delle collisioni. Lezione 23 - Modulo 1. Politiche di risoluzione delle collisioni

Informatica 3. Informatica 3. LEZIONE 22: Politiche di risoluzione delle collisioni. Lezione 23 - Modulo 1. Politiche di risoluzione delle collisioni Informatica 3 Informatica 3 LEZIONE 22: Politiche di risoluzione delle collisioni Lezione 23 - Modulo 1 Modulo 1: Open e closed hashing Modulo 2: Sequenze di probe Modulo 3: Analisi del closed hashing

Dettagli

ricerca di un elemento, verifica dell appartenenza di un elemento

ricerca di un elemento, verifica dell appartenenza di un elemento Alberi Binari di Ricerca Gli alberi binari di ricerca (o, alberi di ricerca binaria) sono strutture dati che consentono, su un insieme di elementi con un ordine totale le operazioni di: ricerca di un elemento,

Dettagli

Nella scorsa lezione: Array multidimensionali. Mappa di memorizzazione. Esempio: ordinamento di parole. Argomenti di main.

Nella scorsa lezione: Array multidimensionali. Mappa di memorizzazione. Esempio: ordinamento di parole. Argomenti di main. Nella scorsa lezione: Array multidimensionali. Mappa di memorizzazione. Esempio: ordinamento di parole. Argomenti di main. Puntatori a funzioni. Array di puntatori a funzioni. Esempio: ordinamento di parole

Dettagli

Programmazione II canale AD -- Esonero del 21/04/2006

Programmazione II canale AD -- Esonero del 21/04/2006 Esercizio 1 (Sbarramento ) Si scriva una funzione ricorsiva che riceve in input una lista concatenata di interi L e restituisce una nuova lista concatenata di interi L1 in cui l elemento j-simo ( j 1)

Dettagli

Alberi. Alberi: Esempio di utilizzo

Alberi. Alberi: Esempio di utilizzo Sono strutture dati del tipo: Alberi SOTTOALBERO n1 RADICE DELL ALBERO () n2 n n4 Profondità o Livello 0 1 n n n n n n 2 NODI FOGLIA (LEAF NODES) 1 Alberi: Esempio di utilizzo Rappresentazione di un file

Dettagli

Programmazione 2. Liste Doppiamente Lincate. Prof. Sebastiano Battiato Prof.ssa Rosalba Giugno

Programmazione 2. Liste Doppiamente Lincate. Prof. Sebastiano Battiato Prof.ssa Rosalba Giugno Programmazione 2 Liste Doppiamente Lincate Prof. Sebastiano Battiato Prof.ssa Rosalba Giugno .. Liste doppiamente linkate Le liste linkate semplici consentono di scorrere gli elementi soltanto in una direzione,

Dettagli

Strutture dati Alberi binari

Strutture dati Alberi binari Strutture dati - 2 - Alberi binari Definizione L albero è un insieme di elementi (nodi), sui quali è definita una relazione di discendenza con due proprietà: esiste un solo nodo radice senza predecessori

Dettagli

Algoritmi e Strutture di Dati I 1. Algoritmi e Strutture di Dati I Massimo Franceschet francesc

Algoritmi e Strutture di Dati I 1. Algoritmi e Strutture di Dati I Massimo Franceschet  francesc Algoritmi e Strutture di Dati I 1 Algoritmi e Strutture di Dati I Massimo Franceschet http://www.sci.unich.it/ francesc Algoritmi e Strutture di Dati I 2 Tabelle hash Una tabella hash (in inglese hash

Dettagli

In questa lezione Strutture dati elementari: Pila Coda

In questa lezione Strutture dati elementari: Pila Coda In questa lezione Strutture dati elementari: Pila Coda 1 strutture dati (astratte) Una struttura dati astratti consiste di uno o più insiemi con delle operazioni che li modificano (insiemi dinamici). Le

Dettagli

Informatica 3. LEZIONE 13: Liste doppie, pile e code. Modulo 1: Free list Modulo 2: Lista doppia Modulo 3: Pila Modulo 4: Coda

Informatica 3. LEZIONE 13: Liste doppie, pile e code. Modulo 1: Free list Modulo 2: Lista doppia Modulo 3: Pila Modulo 4: Coda Informatica 3 LEZIONE 13: Liste doppie, pile e code Modulo 1: Free list Modulo 2: Lista doppia Modulo 3: Pila Modulo 4: Coda Informatica 3 Lezione 13 - Modulo 1 Free list Free list Le funzioni di sistema

Dettagli

Heap e Code di Priorità

Heap e Code di Priorità Heap e Code di Priorità heap heap = catasta condizione di heap 1. albero binario perfettamente bilanciato 2. ogni nodo contiene una chiave maggiore o eguale di quelle presenti negli eventuali figli non

Dettagli

Struttura dati Dizionario

Struttura dati Dizionario Struttura dati Dizionario Un dizionario è : un insieme di coppie (elemento, chiave) Sul campo chiave è definita una relazione d'ordine totale Su cui definiamo le seguenti operazioni: insert(elem e, chiave

Dettagli

Informatica 3. Informatica 3. LEZIONE 13: Liste doppie, pile e code. Lezione 13 - Modulo 1. Free list (2) Free list. Free list

Informatica 3. Informatica 3. LEZIONE 13: Liste doppie, pile e code. Lezione 13 - Modulo 1. Free list (2) Free list. Free list LEZIONE 13: Liste doppie, pile e code Modulo 1: Free list Modulo 2: Lista doppia Modulo 3: Pila Modulo 4: Coda Lezione 13 - Modulo 1 Free list Politecnico di Milano - Prof. Sara Comai 1 Politecnico di

Dettagli

heap concetti ed applicazioni

heap concetti ed applicazioni heap concetti ed applicazioni ADT coda di priorità operazioni getfirst restituisce l'elemento nella struttura con massima priorità deletefirst cancella l'elemento nella struttura con massima priorità insert

Dettagli

Strutture dati. Le liste

Strutture dati. Le liste Strutture dati Le liste Introduzione Una lista è una successione finita di valori di un tipo (insieme di valori e ordine). Come tipo di dato è qualificata dalle operazioni che ci si possono svolgere: inserimento

Dettagli

Multi-way search trees

Multi-way search trees Multi-way search trees GT. 10.4 1 Argomenti Multi-way search trees Multi-way searching 9 (2,4) Trees 2 5 7 10 14 2 1 Alberi Binari di Ricerca Bilanciati n numero di chiavi (entry(key,elem)) AVL tree log(

Dettagli

Alberi ed Alberi Binari

Alberi ed Alberi Binari Alberi ed Alberi Binari Il tipo di dato Albero Un albero è una struttura di data organizzata gerarchicamente. È costituito da un insieme di nodi collegati tra di loro: ogni nodo contiene dell informazione,

Dettagli

Problemi di ordinamento

Problemi di ordinamento Problemi di ordinamento Input: una sequenza di n numeri a 1, a 2,..., a n ; Output: una permutazione a 1, a 2,..., a n di a 1, a 2,..., a n tale che a 1 a 2... a n. Generalmente, la sequenza è rappresentata

Dettagli

In questa lezione Alberi binari di ricerca

In questa lezione Alberi binari di ricerca In questa lezione Alberi binari di ricerca!1 Dizionari Un dizionario è una struttura dati costituita da un insieme con le operazioni di inserimento, cancellazione e verifica di appartenenza di un elemento.

Dettagli

Tabelle hash. Vittorio Maniezzo - Università di Bologna

Tabelle hash. Vittorio Maniezzo - Università di Bologna Tabelle hash 1 Vittorio Maniezzo - Università di Bologna Look up table, caso generale Anche memoria associativa, associative array, map, symboltable, dictionary: collezione di elementi nella forma coppia

Dettagli

Struttura dati astratta Coda

Struttura dati astratta Coda CODE Struttura dati astratta Coda La coda o queue è una struttura dati astratta in cui l'inserimento e l estrazione sono consentite solo in specifiche posizioni; in particolare, l'inserimento è consentito

Dettagli

Look up table, caso generale

Look up table, caso generale Tabelle hash 1 Vittorio Maniezzo - Università di Bologna Look up table, caso generale Anche memoria associativa, associative array, map, symboltable, dictionary: collezione di elementi nella forma coppia

Dettagli

Laboratorio di Algoritmi

Laboratorio di Algoritmi Laboratorio di Algoritmi Corso di Laurea in Matematica Roberto Cordone DI - Università degli Studi di Milano Lezioni: Martedì 8.30-10.30 in aula 3 Mercoledì 10.30-13.30 in aula 2 Giovedì 15.30-18.30 in

Dettagli

Organigramma Gerarchia. (Tree) Nessuna persona può avere più di un superiore Ogni persona può essere superiore di altre

Organigramma Gerarchia. (Tree) Nessuna persona può avere più di un superiore Ogni persona può essere superiore di altre Alberi Struttura dati Albero Organigramma Gerarchia (Tree) Nessuna persona può avere più di un superiore Ogni persona può essere superiore di altre Esempio di un organigramma di un azienda Tree terminology

Dettagli

SOMMARIO STACK. STACK: specifica STACK

SOMMARIO STACK. STACK: specifica STACK SOMMARIO STACK Pila (stack): una struttura dati lineare a cui si può accedere soltanto mediante uno dei suoi capi per memorizzare e per estrarre dati. Specifica (descrizione). Implementazione (realizzazione).

Dettagli

Spesso sono definite anche le seguenti operazioni:

Spesso sono definite anche le seguenti operazioni: Code a priorità Una coda a priorità è una struttura dati astratta che permette di rappresentare un insieme di elementi su cui è definita una relazione d ordine. Sono definite almeno le seguenti operazioni:

Dettagli

Sommario. Tabelle ad indirizzamento diretto e hash Funzioni Hash

Sommario. Tabelle ad indirizzamento diretto e hash Funzioni Hash Funzioni Hash Sommario Tabelle ad indirizzamento diretto e hash Funzioni Hash Requisiti Metodo della divisione Metodo della moltiplicazione Funzione Hash Universale La ricerca Talvolta si richiede che

Dettagli

Linguaggio C: Strutture e Liste Concatenate Valeria Cardellini

Linguaggio C: Strutture e Liste Concatenate Valeria Cardellini Linguaggio C: Strutture e Liste Concatenate Valeria Cardellini Corso di Calcolatori Elettronici A.A. 2018/19 Università degli Studi di Roma Tor Vergata Dipartimento di Ingegneria Civile e Ingegneria Informatica

Dettagli

Tipi di dati astratti

Tipi di dati astratti Tipi di dati astratti ADT 1 Dati strutturati e algoritmi Una struttura di dati è un insieme di regole per organizzare e manipolare dei dati Un algoritmo è un procedimento composto in passi elementari in

Dettagli

Liste. Costo operazioni Tutte le operazioni hanno costo O(1)

Liste. Costo operazioni Tutte le operazioni hanno costo O(1) Liste Liste (List, Linked List) Una sequenza di nodi, contenenti dati arbitrari e 1-2 puntatori all'elemento successivo e/o precedente Contiguità nella lista contiguità nella memoria Costo operazioni Tutte

Dettagli

Lezione 12 Tabelle Hash

Lezione 12 Tabelle Hash Lezione 12 Tabelle Hash Rossano Venturini rossano@di.unipi.it Pagina web del corso http://didawiki.cli.di.unipi.it/doku.php/informatica/all-b/start Esercizio 2 ABR: Visita Scrivere un programma che legga

Dettagli

Laboratorio di Programmazione Lezione 3. Cristian Del Fabbro

Laboratorio di Programmazione Lezione 3. Cristian Del Fabbro Laboratorio di Programmazione Lezione 3 Cristian Del Fabbro Prossima lezione GIOVEDÌ 12 NOVEMBRE ORE 14:00 Array a.k.a. vettore Un array è una collezione ordinata di dati omogenei (cioé sono tutti dello

Dettagli

Alberi binari di ricerca

Alberi binari di ricerca Alberi binari di ricerca Definizione Visita dell albero inorder Ricerca Ricerca minimo, massimo e successore. Inserimento ed eliminazione di un nodo Problema del bilanciamento dell albero Albero binario

Dettagli

Algoritmi e Strutture di Dati I 1. Algoritmi e Strutture di Dati I Massimo Franceschet http://www.sci.unich.it/ francesc

Algoritmi e Strutture di Dati I 1. Algoritmi e Strutture di Dati I Massimo Franceschet http://www.sci.unich.it/ francesc Algoritmi e Strutture di Dati I 1 Algoritmi e Strutture di Dati I Massimo Franceschet http://www.sci.unich.it/ francesc Algoritmi e Strutture di Dati I 2 Grafo Un grafo G è una coppia (V, E) ove V è un

Dettagli

Algoritmi e Strutture Dati. Strutture Dati Elementari

Algoritmi e Strutture Dati. Strutture Dati Elementari Algoritmi e Strutture Dati Strutture Dati Elementari Insiemi Un insieme è una collezione di oggetti distinguibili chiamati elementi (o membri) dell insieme. a S significa che a è un membro de (o appartiene

Dettagli