Dallo heap per la coda con priorità a un nuovo algoritmo di ordinamento. Algoritmi e Laboratorio a.a Lezioni. I due cicli dell'algoritmo
|
|
- Orlando Rossetti
- 4 anni fa
- Visualizzazioni
Transcript
1 Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica Curriculum SR (Sistemi e Reti) Algoritmi e Laboratorio a.a. -1 Lezioni prof. Elio Giovannetti Lezione Heapsort versione 11/11/ Quest' opera è pubblicata sotto una Licenza Creative Commons Attribution-NonCommercial-ShareAlike.5. Dallo per la coda con priorità a un nuovo algoritmo di ordinamento. Partiamo dal Selection sort (ordinamento per estrazione successiva del minimo), pessimo perché quadratico, e modifichiamolo come segue. Prima di iniziare il ciclo di estrazioni successive del minimo, trasformiamo l'array in uno, attraverso n inserimenti: ciascuno di essi ha complessità log i, con i che varia da 1 a n: log 1 + log log n < n log n Poi operiamo le estrazioni successive del minimo usando l'algoritmo di estrazione del minimo dello : abbiamo n estrazioni, con i che varia da n a 1, quindi di nuovo: log n log + log 1 < n log n La complessità nel caso peggiore è quindi n log n T worst (n) = Θ(n log n): è un algoritmo ottimale! 11/11/.5 E. Giovannetti - AlgELab--1 - Lez. I due cicli dell'algoritmo 1. Lo può essere costruito sullo stesso array da ordinare: ancora da esaminare Alla fine del ciclo l'intero array è diventato uno.. Ricorda: quando si estrae il minimo, lo si accorcia "dal fondo". Gli elementi successivamente estratti dallo possono perciò essere messi nello stesso array contenente lo, a partire dal fondo: ancora da svuotare parte già ordinata Estraendo ripetutamente il minimo e inserendolo nell'array a partire dal fondo si ottiene però l'ordine inverso. Come si può realizzare l'ordinamento solito? 11/11/.5 E. Giovannetti - AlgELab--1 - Lez. Ordinamento tramite (sort): soluzione. Basta usare uno a massimo invece di uno a minimo! In modo del tutto analogo a quanto illustrato nella slide precedente: 1. prima si trasforma, mediante inserimenti successivi, l'array in uno -a-massimo;. poi da esso si fanno successive estrazioni del massimo ognuna in tempo logaritmico, e i valori estratti vanno via via a riempire la parte di array liberata dallo, a partire dal fondo. Così l'ordine risultante è quello "giusto". 11/11/.5 E. Giovannetti - AlgELab--1 - Lez. Heapsort: caratteristiche. Complessità temporale del caso peggiore: Θ(n log n); non ha, come il quicksort, un caso peggiore quadratico, bensì è ottimale in ogni caso, come il mergesort. È un algoritmo che "lavora sul posto" (in place) cioè che, a differenza del mergesort, non ha bisogno di un array ausiliario della stessa dimensione dell'input. Inoltre, a differenza del quicksort, è un algoritmo iterativo, quindi il suo stack occupa solamente uno spazio massimo costante. Pertanto: Complessità spaziale (in ogni caso): Θ(1) Lo sort è dunque, dal punto di vista asintotico, l'algoritmo di ordinamento migliore fra quelli esaminati. Tuttavia nella maggior parte delle situazioni l'algoritmo di ordinamento più veloce, in media, risulta essere il quicksort! 11/11/.5 E. Giovannetti - AlgELab--1 - Lez. 5 Heap in un array a partire dall'indice. Nota: Volendo usare lo per realizzare un algoritmo di ordinamento, lo stesso deve partire dall'indice invece che dall'indice 1. Il calcolo degl'indici del genitore e dei figli di un nodo deve essere cambiato di conseguenza: left(i) = i+1 right(i) = i+ parent(i) = (i-1)/ ( ) /11/.5 E. Giovannetti - AlgELab--1 - Lez. 1
2 Heapsort e coda con priorità Nell'algoritmo di ordinamento evidentemente non si vuole creare un oggetto separato di una classe PriorityQueue, ma realizzare lo direttamente nell'array da ordinare. Occorre quindi modificare i metodi di inserimento nello e di estrazione del massimo, facendoli diventare metodi statici che operano sull'array da ordinare. L'array degli elementi e l'indice dell'ultimo elemento, che erano campi della classe PriorityQueue, diventano quindi parametri espliciti del metodo. 11/11/.5 E. Giovannetti - AlgELab--1 - Lez. i Heapsort per array di int ancora da esaminare static void addtoheap(int[] a, int i) inserisce l'elemento a[i] nello a[.. i-1]; i ancora da svuotare parte già ordinata static void getmax(int[] a, int i) estrae il massimo dallo a[.. i] e lo mette in a[i]; public static void sort(int[] a) { int n = a.length; for(int i = 1; i < n; i++) addtoheap(a, i); for(int i = n -1; i > ; i--) getmax(a, i); 11/11/.5 E. Giovannetti - AlgELab--1 - Lez. 8 Inserimento nello (= moveup) i i inserisce l'elemento a[i] nello a[.. i-1]; a[i] è già in fondo allo, bisogna solo farlo salire; addtoheap coincide quindi con una opportuna moveup static ti void addtoheap(int[] a, int i) { elem = a[i]; // elemento da far salire; i è l'indice del posto in cui mettere l'elemento while(i > radice && elem > genitore di i) { a[i] = genitore di i; il genitore scende nel posto del figlio i = indice_genitore di i ; il posto dell'elemento sale al posto del genitore a[i] = elem; 11/11/.5 E. Giovannetti - AlgELab--1 - Lez. Inserimento nello (= moveup) i i inserisce l'elemento a[i] nello a[.. i-1]; a[i] è già in fondo allo, bisogna solo farlo salire; addtoheap coincide quindi con una opportuna moveup static ti void addtoheap(int[] a, int i) { elem = a[i]; // elemento da far salire; i è l'indice del posto in cui mettere l'elemento while(i > && elem > a[(i-1)/]) { a[i] = genitore di i; il genitore scende nel posto del figlio i = indice_genitore di i ; il posto dell'elemento sale al posto del genitore a[i] = elem; 11/11/.5 E. Giovannetti - AlgELab--1 - Lez. 1 Inserimento nello (= moveup) i i inserisce l'elemento a[i] nello a[.. i-1]; a[i] è già in fondo allo, bisogna solo farlo salire; addtoheap coincide quindi con una opportuna moveup static ti void addtoheap(int[] a, int i) { elem = a[i]; // elemento da far salire; i è l'indice del posto in cui mettere l'elemento while(i > && elem > a[(i-1)/]) { a[i] = a[(i-1)/]; // il genitore scende nel posto del figlio i = (i-1)/; // il posto per l'elemento sale nel genitore a[i] = elem; 11/11/.5 E. Giovannetti - AlgELab--1 - Lez. 11 Estrazione del massimo i ancora da svuotare parte già ordinata estrae il massimo dallo a[.. i] e lo mette in a[i]; a[i] è l'ultima foglia, che deve essere "tagliata"; il massimo si trova in a[] e va spostato in a[i]; la "foglia tagliata" deve essere messa al posto della radice e poi fatta scendere; static void getmax(int[] a, int i) { // si estrae il massimo a[] e lo si mette al posto della // foglia a[i], che viene spostata nella radice; scambia(a, i, ); movedown nello a[..i-1], a partire dalla radice 11/11/.5 E. Giovannetti - AlgELab--1 - Lez. 1
3 Estrazione del massimo i ancora da svuotare parte già ordinata estrae il massimo dallo a[.. i] e lo mette in a[i]; a[i] è l'ultima foglia, che deve essere "tagliata"; il massimo si trova in a[] e va spostato in a[i]; la "foglia tagliata" deve essere messa al posto della radice e poi fatta scendere; static void getmax(int[] a, int i) { // si estrae il massimo a[] e lo si mette al posto della // foglia a[i], che viene spostata nella radice; scambia(a, i, ); movedown(a,, i) ; dove movedown(int[] a, int k, int length) fa scendere l'el. di indice k nello a[.. length-1] 11/11/.5 E. Giovannetti - AlgELab--1 - Lez. 1 Estrazione del massimo i ancora da svuotare parte già ordinata Il corpo della procedura getmax è costituito da due sole istruzioni; è quindi conveniente eliminarla, espandendo in linea le due istruzioni: public static void sort(int[] a) {... for( ) { scambia(a, i, ); movedown(a,, i) ; dove movedown(int[] a, int k, int length) fa scendere l'el. di indice k nello a[.. length-1] 11/11/.5 E. Giovannetti - AlgELab--1 - Lez. 1 movedown o fixheap k, inizialmente indice del nodo da far scendere, è poi l'indice del "posto vuoto" che viene via via fatto scendere, finché non è maggiore di entrambi i figli (o dell'unico figlio). k 8 ichild 5 Estrazione del massimo = movedown k i parte già ordinata Attenzione: tagliata la foglia, lo diventa a[.. i-1] int elem = a[k]; int ichild; while(k ha almeno un figlio) { ichild = ifiglio sin. di k int j = indice del figlio destro; if(figlio destro esiste && è maggiore del sinistro) ichild = j; se elem è >= figlio maggiore, è al posto giusto: if(elem >= a[ichild]) break; altrimenti: a[k] = figlio maggiore di k; il figlio sale nel posto libero; k = ichild; // il posto libero per elem scende nel figlio a[k] = elem; 11/11/.5 E. Giovannetti - AlgELab--1 - Lez /11/.5 E. Giovannetti - AlgELab--1 - Lez. 1 Estrazione del massimo = movedown k i parte già ordinata Attenzione: tagliata la foglia, lo diventa a[.. i-1] int elem = a[k]; int ichild; Attenzione! Test con effetto collaterale! while((ichild = *k + 1) < i) { int j = ichild + 1; // indice del figlio destro if(figlio destro esiste && è maggiore del sinistro) ichild = j; se elem è >= figlio maggiore, è al posto giusto: if(elem >= a[ichild]) break; altrimenti: a[k] = figlio maggiore di k; il figlio sale nel posto libero; k = ichild; // il posto libero per elem scende nel figlio a[k] = elem; Estrazione del massimo = movedown k i parte già ordinata Attenzione: tagliata la foglia, lo diventa a[.. i-1] int elem = a[k]; int ichild; while((ichild = *k + 1) < i) { int j = ichild + 1; if(j < i && a[j] > a[ichild]) ichild ++; if(elem >= a[ichild]) break; a[k] = a[ichild]; il figlio maggiore sale nel posto libero k = ichild; il posto per l'elemento scende nel figlio a[k] = elem; 11/11/.5 E. Giovannetti - AlgELab--1 - Lez. 1 11/11/.5 E. Giovannetti - AlgELab--1 - Lez.
4 Esercizio 1. Raffinamento Si completi la definizione della procedura di ordinamento public static void sort(int[] a) Trasformazione dell'array in "partendo dal basso". 11/11/.5 E. Giovannetti - AlgELab--1 - Lez. 1 11/11/.5 E. Giovannetti - AlgELab--1 - Lez. Raffinamento. L'array può essere trasformato in uno, invece che per mezzo di n inserimenti successivi (tempo totale Θ(n log n)), applicando ripetutamente movedown ai nodi a partire dal basso (vedremo che ciò richiede solo un tempo Θ(n)). Infatti: un albero costituito da una foglia è uno ; un albero quasi completo i cui sottoalberi sinistro e destro sono degli (e in cui quindi solo la radice può essere "fuori posto") diventa uno se si applica movedown alla sua radice: nodo fuori posto L'algoritmo ricorsivo trasformainheap (in inglese ify, cioè ifica) void trasformainheap(subarray di radice i) { if(subarray non è vuoto e non è una foglia) { trasformainheap(sottoalbero sinistro di subarray); trasformainheap(sottoalbero destro di subarray); movedown nel subarray la radice del subarray; 11/11/.5 E. Giovannetti - AlgELab--1 - Lez. 1 11/11/.5 E. Giovannetti - AlgELab--1 - Lez. L'algoritmo ricorsivo trasformainheap (in inglese ify, cioè ifica) void ify(int[] a, int i) { int j = *i + 1; // figlio sinistro di i if(j < a.length) { // se il figlio sinistro esiste ify(sottoalbero sinistro di subarray); ify(sottoalbero destro di subarray); movedown nel subarray la radice del subarray; Nota: se il figlio destro è inesistente, esso non ha a sua volta figli, quindi la procedura invocata su di esso ritorna senza errori e senza fare nulla (come nel caso di una foglia). L'algoritmo ricorsivo trasformainheap (in inglese ify, cioè ifica) void ify(int[] a, int i) { int j = *i + 1; // figlio sinistro if(j < a.length) { ify(a, j); ify(a, j+1); movedown nel subarray la radice del subarray; Nota: se il figlio destro è inesistente, esso non ha a sua volta figli, quindi la procedura invocata su di esso ritorna senza errori e senza fare nulla (come nel caso di una foglia). 11/11/.5 E. Giovannetti - AlgELab--1 - Lez. 11/11/.5 E. Giovannetti - AlgELab--1 - Lez.
5 L'algoritmo ricorsivo trasformainheap (in inglese ify, cioè ifica) void ify(int[] a, int i) { int j = *i + 1; // figlio sinistro if(j < a.length) { ify(a, j); ify(a, j+1); movedown(a, i, a.length); Nota: se il figlio destro è inesistente, esso non ha a sua volta figli, quindi la procedura invocata su di esso ritorna senza errori e senza fare nulla (come nel caso di una foglia). Raffinamento (continua) Con l'utilizzo dell'algoritmo lineare (vedi dimostrazione più avanti) di trasformazione diretta dell'array in, la complessità asintotica non cambia, perché il ciclo di estrazioni successive del massimo rimane n log n, e si ha quindi: T(n) = n + n log n = Θ(n log n) Tale tempo è tuttavia migliore di quello della versione iniziale, espresso da n log n. La versione ricorsiva, però, accresce ovviamente la complessità in spazio. Ne esiste però una facile versione iterativa: nella versione finale di sort adottiamo perciò quest'ultima. 11/11/.5 E. Giovannetti - AlgELab--1 - Lez. 5 11/11/.5 E. Giovannetti - AlgELab--1 - Lez. Le foglie sono già banalmente degli. Allora basta ificare dapprima tutti i sottoalberi di altezza 1 (nell'esempio, quelli di radici risp. in 5,, ); allora i sottoalberi di altezza (nell'es., quelli di radici di indici 1 e ) avranno fuori posto solo le radici, e si possono a loro volta ificare; poi i sottoalberi di altezza, ecc. (nell'es. l'intero albero, di radice di indice ). indice /11/.5 E. Giovannetti - AlgELab--1 - Lez /11/.5 E. Giovannetti - AlgELab--1 - Lez. 8 Allora basta ificare dapprima tutti i sottoalberi di altezza 1 (nell'esempio, quelli di radici risp. in 5,, ); allora i sottoalberi di altezza (nell'es., quelli di radici di indici 1 e ) avranno fuori posto solo le radici, e si possono a loro volta ificare; poi i sottoalberi di altezza, ecc. (nell'es. l'intero albero, di radice di indice ). Allora basta ificare dapprima tutti i sottoalberi di altezza 1 (nell'esempio, quelli di radici risp. in 5,, ); allora i sottoalberi di altezza (nell'es., quelli di radici di indici 1 e ) avranno fuori posto solo le radici, e si possono a loro volta ificare; poi i sottoalberi di altezza, ecc. (nell'es. l'intero albero, di radice di indice ) /11/.5 E. Giovannetti - AlgELab--1 - Lez /11/.5 E. Giovannetti - AlgELab--1 - Lez. 5
6 Basta cioè ificare su tutti i nodi percorrendo l'albero per livelli dal basso verso l'alto e da destra a sinistra, a partire dal primo nodo non-foglia: static void ify(int[] a) { int lastindex = a.length - 1 for(int j = indice ultimo nodo interno; j >= ; j--) movedown(a, j, a.length); Nota: (lastindex-1)/ è l'indice del genitore dell'ultima foglia, cioè l'indice dell'ultimo nodo interno. Iniziando da esso e andando all'indietro, si esegue movedown su tutti i nodi interni. Si vede facilmente che la procedura iterativa e quella ricorsiva eseguono esattamente le stesse chiamate di movedown; esse hanno quindi la stessa complessità temporale, ma naturalmente la procedura iterativa è più efficiente e ha bisogno solo di uno spazio costante. 11/11/.5 E. Giovannetti - AlgELab--1 - Lez. 1 Basta cioè ificare su tutti i nodi percorrendo l'albero per livelli dal basso verso l'alto e da sinistra a destra, a partire dal primo nodo non-foglia: static void ify(int[] a) { int lastindex = a.length - 1 for(int j = (lastindex-1)/; j >= ; j--) movedown(a, j, a.length); Nota: (lastindex-1)/ è l'indice del genitore dell'ultima foglia, cioè l'indice dell'ultimo nodo interno. Iniziando da esso e andando all'indietro, si esegue movedown su tutti i nodi interni. Si vede facilmente che la procedura iterativa e quella ricorsiva eseguono esattamente le stesse chiamate di movedown; esse hanno quindi la stessa complessità temporale, ma naturalmente la procedura iterativa è più efficiente e ha bisogno solo di uno spazio costante. 11/11/.5 E. Giovannetti - AlgELab--1 - Lez. Basta cioè ificare su tutti i nodi percorrendo l'albero per livelli dal basso verso l'alto e da sinistra a destra, a partire dal primo nodo non-foglia: static void ify(int[] a) { int lastindex = a.length - 1 for(int j = (lastindex-1)/; j >= ; j--) movedown(a, j, a.length); Nota: (lastindex-1)/ è l'indice del genitore dell'ultima foglia, cioè l'indice dell'ultimo nodo interno. Iniziando da esso e andando all'indietro, si esegue movedown su tutti i nodi interni. Si vede facilmente che la procedura iterativa e quella ricorsiva eseguono esattamente le stesse chiamate di movedown; esse hanno quindi la stessa complessità temporale, ma naturalmente la procedura iterativa è più efficiente e ha bisogno solo di uno spazio costante. 11/11/.5 E. Giovannetti - AlgELab--1 - Lez. Heapsort: versione finale, in C. Nota: la procedura ify può essere eliminata espandendo in linea il suo corpo; in tal modo si ottiene una procedura sort che usa solo la procedura ausiliaria movedown. In C: void sort(int a[], int n) { int j, i; for(j =(n-)/; j >= ; j--) movedown(a,j,n); for(i = n-1; i > ; i--) { scambia(a,,i); movedown(a,,i); 11/11/.5 E. Giovannetti - AlgELab--1 - Lez. Esercizio Si scriva e si provi la procedura sort in Java. Calcolo della complessità di ify Il tempo di esecuzione ify è la somma dei tempi di tutte le esecuzioni di movedown, quindi è la somma di tutte le altezze dei sottoalberi non-foglie (nel caso peggiore). Assumiamo per semplicità che l'albero sia completo, e abbia altezza h; il numero n dei nodi, cioè la lunghezza dell'array, è quindi: n = h = h h /11/.5 E. Giovannetti - AlgELab--1 - Lez /11/.5 E. Giovannetti - AlgELab--1 - Lez.
7 Calcolo della complessità di ify altezza: h; numero di nodi: n = h+1 1; numero di foglie: h 1 Calcolo della complessità di ify altezza: h; numero di nodi: n = h+1 1; numero di foglie: h Quanti sono gli alberi di altezza 1 (radici gialle)? Sono h-1 ; la somma delle loro altezze è quindi 1 h-1. Quanti sono gli alberi di altezza (radici arancioni)? Sono h- ; la somma delle loro altezze è quindi h-. 11/11/.5 E. Giovannetti - AlgELab--1 - Lez Quanti sono gli alberi di altezza (radici viola)? Sono h- ; la somma delle loro altezze è quindi h-. Quanti sono gli alberi di altezza k? Sono h-k ; la somma delle loro altezze è quindi k h-k. 11/11/.5 E. Giovannetti - AlgELab--1 - Lez. 8 Calcolo della complessità di ify altezza: h; numero di nodi: n = h+1 1; numero di foglie: h La somma delle altezze dei sottoalberi non-foglie è quindi: 1 h-1 + h- + h k h-k (h-1) + h 1 Calcolo della complessità di ify Per calcolare il valore della somma 1 h-1 + h- + h k h-k (h-1) + h 1 riscriviamola così, su h righe: = 1 h-1 + h- + h k h-k (h-1) + h 1 1 h-1 + h- + h k h-k (h-1) + h 1 h-1 + h- + h h-k h-1 + h- + h h-k h righe h-1 + h- + h h-k h-1 + h- + h h-k ora calcoliamo la somma di ogni riga: ( h 1) + ( h-1 1) + ( h- 1) ( 1) + ( 1 1) + ( 1) = h+1 1 (h + 1) 11/11/.5 E. Giovannetti - AlgELab--1 - Lez. 11/11/.5 E. Giovannetti - AlgELab--1 - Lez. Calcolo della complessità di ify Per calcolare il valore della somma 1 h-1 + h- + h k h-k (h-1) + h 1 riscriviamola così, su h righe: = 1 h-1 + h- + h k h-k (h-1) + h 1 1 h-1 + h- + h k h-k (h-1) + h 1 h-1 + h- + h h-k h-1 + h- + h h-k h-1 + h- + h h-k h-1 + h- + h h-k ora calcoliamo la somma di ogni riga: ( h 1) + ( h-1 1) + ( h- 1) ( 1) + ( 1 1) + ( 1) = h+1 1 (h + 1) Calcolo della complessità di ify Per calcolare il valore della somma 1 h-1 + h- + h k h-k (h-1) + h 1 riscriviamola così, su h righe: = 1 h-1 + h- + h k h-k (h-1) + h 1 1 h-1 + h- + h k h-k (h-1) + h 1 h-1 + h- + h h-k h-1 + h- + h h-k h-1 + h- + h h-k h-1 + h- + h h-k ora calcoliamo la somma di ogni riga: ( h 1) + ( h-1 1) + ( h- 1) ( 1) + ( 1 1) + ( 1) = h+1 1 (h + 1) 11/11/.5 E. Giovannetti - AlgELab--1 - Lez. 1 11/11/.5 E. Giovannetti - AlgELab--1 - Lez.
8 Calcolo della complessità di ify Per calcolare il valore della somma 1 h-1 + h- + h k h-k (h-1) + h 1 riscriviamola così, su h righe: = 1 h-1 + h- + h k h-k (h-1) + h 1 1 h-1 + h- + h k h-k (h-1) + h 1 h-1 + h- + h h-k h-1 + h- + h h-k h-1 + h- + h h-k h-1 + h- + h h-k ora calcoliamo la somma di ogni riga: ( h 1) + ( h-1 1) + ( h- 1) ( 1) + ( 1 1) + ( 1) = h+1 1 (h + 1) ricorda che n = h+1 1 = n - Θ(log n) = Θ(n) 11/11/.5 E. Giovannetti - AlgELab--1 - Lez. Calcolo della complessità di ify Abbiamo così dimostrato che ify, cioè la procedura di trasformazione dell'array in a partire dal basso, ha complessità temporale (del caso peggiore) lineare. 11/11/.5 E. Giovannetti - AlgELab--1 - Lez. Riassunto sort. È per selezione successiva del massimo, analogo al pessimo selection sort, ma usa uno -a-massimo (brevemente max-) perché da esso si estrae il massimo in modo più efficiente (logaritmico). Trasforma l'array in uno "partendo dal basso" tramite la procedura ify che usa ripetutamente movedown. Estrae ripetutamente il massimo dallo, usando ogni volta la procedura movedown per riaggiustare lo. Attenzione ai nomi: non confondere fixheap, che è un altro nome di movedown, con ify! Per aumentare la confusione, alcuni testi scambiano i nomi di fixheap e ify! Quindi attenzione! Riassunto sort più a basso livello. Trasforma l'array in uno "partendo dal basso" tramite la procedura ify che usa ripetutamente movedown per spostare in basso i nodi fuori posto. Ripetutamente scambia il primo elemento, che è il massimo, con l'ultima foglia dello (cioè con il primo da destra della parte ancora da ordinare), e poi fa scendere ogni volta con movedown tale ultimo elemento dalla radice fino al posto giusto. 11/11/.5 E. Giovannetti - AlgELab--1 - Lez. 5 11/11/.5 E. Giovannetti - AlgELab--1 - Lez. Esempio di estrazione del massimo (1) Esempio di estrazione del massimo () /11/.5 E. Giovannetti - AlgELab--1 - Lez. 11/11/.5 E. Giovannetti - AlgELab--1 - Lez. 8 8
9 Esempio di estrazione del massimo () Esempio di estrazione del massimo () /11/.5 E. Giovannetti - AlgELab--1 - Lez. 11/11/.5 E. Giovannetti - AlgELab--1 - Lez. 5 Esempio di estrazione del massimo (5) Esecuzione di sort: costruzione dello Heap (1) /11/.5 E. Giovannetti - AlgELab--1 - Lez /11/.5 E. Giovannetti - AlgELab--1 - Lez. 5 Esecuzione di sort: costruzione dello Heap () Esecuzione di sort: costruzione dello Heap () /11/.5 E. Giovannetti - AlgELab--1 - Lez. 5 11/11/.5 E. Giovannetti - AlgELab--1 - Lez. 5
10 Esecuzione di sort: costruzione dello Heap () Esecuzione di sort: costruzione dello Heap (5) /11/.5 E. Giovannetti - AlgELab--1 - Lez. 11/11/.5 E. Giovannetti - AlgELab--1 - Lez. 5 Esecuzione di sort: costruzione dello Heap () Esecuzione di sort: costruzione dello Heap () /11/.5 E. Giovannetti - AlgELab--1 - Lez. 5 11/11/.5 E. Giovannetti - AlgELab--1 - Lez. 58 Esecuzione di sort: estrazione del massimo (1) movedown /11/.5 E. Giovannetti - AlgELab--1 - Lez. 5 11/11/.5 E. Giovannetti - AlgELab--1 - Lez. 1
11 Esecuzione di sort: estrazione del massimo () movedown /11/.5 E. Giovannetti - AlgELab--1 - Lez. 1 11/11/.5 E. Giovannetti - AlgELab--1 - Lez. Esecuzione di sort: estrazione del massimo () movedown /11/.5 E. Giovannetti - AlgELab--1 - Lez /11/.5 E. Giovannetti - AlgELab--1 - Lez.... e così via. 11/11/.5 E. Giovannetti - AlgELab--1 - Lez. 5 11
Dallo heap per la coda con priorità a un nuovo algoritmo di ordinamento. Algoritmi e Laboratorio a.a Lezioni
Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica Curriculum SR (Sistemi e Reti) Algoritmi e Laboratorio a.a. 26-7 Lezioni prof. Elio Giovannetti Parte 21 Heapsort versione 2/2/27
DettagliAlgoritmi e Laboratorio a.a Lezioni. prof. Elio Giovannetti
Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica Curriculum SR (Sistemi e Reti) Algoritmi e Laboratorio a.a. 2005-06 Lezioni prof. Elio Giovannetti Parte 7 Algoritmi di ordinamento
DettagliAlgoritmi e Laboratorio a.a Lezioni
Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica Curriculum SR (Sistemi e Reti) Algoritmi e Laboratorio a.a. 2009-10 Lezioni prof. Elio Giovannetti Lezione 22 Code con priorità
DettagliIl tipo astratto Coda con Priorità. Algoritmi e Laboratorio a.a Lezioni. Il tipo astratto Coda con Priorità
Il tipo astratto Coda con Priorità Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica Curriculum SR (Sistemi e Reti) Algoritmi e Laboratorio a.a. 2006-0 Lezioni prof. Elio Giovannetti
DettagliEsercitazione 3. Heapsort
Esercitazione Heapsort Heapsort Algoritmo di ordinamento che utilizza una struttura dati detta heap per la gestione delle informazioni Tempo di esecuzione O(n lg n) Heap (binario) = struttura dati composta
DettagliDato un insieme S di n elementi totalmente ordinato, l'algoritmo di ordinamento detto HeapSort ha le seguenti caratteristiche:
Heapsort Dato un insieme S di n elementi totalmente ordinato, l'algoritmo di ordinamento detto HeapSort ha le seguenti caratteristiche: T(n) = O(n log(n)) Alg. Ordinamento ottimale Ordina in loco (niente
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
DettagliAlgoritmi e Strutture Dati
Algoritmi e Strutture Dati Esercitazione 7 Domenico Fabio Savo 1 Esercitazione: heap Abbiamo visto come utilizzare i MAX-HEAP nell'algoritmo di ordinamento heapsort che permette di ordinare un array di
DettagliAlgoritmi e Strutture di Dati
Algoritmi e Strutture di Dati Code di priorità (Heap e heap_sort) m.patrignani Nota di copyright queste slides sono protette dalle leggi sul copyright il titolo ed il copyright relativi alle slides (inclusi,
DettagliCalcolare x n = x x x (n volte)
Calcolare x n = x x x (n volte) Abbiamo bisogno di: una variabile ris in cui ad ogni iterazione del ciclo si ha un risultato parziale, e che dopo l ultima iterazione contiene il risultato finale; una variabile
DettagliI numeri rossi sulla Mole Antonelliana a Natale. Algoritmi e Laboratorio a.a Lezioni. Le regole della riproduzione dei conigli.
I numeri rossi sulla Mole Antonelliana a Natale Università di Torino acoltà di Scienze MN Corso di Studi in Informatica Curriculum SR (Sistemi e Reti) Algoritmi e Laboratorio a.a. 29- Lezioni prof. Elio
DettagliIl problema dell'ordinamento. Algoritmi e Laboratorio a.a Lezioni. Proprietà degli algoritmi di ordinamento: stabilità.
Il problema dell'ordinamento Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica Curriculum SR (Sistemi e Reti) Algoritmi e Laboratorio a.a. 2006-07 Lezioni prof. Elio Giovannetti
DettagliIn questa lezione. Heapsort. ordinamento con complessità, nel caso peggiore, O(nlogn) [CLRS01] cap. 6 da pag. 106 a pag. 114
In questa lezione Heapsort ordinamento con complessità, nel caso peggiore, O(nlogn) [CLRS01] cap. 6 da pag. 106 a pag. 11 1 Paternità L heapsort è stato pubblicato da J. W. J. Williams nel 106. Pochi mesi
DettagliUniversità di Torino Facoltà di Scienze MFN Corso di Studi in Informatica Curriculum SR (Sistemi e Reti) Algoritmi e Laboratorio a.a.
Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica Curriculum SR (Sistemi e Reti) Algoritmi e Laboratorio a.a. 2009-10 Lezioni prof. Elio Giovannetti Lezione 7 Il problema della
DettagliLaboratorio di Algoritmi e Strutture Dati. Code con Priorità
Laboratorio di Algoritmi e Strutture Dati Code con Priorità Teresa M.A. Basile basile@di.uniba.it Dipartimento di Informatica Università degli Studi di Bari Aldo Moro Materiale di base gentilmente concesso
DettagliAlgoritmi e Strutture di Dati
Algoritmi e Strutture di Dati Capitolo 0 - Code con priorità e insiemi disgiunti This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike License. To view a copy of this license,
DettagliIn questa lezione. Heap binario heapsort. [CLRS10] cap. 6, par Prof. E. Fachini - Intr. Alg.
In questa lezione Heap binario heapsort [CLRS10] cap. 6, par. 6.1-6.4!1 Heap binari Un heap binario è una struttura dati consistente di un array visto come un albero binario. A= 5 60 65 30 50 18 40 25
DettagliIn questa lezione. Costruire un max-heap. [CLRS01] cap. 6 par Prof. E. Fachini - Intr. Alg.
In questa lezione Costruire un max-heap [CLRS01] cap. 6 par. 6.3!1 Heapsort: analisi Heapsort(A) Build-Max-Heap(A) for i = A.length downto 2 do scambia A[1] e A[i] A.heap-size = A.heap-size - 1 Max-Heapify
DettagliProgrammazione I - corso B a.a prof. Viviana Bono
Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica Programmazione I - corso B a.a. 2009-10 prof. Viviana Bono Blocco 15 Algoritmi su array: selection sort, insertion sort, fusione
DettagliLaboratorio di Algoritmi e Strutture Dati. Aniello Murano. people.na.infn.it/~murano/ Murano Aniello - Lab. di ASD Terza Lezione
Laboratorio di Algoritmi e Strutture Dati Aniello Murano http://people.na.infn.it people.na.infn.it/~murano/ Heap e Heapsort Algoritmi di ordinamento Insertion Sort Quicksort Heapsort Insertion Sort L
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
DettagliAlberi due-tre e alberi B
Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica Curriculum SR (Sistemi e Reti) Basi di Dati e Algoritmi, a.a. 2006-07 prof. Elio Giovannetti CREDITS Alcune slides con disegni
DettagliProgrammazione in Java (I modulo)
Programmazione in Java (I modulo) Lezione 14: ALGORITMI di ordinamento di array RICERCA sequenziale e binaria Array bidimensionali (matrici) Passaggio di argomenti al main Operazioni su array Un array
DettagliAlgoritmi e Strutture Dati
Heap Maria Rita Di Berardini, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino A.A. 2006/07 Heap Heap binari: definizione Un heap binario è una struttura dati composta
DettagliProva di Algoritmi e s.d. (1o anno) 17 Settembre TESTO e RISPOSTE
Prova di Algoritmi e s.d. (1o anno) 17 Settembre 2002 TESTO e RISPOSTE Esercizio 1 (punti 7 in prima approssimazione) Consideriamo alberi binari con insieme dei nodi NODI = N (l'insieme dei naturali).
DettagliAlgoritmi e Strutture Dati
Heap Maria Rita Di Berardini, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino 6 novembre 2008 Heap binari: definizione Un heap binario è una albero binario quasi completo
DettagliAlbero binario: Ogni nodo ha zero, uno, o due successori (ordinati)
Heap 1 Vittorio Maniezzo - Università di Bologna Alberi binari Albero binario: Ogni nodo ha zero, uno, o due successori (ordinati) Albero binario completo: Tutte le foglie hanno la stessa profondità e
DettagliClassificazione degli algoritmi di ordinamento. Algoritmi e Laboratorio a.a Lezioni. Esercizio 1. Si può fare meglio?
Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica Curriculum SR (Sistemi e Reti) Algoritmi e Laboratorio a.a. 2009-10 Lezioni prof. Elio Giovannetti Lezione 24 Algoritmi di ordinamento
DettagliAlgoritmi di ordinamento: Array e ricorsione
Laboratorio di Algoritmi e Strutture Dati Aniello Murano http://people.na.infn.it people.na.infn.it/~murano/ 1 Algoritmi di ordinamento: Array e ricorsione 2 1 Insertion Sort Quicksort Heapsort Indice
Dettaglilezione 9 min-heap binario Heap e Alberi posizionali generali
lezione 9 Heap e Alberi posizionali generali min-heap binario Un min-heap è un albero binario quasi completo in cui ogni nodo i diverso dalla radice soddisfa la seguente proprietà: il valore memorizzato
Dettaglid. Cancellazione del valore 5 e. Inserimento del valore 1
Esercizio1 Si consideri un albero binario non vuoto in cui a ciascun nodo v è associato un numero reale v.val. Scrivere un algoritmo che, dato in input l'albero T e un numero reale x, restituisce true
DettagliAlgoritmi di ordinamento
Capitolo 7 Algoritmi di ordinamento 7.1 Selection sort L algoritmo di ordinamento per selezione opera nel modo seguente: supponiamo che i primi k elementi siano ordinati; l algoritmo sceglie il minimo
DettagliIl tipo astratto coda con priorità: specifiche sintattiche e semantiche. Realizzazioni.
Il tipo astratto coda con priorità: specifiche sintattiche e semantiche. Realizzazioni. Algoritmi e Strutture Dati + Lab A.A. 14/15 Informatica Università degli Studi di Bari Aldo Moro Nicola Di Mauro
DettagliADT Coda con priorità
Code con priorità ADT Coda con priorità Una coda con priorità è una struttura dati dinamica che permette di gestire una collezione di dati con chiave numerica. Una coda con priorità offre le operazioni
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 m.franceschet@unich.it Algoritmi e Strutture di Dati I 2 Problema dell ordinamento
DettagliEsercizi Capitolo 10 - Code con priorità e insiemi disgiunti
Esercizi Capitolo 10 - Code con priorità e insiemi disgiunti Alberto Montresor 19 Agosto, 2014 Alcuni degli esercizi che seguono sono associati alle rispettive soluzioni. Se il vostro lettore PDF lo consente,
DettagliEsercitazione 2. Quicksort
Esercitazione 2 Quicksort Caratteristiche Algoritmo di ordinamento mediamente molto efficiente Vantaggio: ordinamento sul posto Basato sul paradigma divide et impera (come merge sort) Elemento chiave:
DettagliEsame di Algoritmi e Strutture Dati Corso di Laurea in Ingegneria Informatica Canali A-L, M-Z
Esame di Algoritmi e Strutture Dati Corso di Laurea in Ingegneria Informatica Canali A-L, M-Z Anno Accademico 2002-2003 9 luglio 2002-03 Domanda 1, punti 6 Si consideri la seguente classe Java, in cui,
DettagliGli heap. Sommario. Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino
Gli heap Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino 1 a.a. 2001/2002 Sommario Gli heap L algoritmo Heapsort Le code con priorità. 2 a.a. 2001/2002 Matteo SONZA
DettagliGli heap. Sommario. Algoritmi e Programmazione Avanzata. Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino
Gli heap Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino 1 a.a. 2001/2002 Sommario Gli heap L algoritmo Heapsort Le code con priorità. 2 a.a. 2001/2002 Politecnico
DettagliInsert sort. Considero il primo elemento a 1. cerco il minimo tra gli elementi 3...N. scambio il minimo trovato con il primo e- lemento
Insert sort Considero il primo elemento a 1 cerco il minimo tra gli elementi 2...N scambio il minimo trovato con il primo e- lemento considero ora a 2 cerco il minimo tra gli elementi 3...N scambio il
DettagliEsercizi per il corso di Algoritmi, anno accademico 2011/12
Esercizi per il corso di Algoritmi, anno accademico 2011/12 Esercizi sulla Tecnica Divide et Impera N.B. Tutti gli algoritmi vanno scritti in pseudocodice (non in Java, nè in C++, etc. ). Di tutti gli
DettagliInformatica 3. LEZIONE 16: Heap - Codifica di Huffmann. Modulo 1: Heap e code di priorità Modulo 2: Esempio applicativo: codifica di Huffmann
Informatica 3 LEZIONE 16: Heap - Codifica di Huffmann Modulo 1: Heap e code di priorità Modulo 2: Esempio applicativo: codifica di Huffmann Informatica 3 Lezione 16 - Modulo 1 Heap e code di priorità Introduzione
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
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
DettagliAlgoritmi di ordinamento: Array e ricorsione
Laboratorio di Algoritmi e Strutture Dati Aniello Murano http://people.na.infn.it people.na.infn.it/~murano/ 1 Algoritmi di ordinamento: Array e ricorsione 2 1 Indice Algoritmi di ordinamento: Insertion
DettagliFondamenti teorici e programmazione
Fondamenti teorici e programmazione FTP(A) - modb Lezione 9 di ricerca binaria F.Bonchi Dip.to Informatica Fondamenti teorici e programmazione (A) - modb a.a. 2018/19 pag. 1 liberi Un albero libero è un
DettagliProgrammazione I - corso B a.a prof. Viviana Bono
Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica Programmazione I - corso B a.a. 2009-10 prof. Viviana Bono Blocco 14 Array parzialmente riempiti. Algoritmi sugli array. Arrayparzialmente
DettagliEsercitazione 8. Corso di Tecniche di programmazione. Laurea in Ingegneria Informatica
Dipartimento di Informatica e Sistemistica Antonio Ruberti Sapienza Università di Roma Esercitazione 8 Corso di Tecniche di programmazione Laurea in Ingegneria Informatica (Canale di Ingegneria delle Reti
DettagliCode con priorità. Moreno Marzolla Dip. di Scienze dell'informazione Università di Bologna.
Code con priorità Moreno Marzolla Dip. di Scienze dell'informazione Università di Bologna marzolla@cs.unibo.it http://www.moreno.marzolla.name/ Copyright 2009 2012 Moreno Marzolla, Università di Bologna
DettagliEsercizi Capitolo 10 - Code con priorità e insiemi disgiunti
Esercizi Capitolo 10 - Code con priorità e insiemi disgiunti Alberto Montresor 27 marzo 2012 Alcuni degli esercizi che seguono sono associati alle rispettive soluzioni. Se il vostro lettore PDF lo consente,
DettagliCode a priorità Una coda a priorità è una struttura dati astratta che permette di rappresentare un insieme di elementi su cui è definita una
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:
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
DettagliAlgoritmi e Strutture Dati 1
Esonero del 31/03/2009 Compito n 1 Dimostrare che non tutte le funzioni f: ℵ 0,1 sono calcolabili. Dire se, giustificando la risposta applicando la definizione delle notazioni asintotiche, a) n log n =
DettagliHeap, heapsort e code a priorità. Paolo Camurati Dip. Automatica e Informatica Politecnico di Torino
Heap, heapsort e code a priorità Paolo Camurati Dip. Automatica e Informatica Politecnico di Torino Heap Definizione: albero binario con proprietà strutturale: quasi completo (tutti i livelli completi,
DettagliAlgoritmi di ordinamento (I parte)
(I parte) Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino Definizione formale del problema Input:! Una sequenza di n numeri Output:! Una permutazione
DettagliSchema generale di un algoritmo divide-et-impera. Algoritmi e Laboratorio a.a Lezioni. Esempio: mergesort su array. Esempio: quicksort
Schema generale di un algoritmo divide-et-impera Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica Curriculum SR (Sistemi e Reti) Algoritmi e Laboratorio a.a. 2006-07 Lezioni prof.
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
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:
DettagliAlberi ed Alberi Binari di Ricerca
Alberi ed Alberi Binari di Ricerca 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
DettagliEsercitazione 4 Heap
Esercitazione 4 Heap Corso di Fondamenti di Informatica II Algoritmi e strutture dati A.A. 2015/2016 27 Aprile 2016 Sommario Scopo della esercitazione è quello di realizzare una struttura dati per gestire
DettagliAlgoritmi di ordinamento
Algoritmi e Strutture Dati Ordinamento Dato un insieme S di n oggetti presi da un dominio totalmente ordinato, ordinare S Algoritmi di ordinamento Esempi: ordinare una lista di nomi alfabeticamente, o
DettagliHeap Ordinamento e code di priorità. Ugo de' Liguoro - Algoritmi e Sperimentazioni 03/04 - Lez. 9
Heap Ordinamento e code di priorità Heap: definizione Definizione. Uno Heap (binario) è un albero binario finito i cui vertici sono etichettati da elementi di un insieme linearmente ordinato (chiavi),
DettagliIntroduzione agli algoritmi Prova di esame del 19/9/2016 Prof.sse E. Fachini - R. Petreschi. Parte prima
Introduzione agli algoritmi Prova di esame del 19/9/2016 Prof.sse E. Fachini - R. Petreschi Parte prima 1) Si dimostri il teorema sulla limitazione inferiore per il tempo asintotico di esecuzione nel caso
DettagliOrdinamento per inserzione e per fusione
Ordinamento per inserzione e per fusione Alessio Orlandi 15 marzo 2010 Fusione: problema Problema Siano A e B due array di n A e n B interi rispettivamente. Si supponga che A e B siano ordinati in modo
DettagliEsercizi su ABR. Prof. E. Fachini - Intr. Alg.!1
Esercizi su ABR Confronto proprietà ABR e Max-Heap. Proprietà del cammino radice-foglia individuato da una ricerca. Fusione di due ABR. Il successivo calcolato dalla radice Costruzione di un ABR bilanciato
DettagliAlgoritmi e Strutture Dati. Lezione 4
Algoritmi e Strutture Dati Lezione www.iet.unipi.it/a.virdis Antonio Virdis a.virdis@iet.unipi.it Sommario Heap Ordinamento tramite Heap Soluzioni Esercizi heap 3 5 6 7 8 0 9 3 5 3 heap 3 5 6 7 8 0 9 heap
DettagliAlgoritmi e strutture dati
Algoritmi e Strutture Dati Capitolo 4 Ordinamento Ordinamento Dato un insieme S di n oggetti presi da un dominio totalmente ordinato, ordinare S Esempi: ordinare alfabeticamente lista di nomi, o insieme
DettagliFondamenti di Informatica
Algoritmi di ordinamento Gli ordinamenti interni sono fatti su sequenze in memoria centrale Fondamenti di Informatica 18. Algoritmi di ordinamento in C++ Gli ordinamenti esterni sono fatti su sequenze
DettagliAlgoritmi (9 CFU) (A.A ) Heap e Algoritmo HeapSort. Prof. V. Cutello Algoritmi 1
Algoritmi (9 CFU) (A.A. 2009-10) Heap e Algoritmo HeapSort. Prof. V. Cutello Algoritmi 1 Overview Definiamo la struttura dati heap Operazioni di costruzione e gestione di un heap Algoritmo Heapsort Code
DettagliAlgoritmi e Strutture Dati. Capitolo 4 Ordinamento: Selection e Insertion Sort
Algoritmi e Strutture Dati Capitolo 4 Ordinamento: Selection e Insertion Sort Ordinamento Dato un insieme S di n elementi presi da un dominio totalmente ordinato, ordinare S in ordine non crescente o non
DettagliProgetto Corda. Alberto Ferrari. Alberto Ferrari Ingegneria dell'informazione, UniPR. 18/12/2017 Progetto Corda
Progetto Corda Alberto Ferrari Alberto Ferrari Ingegneria dell'informazione, UniPR file:///e:/cordanoweb/lez/array.html#3 1/33 Array (ordinamento) 2/33 file:///e:/cordanoweb/lez/array.html#3 2/33 Sort
DettagliMoltiplicazione veloce di interi
Moltiplicazione veloce di interi Ogni numero intero w di n cifre può essere scritto come 10 n/2 w s + w d w s indica il numero formato dalle n/2 cifre più significative di w w d denota il numero formato
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,
DettagliAlgoritmi di Ordinamento
Algoritmi di Ordinamento 1 Algoritmi di ordinamento Selection Sort Quick Sort Lower bound alla complessità degli algoritmi di ordinamento Statistiche di ordine 2 Selection Sort SelectionSort(dati[]) {
DettagliCasi di prova. Il problema dell ordinamento. Casi di prova. Casi di prova. Casi di prova
Casi di prova Casi di prova Quando si vuole testare un algoritmo si devono costruire vari casi di prova. Invece di eseguire il programma più volte si può costruire un file di dati contenente tutti i casi
DettagliAlgoritmi e Strutture Dati
Algoritmi e Strutture Dati Capitolo 4 Ordinamento Ordinamento Dato un insieme S di n oggetti presi da un dominio totalmente ordinato, ordinare S Esempi: ordinare una lista di nomi alfabeticamente, o un
DettagliAlgoritmi di ordinamento
Algoritmi di ordinamento Il problema Vogliamo ordinare un array monodimensionale in modo crescente per il caso decrescente valgono le stesse considerazioni Vari algoritmi possibili Diverse caratteristiche
DettagliAlgoritmi di ordinamento
Algoritmi di ordinamento! Selection Sort! Quick Sort! Lower bound alla complessità degli algoritmi di ordinamento Ordinamento 1 Selection Sort SelectionSort(dati[]) { for (i=0; idati.length-1; i++) { min
DettagliEsercizio. 2 i=i*2) j=j*2)
Esercizio 1 Esercizio 2 i=i*2) j=j*2) Soluzione Il frammento è composto da due parti quasi identiche. L unica differenza è il modo in cui crescono i contatori. Nella prima parte la crescita è lineare mentre
DettagliEsame di Algoritmi e Strutture Dati Corso di Laurea in Ingegneria Informatica Canali A-L, M-Z 28 giugno 2005 tempo a disposizione: 2 ore
Domanda 1, punti 6 Esame di Algoritmi e trutture Dati Corso di Laurea in Ingegneria Informatica Canali A-L, M- 8 giugno 00 tempo a disposizione: ore Con riferimento all algoritmo mistero1, determinarne
DettagliDivide et impera (Divide and Conquer) Dividi il problema in sottoproblemi piu` semplici e risolvili ricorsivamente
Divide et impera (Divide and Conquer) Dividi il problema in sottoproblemi piu` semplici e risolvili ricorsivamente Divide et impera - Schema generale Divide-et-impera (P, n) if n k then risolvi direttamente
DettagliT 1 =1. n 4 n log n. T n =3 T. Esercizio 1 (6 punti) A.A Esame di Algoritmi e strutture dati 18 luglio 2008
A.A. 00 0 Esame di Algoritmi e strutture dati luglio 00 Esercizio (6 punti) Risolvere con almeno due metodi diversi la seguente relazione di ricorrenza T = T n = T n n log n A.A. 00 0 Esame di Algoritmi
DettagliTony Hoare: inventore del Quicksort.
Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica Curriculum SR (Sistemi e Reti) Algoritmi e Laboratorio a.a. 2006-07 Lezioni prof. Elio Giovannetti Parte 9 Il Quicksort versione
DettagliIn questa lezione. Code di priorità. [CLRS01] cap. 6 da pag. 114 a pag Prof. E. Fachini - Intr. Alg. lunedì 17 settembre 2012
In questa lezione Code di priorità [CLRS01] cap. 6 da pag. 114 a pag. 117 1 Coda di priorità: cos è? Una coda di priorità è una struttura dati dinamica che permette di gestire dei dati con chiave numerica,
DettagliAlgoritmi di ordinamento
Algoritmi di ordinamento Selection Sort Quick Sort Lower bound alla complessità degli algoritmi di ordinamento giu 03 ASD 1 Selection Sort SelectionSort(dati[]) { for (i=0; i
DettagliAlgoritmi e Strutture Dati. HeapSort
Algoritmi e Strutture Dati HeapSort Selection Sort: intuizioni L algoritmo Selection-Sort scandisce tutti gli elementi dell array a partire dall ultimo elemento fino all inizio e ad ogni iterazione: Viene
DettagliHeap, heap indiretti e code di priorità
Heap, heap indiretti e code di priorità Paolo Boldi 15 marzo 02 1 Introduzione Uno heap (letteralmente: mucchio) è (almeno idealmente) un albero binario i cui nodi contengono dei dati, ciascuno caratterizzato
DettagliCamil Demetrescu, Irene Finocchi, Giuseppe F. Italiano. Usa la tecnica del divide et impera:
MergeSort Usa la tecnica del divide et impera: 1 Divide: dividi l array a metà 2 Risolvi i due sottoproblemi ricorsivamente 3 Impera: fondi le due sottosequenze ordinate 1 Esempio di esecuzione 7 2 4 5
DettagliDipartimento di Elettronica, Informazione e Bioingegneria API 2013/4
Dipartimento di Elettronica, Informazione e Bioingegneria API 2013/4 Heap sort; ordinamento senza confronti @ G. Gini 2013 Ordinamento per confronti: complessita' Esistono altri algoritmi di ordinamento
DettagliRicerca in una sequenza ordinata
Ricerca su array ordinata Ricerca in una sequenza ordinata Se la sequenza è ordinata posso sfruttare l ordinamento per rendere più efficiente la ricerca, terminando se l elemento corrente risulta maggiore
DettagliOrdinamenti. Grafo : definizione. Un grafo G = (V,E)è composto da: V: insieme di vertici E V V: insieme di archi (edge) che connettono i vertici
Ordinamenti 1 Vittorio Maniezzo Università di Bologna Grafo : definizione Un grafo G = (V,E)è composto da: V: insieme di vertici E V V: insieme di archi (edge) che connettono i vertici Un arco a= {u,v}
DettagliAnalisi di algoritmi e di problemi
Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica Curriculum SR (Sistemi e Reti) Algoritmi e Laboratorio a.a. 2006-07 Lezioni prof. Elio Giovannetti Analisi di algoritmi e di problemi
DettagliALGORITMI DI ORDINAMENTO E RICERCA BINARIA. Docente: Giorgio Giacinto AA 2008/2009. problema dell ordinamento in modi diversi
Università degli Studi di Cagliari Corso di Laurea Specialistica in Ingegneria per l Ambiente ed il Territorio Corso di Laurea Specialistica in Ingegneria Civile - Strutture FONDAMENTI DI INFORMATICA 2
DettagliAlgoritmi di ordinamento
Algoritmi di ordinamento Il problema Vogliamo ordinare un array monodimensionale in modo crescente per il caso decrescente valgono le stesse considerazioni Vari algoritmi possibili Diverse caratteristiche
DettagliNozioni di base (II Parte)
Nozioni di base (II Parte) 1 Ricorsione [GTG14, Par. 5.1-5.4 and 13.1] Algoritmo Ricorsivo: algoritmo che invoca se stesso (su istanze sempre più piccole) sfruttando la nozione di induzione. La soluzione
DettagliAlgoritmi e Strutture Dati & Laboratorio di Algoritmi e Programmazione
Algoritmi e Strutture Dati & Laboratorio di Algoritmi e Programmazione Appello del 24 Gennaio 2007 Esercizio 1 (ASD) 1. Sia T (n) = T (n/6) + T (n/3) + Θ(n). Considerare ciascuna delle seguenti affermazioni
DettagliAlberi binari di ricerca
Alberi binari di ricerca Gli alberi binari di ricerca sono ottime strutture dati per memorizzare coppie di elementi (k, e) chiave elemento di un dizionario. Un albero binario di ricerca T è un albero binario
DettagliOrdinamento. Lorenzo Donatiello,Moreno Marzolla Dip. di Scienze dell'informazione Università di Bologna
Ordinamento Lorenzo Donatiello,Moreno Marzolla Dip. di Scienze dell'informazione Università di Bologna Original work Copyright Alberto Montresor, University of Trento (http://www.dit.unitn.it/~montreso/asd/index.shtml)
Dettagli