Dipartimento di Elettronica, Informazione e Bioingegneria API 2013/4

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Dipartimento di Elettronica, Informazione e Bioingegneria API 2013/4"

Transcript

1 Dipartimento di Elettronica, Informazione e Bioingegneria API 2013/4 Heap sort; ordinamento senza G. Gini 2013

2 Ordinamento per confronti: complessita' Esistono altri algoritmi di ordinamento per confronto di complessita ottima O(nlog(n)) che operano sul posto? mergesort richiede memoria aggiuntiva QuickSort opera sul posto ma può essere Θ(n 2 ) Si', heapsort (ordinamento del mucchio) (Williams, 1964)

3 Idea di heapsort Modificando insertion sort, che e' di complessita' O(n 2 ), abbiamo ottenuto mergesort, di complessita' O(nlog(n)) abbiamo reso logaritmico, anziche' lineare, il costo di localizzare la posizione dove inserire il nuovo elemento nel sottovettore gia' ordinato. Consideriamo ora selection sort: cosa e' che lo rende quadratico? Il fatto che ad ogni iterazione il costo per identificare il nuovo elemento minimo e' lineare: sarebbe possibile renderlo logaritmico?

4 Verso heapsort nel primo ciclo di selection sort, tramite n-1 confronti, viene identificato l'elemento minimo del vettore cosa potremmo fare in alternativa con n-1 confronti? 1. dividiamo gli n elementi in coppie 2. con n/2 confronti si puo' stabilire l'elemento minimo di ogni coppia, ottenendo n/2 elementi 3. i passi (1) e (2) possono essere iterati fino ad ottenere l'elemento minimo del vettore, piu' un albero di relazioni tra gli elementi del vettore via via selezionati il tutto con n/2 + n/4 + n/ = n-1 confronti l'albero cosi' costruito ha altezza log(n)

5 HEAP come vettore per mantenere questa organizzazione degli elementi del vettore che ne riflette gli ordinamenti parziali e' necessario mantenere la struttura dati ad albero questa struttura dati e' chiamata heap. Il vettore stesso puo' essere utilizzato per rappresentare un albero binario. Un albero binario completo di n elementi puo' essere rappresentato in un array (con indici da 0 a n-1) dove i figli sinistro e destro del nodo i si trovano rispettivamente agli indici 2*i+1 e 2*i+2

6 Definizione di heap Un vettore, che può essere interpretato come albero binario B. Ogni nodo di B può anche rappresentare un elemento di una coda con priorità. C è un ordinamento parziale sui valori nei nodi Min-heap: i valori dei nodi sono minori dei valori sui nodi figli ovvero, A[Parent(i)] A[i] : heap crescente, cioè il padre contiene valore minore o uguale a quello dei figli. La radice contiene il valore minimo. Max-heap: i valori dei nodi sono maggiori dei valori sui nodi figli ovvero, A[Parent(i)] A[i] : heap descrescente, cioè il padre contiene un valore maggiore o uguale a quello dei figli. La radice contiene il valore massimo.

7 Esempio di min-heap e max-heap Min-heap Max-heap

8 Min-HEAP: esempio (con array da 0) vettore = [ 4, 12, 6, 14, 22, 18, 16, 44, 55, 23, 42, 94, 19, 26, 67 ] v[0]=4 v[1]=12 v[2]=6 v[3]=14 v[4]=22 v[5]=18 v[6]=16 v[7] =44 v[8] =55 v[9] =23 v[10] =42 v[11] =94 v[12] =19 v[13] =26 v[14] =67 i 0 i n/2-1 : v[i] v[2*i+1] v[i] v[2*i+2] - figlio sinistro e figlio destro i 0 i n-1 : v[0] v[i]

9 Esempio max (con array da 1) Un albero binario può essere rappresentato in un array, con # elementi heap # elementi array A[1] contiene la radice Parent (i) return _i/2_ Left (i) return 2*i Right (i) return 2*i + 1 In un max heap, A[Parent(i)] A[i] In un min heap A[Parent(i)] A[i]

10 HEAPSORT: idea dell ordinamento Se usiamo un max heap: 1. ogni volta estraiamo il massimo elemento (la radice) e la poniamo in fondo 2. Ripristiniamo un max heap con un elemento in meno 1. Max-heapify - mantiene la proprietà di maxheap 2. Build-Max-Heap, costruisce un max-heap da zero

11 max-heapify Heapify( A,i): ripristina la proprietà di Heap nel sottoalbero radicato in i assumendo che i suoi sottoalberi destro e sinistro siano già degli Heap Input Un array A e un indice i Gli alberi binari con radici Left(i) e Right(i) sono max-heap Ma l albero binario con radice i non è un max-heap Obiettivo Ripristinare la proprietà di max-heap sul sottoalbero con radice i Far scendere l'elemento A[i] nell'array fino alla posizione che gli compete

12 Esempio di Heapify(a,i) Assumiamo di avere due heap H 1 e H 2 con radici A[2i] e A[2i+1] e un nuovo elemento v in posizione i A[2i] A[i]= v A[2i+1] H 1 H 2

13 Esempio di Heapify(a,i) Assumiamo che il valore v in posizione i violi la proprietà di heap ovvero, v<a[2i] oppure v<a[2i+1] A[2i] = x A[i]= v A[2i+1] H 1 H 2

14 Esempio di Heapify(a,i) Scambia v in posizione i con la più grande delle radici Supponiamo ad esempio che A[2i] A[2i+1] A[i]= v A[2i] = x A[2i+1] H 1 H 2

15 Esempio di Heapify(a,i) Scambia A[i] con A[2i] A[2i]=v A[i]= x A[2i+1] H 1 H 2

16 Esempio di Heapify(A,i) Applica ricorsivamente la procedura Heapify sul sottoalbero la cui radice è stata scambiata In questo caso al sottoalbero di radice 2i, ovvero Heapify(A,2i) A[i]= x Heapify(A,2i) A[2i+1] H 1 H 2

17 Pseudocodice max-heapify max-heapify (A,i) l = left(i) //indirizzo sottoalbero sinistro r = right(i) //indirizzo sottoalbero destro if (l A.heapsize and A[l]>A[i]) // A.heap-size il numero di elementi dello heap then max = l else max = i if (r A.heapsize and A[r]>A[max]) then max = r if max i then swap(a, i, max) max-heapify (A, max)

18 Procedura build-max-heap() Principio generale Sia A[1..N] un array da ordinare I nodi A[ N/2 +1..N] sono foglie dell'albero e quindi heap di un elemento da cui iniziare La procedura build-max-heap() attraversa i restanti nodi dell'albero ed esegue max-heapify() build-max-heap(a) A.heapsize <-A.length //A.lenght numero elementi array for(i=a.length/2; i>=1; i--) max-heapify(a, i);

19 Heapsort con max heap Mettiamo l elemento più grande, che è il primo dell array, in fondo alla parte di array da ordinare, lo heap Lo heap si decrementa di 1, Chiama max-heapify( ) su n -1 elementi, per ricostruire un max heap heapsort (A, n) // array di n elementi build-max-heap(a) for (i=n; n>=2; i--) swap(a, 1, i) A.heapsize <- A.heapsize-1 max-heapify(a, 1)

20 esempio

21 Animazione Heapsort Animazione del heapsort da Wikipedia

22 Complessità di heapsort Max-heapify, è invocato n volte ed ogni sua chiamata, nel caso medio, è O(log n) Build-Max-Heap è O(n) Heapsort è quindi O(nlog n) è in place

23 Heap per gestire code Code di priorità Esempio: sistema operativo multitasking, in cui i job in esecuzione hanno diverse priorità Nello heap si memorizzano insiemi di oggetti a cui è associata una priorità Con la procedura max-heap si restituisce l elemento di priorità maggiore Implementazione: max-heap

24 Operazioni su Code di Max Priorità insert(s, x) inserisce l'elemento x nella coda maximum(s) restituisce l'elemento in S con priorità più alta extract-max(s): rimuove e restituisce l'elemento in S con priorità più alta increase-priority(s, x, k): aumenta la priorità di x al nuovo valore k, dove k>x.p

25 Sommario Heap: albero binario completo che soddisfa la heap property Due implementazioni Alberi binari Array Tre procedure principali (per max o min) Max-heapify: mantiene la proprietà di max-heap Build-Max-Heap: costruisce un max-heap da zero Heapsort: ordina un array sul posto Code di priorità Memorizzano insiemi di oggetti con una priorità Implementate tipicamente con una max-heap

26 Altri metodi di sorting È possibile fare sorting senza usare confronti? Se sì, è possibile migliorare la complessità? Abbiamo il limite inferiore teorico Ω(n log n) sugli algoritmi per confronto. Ma se non facciamo confronti, il limite teorico non si applica. Si applica comunque Ω(n). È possibile avere algoritmi Θ(n)?

27 Counting sort Ipotesi fondamentale: i valori da ordinare sono numeri naturali compresi tra 0 e una certa costante k Idea di base: se nell'array ci sono m e valori piu piccoli di un certo elemento e (il cui valore è v e ) nell'array ordinato l'elemento e sarà in posizione m e +1 quindi, basta contare quante "copie" dello stesso valore v e sono contenute nell'array usiamo questa informazione per determinare, per ogni elemento e (con 0 v e k), quanti elementi ci sono più piccoli di e dobbiamo tenere conto del fatto che nell'array ci possono essere elementi ripetuti

28 Algoritmo counting sort facciamo una scansione di A e riempiamo il vettore B, lungo k, del numero di occorrenze del valore A(i) per tutti gli n elementi di A. Poi scandiamo B per ogni i (da 1 a k), e scriviamo il valore i nel vettore A per B(i) volte.

29 Counting sort pseudocodice COUNTING-SORT (A[ ], k, n) //k è il massimo dei valori di A j <-1 crea B [1 k] //B conterrà gli elemeni contati for i <- 0 to k do B[i] := 0 // inizializza B for i := 1 to n do B[A[i]] := B[A[i]] + 1 //B[i] ora contiene il numero di elementi uguali a i for i := 1 to k do while B[i] >0 do A[j] <-i j<-j+1 B[i] := B[i] - 1

30 Esempio di counting sort A= [ ] ha lunghezza 8 B ha pure lunghezza 8 Counting-sort (A, 5, 8) Dopo il secondo for B contiene in ogni posizione il numero di volte che un valore da 0 a k compare in A B= [ ] Alla fine A = [ ]

31 Complessità di counting sort La procedura scandisce un vettore lungo n ed un vettore lungo k, quindi il tempo è O(n+k) La complessità è data dai cicli for (k volte uno, n volte l altro) e dal ciclo while eseguito k volte Se k è O(n), la complessità è O(n), cioè è lineare O(n) non è in contrasto con il limite inferiore Ω(n log(n)) sul numero dei confronti. Infatti counting sort non effettua confronti fra gli elementi di A. Counting sort ha complessità inferiore sia a mergesort che a heap-sort perché fa assunzioni sui valori da ordinare.

32 Ordinare per distribuzione Come si fa a ordinare un mazzo di carte? per prima cosa si separano cuori, fiori, quadri e picche, e per fare questo non si opera alcun confronto. I confronti entrano in gioco per ordinare tra loro carte dello stesso seme. utilizzando insertion sort e' possibile ordinare "per distribuzione". Vediamo radix sort

33 Ordinare per distribuzione L algoritmo: distribuisco le carte secondo il loro valore indipendentemente dal seme, in 13 pacchetti diversi e ordinati tra loro. Il pacchetto dei 2 segue quello degli assi e precede quello dei 3. Poi raccolgo i pacchetti mantenedo il loro ordine. Poi distribuisco le carte cosi' raccolte in base al seme, in 4 pacchetti diversi e ordinati tra loro. Poi raccolgo i pacchetti nel loro ordine: il mazzo risulta ordinato. Note: Per ottenere il mazzo ordinato devo distribuire prima in base alla cifra piu leggera (il numero), poi in base a quella piu pesante (il seme).

34 RADIX sort Abbiamo valori numerici da ordinare RADIX sort esegue gli ordinamenti per posizione delle cifre, partendo dalla cifra meno significativa. É stato usato per ordinare le schede perforate. Ora è usato per ordinare record di informazioni con più campi chiave.

35 Esempio su decimali 1 passo 2 passo 3 passo 4 passo risultato

36 RADIX SORT (Distribution Sort) radixsort (A, d) // A array di n elementi, d cifra di ordine più alto for i <- 1 to d do usa un ordinamento stabile pe ordinare A sulla cifra i

37 RADIXSORT: complessita Il tempo di esecuzione dipende dall algoritmo stabile che si utilizza Se ogni numero si trova fra 0 e k-1, e k non è troppo grande, counting sort è migliore. Ogni passagio su n numeri di d cifre richiede un tempo Θ(n+k); poichè ci sono d passate, il tempo di radix sort è Θ(d (n+k)) Se d è costante e k = O(n) radix sort è eseguito in tempo lineare. Radix sort è da preferire ad un algoritmo basato su confronti, come Quicksort? In realtà le costanti nascoste nella notazione asintotica contano. Radix sort ha meno passi ma più pesanti, Inoltre non è detto che ordini sul posto (dipende dall algoritmo scelto).

38 Altro metodo di distribuzione Bucket sort se l'intervallo dei valori da ordinare è noto a priori, è diviso in intervalli più piccoli, detti bucket (cesto). Ciascun valore dell array è quindi inserito nel bucket a cui appartiene, i valori all'interno di ogni bucket vengono ordinati l'algoritmo si conclude con la concatenazione dei valori contenuti nei bucket.

39 Bucket sort BucketSort(A, n) //A array di n elementi, ognuno fra 0 e 1 for i 1 to length[a] do inserisci A[i] nella lista B(n(A[i]) //B array ausiliario di liste concatenate dei bucket for i 1 to n-1 do ordina(b[i]) con insertion sort return concatena(b[0], B[1],..B[n-1]) // restituisce la concatenazione dei bucket

40 esempio (a) l array (b) l array di liste concatenate dopo il secondo ciclo for

41 Bucket sort - complessità La complessità del bucket sort è O(n) per tutti i cicli, a parte l'ordinamento dei singoli bucket. Resta da valutare il tempo dovuto alle chiamate di insertion sort nel secondo for Considerando la variabile casuale n i che è il numero di elementi del bucket B[i], poiché insertion sort è quadratico abbiamo T(n) = Θ(n) + Σ O(n i2 ) Si dimostra che questa equazione vale Θ(n) + n O( 2-1/n) = Θ(n) Quindi il tempo di esecuzione è lineare

42 RankSort e sorting parallelo Strategia dell algoritmo di Rank Sort: Conta il numero di elementi minori di a nell array Hai quindi la posizione di a nell array ordinata Ripeti per tutti gli elementi dell array Complessità risulta n*(n-1), O(n 2 ).

43 RankSort Versione sequenziale void ranksort(int a[],int sorted[], int n) { /* works well only if there are no repetitions of the numbers in the array */ for (int i=0; i<n; i+=1) { int rank = 0; for (int j=0; j<n; j+=1) if (a[i] > a[j]) rank += 1; sorted[rank] = a[i]; } }

44 RankSort - parallelo utilizzando n processori: void ranksort(int a[],int sorted[], int n) { /* works well only if no repetitions */ forall (int i=0; i<n; i+=1) { /* l istruzione parallela forall distribuisce * l esecuzione su n processori */ int rank = 0; for (int j=0; j<n; j+=1) if (a[i] > a[j]) rank += 1; sorted[rank] = a[i]; } } Complessità parallela O(n)

45 Sorting esterno Grandi quantità di dati i dati si trovano su un file ad accesso sequenziale Occorrono 3 files su cui distribuire le sottosequenze durante l ordinamento fusione diretta (ispirato a mergesort) si divide la sequenza a da ordinare in due meta, b e c; si fa il merging fra b e c combinando gli elementi semplici in coppie ordinate; si chiama questa sequenza a e si ricomincia facendo il merging delle coppie per ottenere gruppi di 4, e cosi via fino ad ordinare l intera sequenza.

46 Esempio Sorting per fusione diretta a = volta b = c = a = volta b = c = a = volta b = c = a =

47 Pseudocodice fusione diretta Ordinaperfusione su<-t p<-1 repeat if su then i<-1, j<-n, k<-n+1,l<-2*n else k<-1, l<-n, i<-n+1,j<-2*n fondi sequenze i e j in k Copia coda di i in k Copia coda j in k su <- not su p <- 2*p until p = n

48 Complessità fusione diretta La lunghezza p della sequenza ordinata viene raddoppiato ad ogni passata Ordinamento termina se p n Servono log(n) passate Il numero totale di spostamenti è n log(n)

49 Alcuni confronti

50 Heapsort vs quicksort

51 riassunto Nome Migliore Medio Peggiore Memoria Stabile In place Bubble sort O(n) O(n 2 ) O(n 2 ) O(1) Sì Sì Bucket sort O(n+m) O(n+m) O(n+m) O(m) Si No Counting sort O(n+k) O(n+k) O(n+k) O(n+k) Sì No Heap sort O(nlog n) O(nlog n) O(nlog n) O(1) No Sì Insertion sort O(n) O(n + d) O(n 2 ) O(1) No Sì Merge sort O(nlog n) O(nlog n) O(nlog n) O(n) Sì No Quicksort O(nlog n) O(nlog n) O(n 2 ) O(log n) No Sì Radix sort O(n k/s) O(n k/s) O(n k/s) O(n) Sì Selection sort O(n 2 ) O(n 2 ) O(n 2 ) O(1) No Sì Shell sort O(n 1.5 ) O(1) No Sì Stupid sort O(1) O(n n!) illimitato O(1) No Sì

52 Esercizi da fare su heap Considerare i seguenti valori memorizzati in un vettore, Rappresenta una heap? (motivare opportunamente la risposta) Implementare una coda FIFO utilizzando un heap.

Problemi di ordinamento

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

Dettagli

Sommario. Algoritmi di ordinamento lineari: CountingSort. BucketSort. RadixSort

Sommario. Algoritmi di ordinamento lineari: CountingSort. BucketSort. RadixSort Sommario Algoritmi di ordinamento lineari:! CountingSort! BucketSort! RadixSort 1 Ordinamento in tempo lineare. Il limite inferiore Ω(n log n) vale per tutti gli algoritmi di ordinamento generali, nel

Dettagli

Algoritmi e Strutture Dati

Algoritmi 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

Dettagli

Algoritmi e Strutture Dati

Algoritmi 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

Dettagli

ADT Coda con priorità

ADT 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

Dettagli

Esercitazione 3. Heapsort

Esercitazione 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

Dettagli

In 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. 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

Dettagli

In questa lezione. Heap binario heapsort. [CLRS10] cap. 6, par Prof. E. Fachini - Intr. Alg.

In 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

Dettagli

Laboratorio 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. 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

Dettagli

Dato un insieme S di n elementi totalmente ordinato, l'algoritmo di ordinamento detto HeapSort ha le seguenti caratteristiche:

Dato 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

Dettagli

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

Gli 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

Dettagli

Algoritmi di ordinamento

Algoritmi 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

Dettagli

Gli heap. Sommario. Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino

Gli 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

Dettagli

Code 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 Code a priorità Una coda a priorità è una struttura dati astratta che permette di rappresentare un insieme di elementi su cui è definita una relazione d ordine. Sono definite almeno le seguenti operazioni:

Dettagli

Ordinamenti per confronto: albero di decisione

Ordinamenti per confronto: albero di decisione Ordinamenti per confronto: albero di decisione Albero di decisione = rappresentazione grafica di tutte le possibili sequenze di confronti eseguite da un algoritmo assegnato di ordinamento per confronto

Dettagli

In 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 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

Dettagli

Algoritmi di ordinamento (I parte)

Algoritmi 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

Dettagli

Heap, 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, 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,

Dettagli

ALGORITMI Docente: Prof. Domenico Cantone

ALGORITMI Docente: Prof. Domenico Cantone CORSO SPECILE DI DURT NNULE PER IL CONSEGUIMENTO DELL BILITZIONE LL INSEGNMENTO NELL SCUOL SECONDRI DI I e II GRDO Indirizzo Fisico - Informatico - Matematico a.a. 00/07 - Classe - Informatica LGORITMI

Dettagli

In 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 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,

Dettagli

Algoritmi e Strutture Dati. HeapSort

Algoritmi 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

Dettagli

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

Algoritmi e Strutture di Dati I 1. Algoritmi e Strutture di Dati I Massimo Franceschet   francesc Algoritmi e Strutture di Dati I 1 Algoritmi e Strutture di Dati I Massimo Franceschet http://www.sci.unich.it/ francesc m.franceschet@unich.it Algoritmi e Strutture di Dati I 2 Problema dell ordinamento

Dettagli

Albero binario: Ogni nodo ha zero, uno, o due successori (ordinati)

Albero 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

Dettagli

Spesso sono definite anche le seguenti operazioni:

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

Dettagli

Algoritmi e Strutture Dati. HeapSort

Algoritmi 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

Dettagli

Algoritmi di ordinamento: Array e ricorsione

Algoritmi 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

Dettagli

Algoritmi di ordinamento

Algoritmi 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

Dettagli

Algoritmi e strutture dati

Algoritmi 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

Dettagli

Ordinamento per inserzione e per fusione

Ordinamento 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

Dettagli

Esercizi per il corso di Algoritmi, anno accademico 2011/12

Esercizi 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

Dettagli

Code a priorità. Progettazione di Algoritmi Matricole congrue a 1. Docente: Annalisa De Bonis

Code a priorità. Progettazione di Algoritmi Matricole congrue a 1. Docente: Annalisa De Bonis Code a priorità Progettazione di Algoritmi 2018-19 Matricole congrue a 1 Docente: Annalisa De Bonis 26 Coda a priorità Una coda a priorità è un collezione di elementi a ciascuno dei quali è assegnata una

Dettagli

Introduzione 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 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

Dettagli

Calcolo Parallelo e Distribuito

Calcolo Parallelo e Distribuito Calcolo Parallelo e Distribuito 1 Problema Progettare un algoritmo parallelo per l ordinamento di un vettore su un calcolatore MIMD a memoria distribuita con p processori Sorting Bitonico A. Murli Calcolo

Dettagli

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati Algoritmi e Strutture Dati Capitolo 4 Ordinamento: Quicksort (*) e metodi di ordinamento lineari Punto della situazione Problema dell ordinamento: Lower bound (n log n) Upper bound O(n log n) Algoritmi

Dettagli

Algoritmi e Strutture di Dati

Algoritmi 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,

Dettagli

Laboratorio di Algoritmi e Strutture Dati. Code con Priorità

Laboratorio 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

Dettagli

Quick Sort. PARTITION(A,p,r) risistema il sottoarray A[p...r] e riporta l indice q:

Quick Sort. PARTITION(A,p,r) risistema il sottoarray A[p...r] e riporta l indice q: Quick Sort - Ordinamento in loco - Tempo di esecuzione nel caso peggiore: Θ(n 2 ) - Tempo di esecuzione nel caso medio: Θ(n lg n) - I fattori costanti nascosti nella notazione Θ sono abbastanza piccoli

Dettagli

Algoritmi e Strutture di Dati

Algoritmi 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,

Dettagli

Algoritmi e Strutture Dati

Algoritmi 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

Dettagli

Heap e code di priorità

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

Dettagli

Algoritmi (9 CFU) (A.A ) Heap e Algoritmo HeapSort. Prof. V. Cutello Algoritmi 1

Algoritmi (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

Dettagli

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati Algoritmi e Strutture Dati Capitolo 4 Ordinamento: Quicksort (*) e metodi di ordinamento lineari Punto della situazione Problema dell ordinamento: Lower bound (n log n) Upper bound O(n log n) Algoritmi

Dettagli

Il tipo astratto coda con priorità: specifiche sintattiche e semantiche. Realizzazioni.

Il 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

Dettagli

Divide 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 (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

Dettagli

Esercizi su ABR. Prof. E. Fachini - Intr. Alg.!1

Esercizi 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

Dettagli

Prova di Algoritmi e s.d. (1o anno) 17 Settembre TESTO e RISPOSTE

Prova 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).

Dettagli

Esercizi di Algoritmi e Strutture Dati

Esercizi di Algoritmi e Strutture Dati Esercizi di Algoritmi e Strutture Dati Moreno Marzolla marzolla@cs.unibo.it Ultimo aggiornamento: 3 novembre 2010 1 Trova la somma/1 Scrivere un algoritmo che dati in input un array A[1... n] di n interi

Dettagli

Calcolo Parallelo e Distribuito

Calcolo Parallelo e Distribuito Calcolo Parallelo e Distribuito 1 Problema Progettare un algoritmo parallelo per l ordinamento di un vettore su un calcolatore MIMD a memoria distribuita con p processori Sorting Bitonico A. Murli Calcolo

Dettagli

Esercizi Capitolo 10 - Code con priorità e insiemi disgiunti

Esercizi 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,

Dettagli

Calcolo Parallelo e Distribuito. a.a

Calcolo Parallelo e Distribuito. a.a Calcolo Parallelo e Distribuito a.a. 2005-2006 1 Problema Progettare un algoritmo parallelo per l ordinamento di un vettore su un calcolatore MIMD a memoria distribuita con p processori Sorting Bitonico

Dettagli

Esercizi Capitolo 10 - Code con priorità e insiemi disgiunti

Esercizi 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,

Dettagli

ALGORITMI DI ORDINAMENTO E RICERCA BINARIA. Docente: Giorgio Giacinto AA 2008/2009. problema dell ordinamento in modi diversi

ALGORITMI 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

Dettagli

Fondamenti di Informatica. Algoritmi di Ricerca e di Ordinamento

Fondamenti di Informatica. Algoritmi di Ricerca e di Ordinamento Fondamenti di Informatica Algoritmi di Ricerca e di Ordinamento 1 Ricerca in una sequenza di elementi Data una sequenza di elementi, occorre verificare se un elemento fa parte della sequenza oppure l elemento

Dettagli

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano. Usa la tecnica del divide et impera:

Camil 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

Dettagli

Algoritmi e Strutture Dati. Capitolo 4 Ordinamento: Selection e Insertion Sort

Algoritmi 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

Dettagli

Sommario. Un algoritmo di ordinamento di complessità lineare: CountingSort. [CLRS10] cap. 8 par.8.2

Sommario. Un algoritmo di ordinamento di complessità lineare: CountingSort. [CLRS10] cap. 8 par.8.2 Sommario Un algoritmo di ordinamento di complessità lineare: CountingSort [CLRS10] cap. 8 par.8.2!1 Ordinamento in tempo lineare. Il limite inferiore Ω(n log n) vale per tutti gli algoritmi di ordinamento

Dettagli

Algoritmi di ordinamento: Array e ricorsione

Algoritmi 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

Dettagli

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: 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

Dettagli

ALGORITMI E STRUTTURE DATI

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

Dettagli

Esercizio. 2 i=i*2) j=j*2)

Esercizio. 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

Dettagli

QUICKSORT. Basato sul paradigma divide-et-impera (come MERGE-SORT)

QUICKSORT. Basato sul paradigma divide-et-impera (come MERGE-SORT) QUICKSORT Basato sul paradigma divide-et-impera (come MERGE-SORT) Divide: stabilisce un valore di q tale da dividere l array A[p.. r] in due sottoarray non vuoti A[p.. q] e A[q+1.. r], dove ogni elemento

Dettagli

Heap Ordinamento e code di priorità. Ugo de' Liguoro - Algoritmi e Sperimentazioni 03/04 - Lez. 9

Heap 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),

Dettagli

Algoritmo di ordinamento sul posto che ha tempo di esecuzione :

Algoritmo di ordinamento sul posto che ha tempo di esecuzione : QuickSort Algoritmo di ordinamento sul posto che ha tempo di esecuzione : - O(n 2 ) nel caso peggiore - O(n log n) nel caso medio Nonostante le cattive prestazioni nel caso peggiore, rimane il miglior

Dettagli

Code 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. 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

Dettagli

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati Algoritmi di Ordinamento Maria Rita Di Berardini, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino 13 novembre 2008 Il problema dell ordinamento Il problema dell ordinamento

Dettagli

Algoritmi e Strutture Dati

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

Dettagli

Ordinamenti. Vittorio Maniezzo Università di Bologna

Ordinamenti. Vittorio Maniezzo Università di Bologna 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}

Dettagli

Algoritmo di ordinamento sul posto che ha tempo di esecuzione :

Algoritmo di ordinamento sul posto che ha tempo di esecuzione : QuickSort Algoritmo di ordinamento sul posto che ha tempo di esecuzione : O(n2 ) nel caso peggiore O(n log n) nel caso medio Nonostante le cattive prestazioni nel caso peggiore, rimane il miglior algoritmo

Dettagli

Ordinamenti. 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. 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}

Dettagli

Sommario. Ordinamento. Selection Sort Bubble Sort/ Shaker Sort Shell Sort

Sommario. Ordinamento. Selection Sort Bubble Sort/ Shaker Sort Shell Sort Ordinamento Sommario Ordinamento Selection Sort Bubble Sort/ Shaker Sort Shell Sort Cosa e' l'ordinamento Il problema consiste nell elaborare insiemi di dati costituiti da record I record hanno sono costituiti

Dettagli

Algoritmi e Strutture Dati

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

Dettagli

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati 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

Dettagli

Algoritmi di Ordinamento

Algoritmi 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[]) {

Dettagli

Algoritmi e Strutture Dati

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

Dettagli

Dallo heap per la coda con priorità a un nuovo algoritmo di ordinamento. Algoritmi e Laboratorio a.a Lezioni

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

Dettagli

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati Algoritmi di Ordinamento Maria Rita Di Berardini, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino Il problema dell ordinamento Il problema dell ordinamento di un insieme

Dettagli

Laboratorio di Algoritmi e Strutture Dati Ingegneria e Scienze Informatiche - Cesena A.A

Laboratorio di Algoritmi e Strutture Dati Ingegneria e Scienze Informatiche - Cesena A.A Ingegneria e Scienze Informatiche - Cesena A.A. 2014-2015 pietro.dilena@unibo.it MergeSort MergeSort MergeSort: esempio MergeSort: pseudocodice Algoritmo di ordinamento ricorsivo basato sulla tecnica Divide

Dettagli

Corso di Tecniche di Programmazione

Corso di Tecniche di Programmazione Problema: Data una sequenza di elementi in ordine qualsiasi, ordinarla. Corso di Tecniche di Programmazione Corsi di Laurea in Ingegneria Informatica ed Automatica Anno Accedemico 003/004 Proff. Giuseppe

Dettagli

Università degli Studi di Camerino Laurea in Informatica Prima Prova Parziale del corso di Algoritmi e Strutture Dati

Università degli Studi di Camerino Laurea in Informatica Prima Prova Parziale del corso di Algoritmi e Strutture Dati Università degli Studi di Camerino Laurea in Informatica Prima Prova Parziale del corso di Algoritmi e Strutture Dati Docente: Maria Rita Di Berardini 19 dicembre 2007 Nome: Cognome: N.Matricola: Note:

Dettagli

Algoritmi Greedy. Tecniche Algoritmiche: tecnica greedy (o golosa) Un esempio

Algoritmi Greedy. Tecniche Algoritmiche: tecnica greedy (o golosa) Un esempio Algoritmi Greedy Tecniche Algoritmiche: tecnica greedy (o golosa) Idea: per trovare una soluzione globalmente ottima, scegli ripetutamente soluzioni ottime localmente Un esempio Input: lista di interi

Dettagli

heap concetti ed applicazioni

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

Dettagli

Algoritmi di ordinamento

Algoritmi 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

Dettagli

QuickSort Università degli Studi di Milano

QuickSort Università degli Studi di Milano QuickSort Algoritmo di ordinamento sul posto che ha tempo di esecuzione : - O(n 2 ) nel caso peggiore - O(n log n) nel caso medio Nonostante le cattive prestazioni nel caso peggiore, rimane il miglior

Dettagli

Per regnare occorre tenere divisi i nemici e trarne vantaggio. fai ad ogni passo la scelta più conveniente

Per regnare occorre tenere divisi i nemici e trarne vantaggio. fai ad ogni passo la scelta più conveniente Progetto di algoritmi sequenziali (un solo esecutore ) Divide et Impera Per regnare occorre tenere divisi i nemici e trarne vantaggio Greedy fai ad ogni passo la scelta più conveniente Buoni risultati

Dettagli

Ricerca in una sequenza ordinata

Ricerca 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

Dettagli

Heap e Code di Priorità

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

Dettagli

In questa lezione. Alberi binari: [CLRS09] cap. 12 per la visita inorder. visite e esercizi su alberi binari. Prof. E. Fachini - Intr. Alg.

In questa lezione. Alberi binari: [CLRS09] cap. 12 per la visita inorder. visite e esercizi su alberi binari. Prof. E. Fachini - Intr. Alg. In questa lezione Alberi binari: visite e esercizi su alberi binari [CLRS09] cap. 12 per la visita inorder!1 Visita inordine di un albero binario visita inordine(x) se l albero x non è nullo allora visita

Dettagli

Informatica Generale Andrea Corradini Algoritmi: ordinamento per inserimento e ricorsione

Informatica Generale Andrea Corradini Algoritmi: ordinamento per inserimento e ricorsione Informatica Generale Andrea Corradini 14 - Algoritmi: ordinamento per inserimento e ricorsione Sommario Un algoritmo iterativo: l'ordinamento per inserimento (insertion sort) La ricorsione: i numeri triangolari

Dettagli

MERGESORT. Abstract. In questo articolo ci proponiamo di analizzare le due tipologie ricorsive mergesort

MERGESORT. Abstract. In questo articolo ci proponiamo di analizzare le due tipologie ricorsive mergesort MERGESORT a cura di Alessandro Lucchetta e Luca Gagliano Realizzato nell'ambito del progetto Archimede con la supervisione dei Pro. Fabio Breda, Rizzo Gabriele, Valentina Fabbro e Francesco Zampieri I.S.I.S.S.

Dettagli

Esercizi di Algoritmi e Strutture Dati

Esercizi di Algoritmi e Strutture Dati Esercizi di Algoritmi e Strutture Dati Moreno Marzolla marzolla@cs.unibo.it Ultimo aggiornamento: 10 novembre 2010 1 La bandiera nazionale (problema 4.7 del libro di testo). Il problema della bandiera

Dettagli

Progetto Corda. Alberto Ferrari. Alberto Ferrari Ingegneria dell'informazione, UniPR. 18/12/2017 Progetto Corda

Progetto 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

Dettagli

Strutture dati per insiemi disgiunti

Strutture dati per insiemi disgiunti Strutture dati per insiemi disgiunti Servono a mantenere una collezione S = {S 1, S 2,..., S k } di insiemi disgiunti. Ogni insieme S i è individuato da un rappresentante che è un particolare elemento

Dettagli

In questa lezione. Il Mergesort: primo esempio di applicazione della tecnica divide et impera analisi tempo di esecuzione del Mergesort

In questa lezione. Il Mergesort: primo esempio di applicazione della tecnica divide et impera analisi tempo di esecuzione del Mergesort In questa lezione Il Mergesort: primo esempio di applicazione della tecnica divide et impera analisi tempo di esecuzione del Mergesort [CLRS] par. 2.3. Prof. E. Fachini - Intr. Alg.!1 Progettazione di

Dettagli

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

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

Dettagli

Algoritmi di ricerca. Per ricerca si intende qui il procedimento di localizzare una particolare informazione in un elenco di dati.

Algoritmi di ricerca. Per ricerca si intende qui il procedimento di localizzare una particolare informazione in un elenco di dati. E. Calabrese: Fondamenti di Informatica Algoritmi-1 Algoritmi di ricerca Per ricerca si intende qui il procedimento di localizzare una particolare informazione in un elenco di dati. Per esempio: - cercare

Dettagli

Alberi ed Alberi Binari

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

Dettagli

Algoritmi di ordinamento

Algoritmi 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

Dettagli

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati Algoritmi di Ordinamento Maria Rita Di Berardini, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino Il problema dell ordinamento Il problema dell ordinamento di un insieme

Dettagli