Che cosa c è nella lezione. Questa lezione si occupa di strutture dati:
|
|
- Leonora Piva
- 5 anni fa
- Visualizzazioni
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
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
DettagliAlgoritmi 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
DettagliPile 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
Dettaglialberi 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
DettagliStrutture 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
DettagliTABELLE 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
DettagliStrutture 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
DettagliIn 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
DettagliAlberi 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
Dettagli05EIP. 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:
DettagliAlgoritmi 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]
DettagliAlgoritmi 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
DettagliAlgoritmi 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
DettagliInsiemi 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,
DettagliStruttura 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
DettagliAlgoritmi 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
DettagliTipi 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
DettagliIntroduzione. 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):
DettagliLa 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
DettagliEsercitazione 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)
DettagliEsercitazione: 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
DettagliHeap 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à
DettagliSommario. 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
DettagliStrutture 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
DettagliAlgoritmi 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
DettagliLaboratorio 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
DettagliAlberi 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
DettagliFondamenti 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
DettagliDizionario. 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
DettagliQuesta 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
DettagliAlberi 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
DettagliFondamenti 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
DettagliStrutture 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)
DettagliAlberi 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
DettagliLaboratorio 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
DettagliAlberi 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
DettagliLE 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
DettagliListe 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
DettagliTabelle 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
DettagliAlberi. 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;
DettagliALGORITMI 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
DettagliAlgoritmi 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
DettagliAlgoritmi 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.
Dettagli10/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
Dettaglialgoritmi 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
DettagliPile 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
DettagliAlgoritmi 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.
DettagliAlberi 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
DettagliIl 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
DettagliTIPO 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,
DettagliListe 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
DettagliAlberi 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,
Dettagliricerca 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,
DettagliFondamenti 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
DettagliAlgoritmi 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
Dettagliheap 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
DettagliOrganizzazioni 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
Dettaglitipi 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
DettagliHeap 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
DettagliPILE 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):
DettagliPROGRAMMAZIONE 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
DettagliInformatica 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
Dettagliricerca 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,
DettagliNella 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
DettagliProgrammazione 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)
DettagliAlberi. 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
DettagliProgrammazione 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,
DettagliStrutture 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
DettagliAlgoritmi 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
DettagliIn 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
DettagliInformatica 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
DettagliHeap 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
DettagliStruttura 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
DettagliInformatica 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
Dettagliheap 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
DettagliStrutture 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
DettagliMulti-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(
DettagliAlberi 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,
DettagliProblemi 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
DettagliIn 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.
DettagliTabelle 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
DettagliStruttura 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
DettagliLook 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
DettagliLaboratorio 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
DettagliOrganigramma 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
DettagliSOMMARIO 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).
DettagliSpesso 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:
DettagliSommario. 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
DettagliLinguaggio 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
DettagliTipi 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
DettagliListe. 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
DettagliLezione 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
DettagliLaboratorio 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
DettagliAlberi 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
DettagliAlgoritmi 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
DettagliAlgoritmi 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