Quicksort. Quicksort: idea di base. Riprendiamo il problema dell'ordinamento di n oggetti.

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Quicksort. Quicksort: idea di base. Riprendiamo il problema dell'ordinamento di n oggetti."

Transcript

1 Riprendiamo il problema dell'ordinamento di n oggetti. Quicksort Per questo problema abbiamo già visto gli algoritmi insertion-sort e mergesort. Il tempo di esecuzione di insertion-sort è (n 2 ). Il tempo di esecuzione di mergesort è (n log n), ma mergesort non ordina in loco. 1 2 Studieremo ora l'algoritmo quicksort che, se opportunamente implementato, risulta essere il più veloce algoritmo di ordinamento general purpose. Lo studio del quicksort ci farà imparare delle tecniche algoritmiche molto importanti. Quicksort: idea di base Per ordinare un array: scegli un elemento (detto ) metti a sinistra gli elementi metti a destra gli elementi ordina ricorsivamente la parte destra e la parte sinistra. 3 4 Esempio: dobbiamo ordinare se prendiamo come 19, otteniamo Quicksort Quicksort La ricorsione termina quando dobbiamo ordinare un array di un solo elemento. Rimane da specificare la procedura che usiamo per mettere gli elementi sulla sinistra, e gli elementi sulla destra. Nel seguito indicheremo tale procedura con il nome

2 Partition: idea di base. Facciamo crescere contemporaneamente la regione con gli elementi sulla sinistra, e la regione con gli elementi sulla destra. Esempio. =17 Avanziamo i due puntatori, facendo crescere le due regioni, fino a quando è possibile Quando entrambi i puntatori non possono avanzare scambiamo gli elementi A questo punto i due puntatori possono riprendere ad avanzare È possibile che i due puntatori si fermino nella stessa posizione se essa contiene il. Esempio. Supponiamo che il sia La procedura termina quando i due puntatori si incrociano Nell'implementazione della procedura ci sono due scelte fondamentali da fare: come scegliere il ; come trattare gli elementi uguali al durante la scansione. Nella nostra prima versione prendiamo come il primo elemento dell'array (vedremo che si tratta di una pessima scelta), e fermiamo la scansione quando incontriamo elementi uguali al. Mostriamo ora una prima semplice implementazioni della procedura. La procedura prende in input un array A[ ], e due interi p e r (p<r) e partiziona gli elementi A[p]... A[r]. Viene restituito un intero q tale che gli elementi in A[p]... A[q] sono minori o uguali di quelli in A[q+1]... A[r]

3 int Partition(Item A[], int p, int r) Item t; int i= p-1; int j= r+1; Item x = A[p]; // // Quicksort: ordina A[p]...A[r] (p<=r) void quicksort(item A, int p, int r) int q; if(p<r) while(1) while(a[--j]>x) ; // esce se A[j]<=x q = Partition(A,p,r); while(a[++i]<x) ; // esce se A[i]>=x quicksort(a,p,q); if(i<j) quicksort(a,q+1,r); // scambia A[i] <-> A[j] t=a[i]; A[i]=A[j]; A[j]=t; else break; // per ordinare A[0]...A[n-1] return j; quicksort(a,0,n-1) Prime osservazioni Quicksort ordina in loco La strategia di ordinamento è simile a quella del mergesort: la procedura di fusione (merge) è stata sostituita dal partizionamento. Analisi quicksort Vogliamo ora analizzare il tempo di esecuzione dell'algoritmo quicksort. Trattandosi di un algoritmo di ordinamento basato sui confronti, analizziamo il numero di confronti in funzione della numero n di oggetti da ordinare Osserviamo che: tutti i confronti sono eseguiti nella procedura. quando è eseguita su un sottoarray di lunghezza m vengono eseguiti m confronti (ogni elemento è confrontato una volta con il ). Se l'array da ordinare viene partizionato in due array di dimensione r e n-r abbiamo che il numero di confronti C(n) soddisfa alla ricorrenza: C(n) = 0 se n = 1 C(r)+ C(n-r) + n se n >

4 Questa ricorrenza non è del tipo che si può studiare mediante il teorema principale anche perché il parametro r cambia ad ogni chiamata della procedura! Studieremo il caso peggiore e il caso migliore, e cercheremo di farci un'idea del caso medio. 19 Quicksort: caso peggiore Il caso peggiore si verifica quando ad ogni passo l'array viene partizionato in due regioni di cui una contiene un solo elemento. Abbiamo allora: C(n) = C(n-1) + n = C(n-2) + (n-1) + n = C(1) (n-2) + (n-1) + n = (n 2 ) 20 Sfortunatamente, con la nostra scelta del il caso peggiore si presenta quando l'array è già ordinato (sia in ordine crescente che decrescente). Questo è uno dei motivi per cui è opportuno cambiare la scelta del! Quicksort: caso migliore Il caso migliore si verifica quando ad ogni passo l'array viene partizionato in due regioni uguali. Abbiamo allora: C(n) = 0 se n = 1 2C(n/2) + n se n > 1 21 Per il teorema principale C(n) = (n log n) 22 Ancora una volta il caso peggiore e il caso migliore risultano molto diversi tra loro. Abbiamo ora che C(n) soddisfa alla ricorrenza: È naturale chiedersi se dobbiamo aspettarci più di frequente un tempo (n 2 ) o un tempo (n log n) o qualcosa di intermedio. C(n) = 0 se n = 1 C(n/10) + C(9n/10) + n se n > 1 Per farci un'idea sul caso medio studiamo il caso (altamente improbabile) che la procedura crei sempre due regioni di cui una sia 9 volte più grande dell'altra. 23 Analizzando l'albero di ricorrenza si ottiene che anche in questo caso C(n) = (n log n) 24

5 Esempio albero di ricorrenza, n=1000: Analisi albero di ricorrenza: n/10 n 9n/10 (n) (n) n/100 9n/100 9n/100 81n/100 (n) Per scendere di un livello nell'albero di ricorrenza si paga un costo pari alla somma delle dimensioni dei problemi cioè (n) Dopo log 10 n livelli alcuni sottoproblemi raggiungono dimensione 1 e non sono più suddivisi. Dopo log 9/10 n livelli tutti i sottoproblemi hanno raggiunto dimensione 1 e sono stati risolti direttamente. Il costo totale è dato dal costo di ogni livello per il numero dei livelli quindi risulta (n log 9/10 n) cioè (n log n). Studiamo ora il caso in cui si alternano una partizione cattiva e una buona. Nei livelli dispari il problema viene spezzato in [1,n-1], nei livelli pari in [n/2,n/2]. Possiamo ripetere l'analisi sull'albero di ricorrenza Esempio: albero di ricorrenza n=103 Analisi albero di ricorrenza: n n-1 (n) (n-1) (n-1)/2 (n-1)/2 (n-1) Per scendere di un livello nell'albero di ricorrenza si paga un costo che è sempre al più (n) L'altezza dell'albero è 2log n quindi il costo complessivo è (n log n). 30

6 Riassumendo. Se le partizioni sono spesso molto sbilanciate, il costo può risultare molto alto. Se le partizioni non sono troppo sbilanciate si ha un costo (n log n) cioè asintoticamente uguale al caso ottimo. Un simile comportamento si ha anche per altri algoritmi ricorsivi che suddividono un problema in sottoproblemi di dimensione non necessariamente uguale. Bilanciare il lavoro solitamente riduce il costo complessivo dell'algoritmo Introduciamo il Quicksort perché: Test di autovalutazione A. Ha una complessità asintotica minore rispetto al mergesort. B. A differenza del mergesort nel caso migliore ha un costo (n). C. Non necessita di memoria ausiliaria Il Quicksort: La procedura : A. È un algoritmo ricorsivo, ma non è basato sul divide et impera. B. È basato sul divide et impera e quindi ha un costo (n log n). C. Ha un costo (n log n) sono quando divide l array in parti uguali. A. Garantisce che ogni partizione contenga almeno n/10 elementi. B. È una procedura ricorsiva. C. Divide l array in parti uguali quando l'array è già ordinato

7 La procedura (2): A. Deve evitare di creare una partizione con un solo elemento altrimenti Quicksort non termina. B. Deve evitare di creare una partizione con zero elementi altrimenti Quicksort non termina. C. Deve evitare di accedere ad elementi al di fuori di A[p]...A[r]. Un piccolo trucco... Nella versione base Quicksort è chiamato ricorsivamente fino a quando non arriviamo ad un array di dimensione 1. È stato però osservato che gli array piccoli sono ordinati più velocemente da Insertion-Sort. Questo fatto suggerisce una semplice modifica del Quicksort per affidare all'insertion-sort l'ordinamento degli array piccoli // ordina A[p]... A[r] (deve essere p<=r) #define soglia 10 void quicksort(item A, int p, int r) int q; Quicksort: scelta del if(p+soglia>r) // ordina array di dim <= soglia // con insertion_sort insertion_sort(a+p,r-p+1); else q = Partition(A,p,r); quicksort(a,p,q); quicksort(a,q+1,r); Abbiamo visto che scegliere come il primo elemento dell'array comporta un costo (n 2 ) se l'array è già ordinato o è quasi ordinato. Questo non è accettabile quindi studiamo strategie alternative per la scelta del. Tutte le strategie che vedremo possono comportare un costo (n 2 ), ma non quando l'array è già ordinato. Random ing Abbiamo visto che otteniamo un costo asintoticamente superiore a (n log n) soltanto se scegliamo male il numerose volte durante l'algoritmo. Questo suggerisce di affidare la scelta al caso, nella speranza che non saremo sfortunati troppo spesso

8 Supponiamo quindi di avere una procedura che dati due interi i,j con i<j, restituisce un intero scelto casualmente nell'intervallo [i,j]. Esempio: (7,16) restituisce un numero scelto a caso tra 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ognuno di questi numeri ha la stessa probabilità di essere scelto. Ad ogni esecuzione della procedura usiamo per scegliere casualmente il tra i valori A[p], A[p+1],...,A[r-1], A[r]. Una volta scelto il lo mettiamo in A[p] perché è usato dall'algoritmo come sentinella int RandPartition(Item A[], int p, int r) Item t, x; int i,j; i = Random(p,r); // posizione random x = A[i]; // // scambia A[i]<->A[p] t=a[i];a[i]=a[p];a[p]=t; i= p-1; j= r+1; // inizializza indici while(1) // codice per il partizionamento // come per Partition() Si può dimostrare matematicamente che il tempo di esecuzione di Quicksort basato su è (n log n) con probabilità molto vicina ad 1. In altre parole, devo essere molto sfortunato per avere un tempo di esecuzione asintoticamente superiore a (n log n). return j; Osserviamo che il tempo di esecuzione non dipende più dall'input, ma dalle scelte eseguite dalla procedura. In altre parole, non esistono più sequenze buone o cattive, ma scelte casuali fortunate o sfortunate. Pivot medio di 3 La generazione dei numeri causali rallenta la procedura e quindi tutto l'algoritmo Quicksort. Per questo motivo sono state proposte altre strategie di selezione del che in pratica risultano leggermente più veloci

9 La strategia medio di 3 consiste nel considerare gli elementi che sono nella prima e ultima posizione dell'array, e l'elemento che si trova in posizione mediana. Esempio: Di questi tre valori viene preso quello intermedio (nell'esempio qui sopra 31). 49 Item Median3(Item A[],int Left,int Right) int Center = ( Left + Right )/2; if( A[ Left ] > A[ Center ] ) Swap( &A[ Left ], &A[ Center ] ); if( A[ Left ] > A[ Right ] ) Swap( &A[ Left ], &A[ Right ] ); if( A[ Center ] > A[ Right ] ) Swap( &A[ Center ], &A[ Right ] ); // ora A[Left]<= A[Center] <= A[Right] // metto il in A[Right-1] Swap( &A[ Center ], &A[ Right - 1 ] ); return A[ Right - 1 ]; // Return 50 Array iniziale: Dopo aver ordinato i 3 elementi: Al termine di Median3: Questa scelta del permette di realizzare una procedura più sofisticata che usa gli elementi estremi come sentinelle. Per semplicità mostriamo questa procedura incorporata all'interno del quicksort Valore restituito come : void Qsort(Item A[], int p, int r) Item x, t; int i,j; Esempio Qsort. Situazione dopo Median3 if(p+3<r) x = Median3(A, p, r); i = p; j=r-1; while(1) while(a[--j]>x) ; // esce se A[j]<=x while(a[++i]<x) ; // esce se A[i]>=x if(i<j) Swap(&A[i],&A[j]); else break; Inizio la scansione: Swap(&A[i],&A[r-1]); Qsort(A,p,i-1); Qsort(A,i+1,r); else InsertionSort(A+p,r-p+1); 53 54

10 Scambio gli elementi: Scambio gli elementi: riprendo la scansione: riprendo la scansione: Gli indici si sono incrociati quindi la scansione termina. A questo punto scambio il con A[i] e chiamo ricorsivamente l'algoritmo sulle porzioni azzurra e gialla Come tutte le implementazioni efficienti del quicksort anche questa è delicata. Esempio. Se sostituiamo il codice a sinistra con quello a destra... i = p; j=q-1; while(1) while(a[--j]>x) ; while(a[++i]<x) ; if(i<j) Swap(&A[i],&A[j]); else break; i = p+1; j=q-2; while(1) while(a[j]>x) j--; while(a[i]<x) i++; if(i<j) Swap(&A[i],&A[j]); else break;...il programma entra in loop infinito se A ha tutti gli elementi uguali. 58 Elementi uguali al Una scelta molto importante nell'implementazione del quicksort è cosa fare quando, durante la scansione incontriamo elementi uguali al. Fino ad ora abbiamo sempre interrotto la scansione con il vantaggio che il faceva da sentinella. È una buona scelta? 59 Per minimizzare gli scambi, posso continuare la scansione anche quando incontro elementi uguali al. Questo richiede che durante la scansione controlliamo che gli indici i e j non superino i limiti degli array. Se i controlli sono fatti in maniera corretta l'algoritmo funziona, cioè ordina qualsiasi sequenza. 60

11 Sfortunatamente questo metodo porta ad un costo (n 2 ) se tutti gli elementi sono uguali. Esempio. Se inizio muovendo l'indice di destra, ottengo la situazione: Dato che ad ogni esecuzione di ho una suddivisione [1,n-1], il costo complessivo diventa (n 2 ). Ho quindi un programma che in generale funziona benissimo, ma che per alcune sequenze di input misteriosamente risulta molto lento. La cosa è grave anche perché le sequenze su cui il programma è lento sono facili da ordinare La strategia di fermare la scansione ogni volta che si incontra un elemento uguale al spezza a metà gli array contenenti un unico valore Abbiamo quindi che la nostra versione del quicksort ordina un array di elementi uguali in (n log n). In realtà non è un risultato di cui andare fieri: vedremo che esistono algoritmi (n) per ordinare interi in un range piccolo. Osservazione: è giusto preoccuparsi delle sequenze in cui ci sono pochi valori distinti perché tali sequenze saltano fuori anche quando non ce le aspettiamo. 64 Esempio. Supponiamo di dover ordinare una sequenza di 10 6 interi, di cui 10 3 sono uguali a 2 (rappresentati da in figura). Situazione iniziale: Considerazioni sullo spazio Abbiamo visto che uno dei principali motivi che possono farci preferire il quicksort al mergesort è il non richiedere spazio ausiliario. Ma è veramente così? Dopo un certo numero di chiamate ricorsive quicksort lavora su una partizione contenente molti

12 Ricordiamo che lo stack contiene il record di attivazione di ogni chiamata di procedura non ancora conclusa. Di conseguenza, un algoritmo ricorsivo occupa (sullo stack) una quantità di spazio proporzionale alla massima profondità dell'albero di ricorsione. Nel caso in cui le partizioni siano molto sbilanciate, il quicksort può avere un albero di profondità massima (n). Esempio. Se il partizionamento risulta sempre del tipo [n-1,1] avremo sullo stack i record di attivazione delle chiamate: quicksort(a,0,n-1) quicksort(a,0,n-2) quicksort(a,0,n-3) quicksort(a,0,1) Se questo fenomeno si verifica, lo spazio occupato sullo stack può essere molto maggiore dell'array ausiliario richiesto dal mergesort. Questo inconveniente si può verificare con tutte le versioni di quicksort che abbiamo visto in quanto per ognuna di esse possiamo avere partizioni sbilanciate. Fortunatamente c'è una tecnica generale che garantisce che lo stack non contenga mai più di log n record di attivazione. La tecnica consiste nell'eseguire la chiamata ricorsiva sulla partizione più piccola e di sostituire la ricorsione sulla partizione più grande con una iterazione // Quicksort: versione con stack O(log n) void quicksort(item *A, int p, int r) int q; while(p<r) q = Partition(A,p,r); if((q-p+1)<(r-q)) // la prima meta' e + piccola quicksort(a,p,q); // ricorsione p=q+1; // iterazione else // la seconda meta' e + piccola Dato ogni chiamata ricorsiva viene fatta su di un sottoproblema di dimensione al più la metà del problema precedente, abbiamo che l'i-esimo record di attivazione sullo stack si riferisce ad un problema di dimensione al più n/2 i. Quindi deve essere 2 i < n e di conseguenza i < log n, cioè lo stack contiene al più log n record di attivazione. quicksort(a,q+1,r); // ricorsione r=q; // iterazione 92 93

13

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

Albero di Riscorsione

Albero di Riscorsione Albero di Riscorsione Albero di ricorsione Un albero di ricorsione è un modo di visualizzare cosa accade in un algoritmo divide et impera L etichetta della radice rappresenta il costo non ricorsivo della

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

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

Analisi algoritmi ricorsivi e relazioni di ricorrenza

Analisi algoritmi ricorsivi e relazioni di ricorrenza Analisi algoritmi ricorsivi e relazioni di ricorrenza Punto della situazione Finora abbiamo affrontato: il tempo di esecuzione di un algoritmo, l analisi asintotica con le notazioni asintotiche e la tecnica

Dettagli

Algoritmi di ordinamento

Algoritmi 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

Dettagli

Si può fare di meglio?

Si può fare di meglio? Si può fare di meglio? Gli algoritmi visti fino ad ora hanno costo O(n 2 ) È possibile fare di meglio? Quanto meglio? Algoritmi e Strutture Dati 1 Algoritmi divide et impera Idea generale Divide: Scomporre

Dettagli

Due algoritmi di ordinamento. basati sulla tecnica Divide et Impera: Mergesort e Quicksort

Due algoritmi di ordinamento. basati sulla tecnica Divide et Impera: Mergesort e Quicksort Due algoritmi di ordinamento basati sulla tecnica Divide et Impera: Mergesort e Quicksort (13 ottobre 2009, 2 novembre 2010) Ordinamento INPUT: un insieme di n oggetti a 1, a 2,, a n presi da un dominio

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

Tecniche Algoritmiche: divide et impera

Tecniche Algoritmiche: divide et impera Tecniche Algoritmiche: divide et impera Una breve presentazione F. Damiani - Alg. & Lab. 04/05 Divide et impera (o Divide and conquer) Per regnare occorre tenere divisi i nemici e trarne vantaggio F. Damiani

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

Fondamenti di Informatica

Fondamenti 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

Dettagli

Divide et impera. Divide et impera. Divide et impera. Divide et impera

Divide et impera. Divide et impera. Divide et impera. Divide et impera Divide et impera Divide et impera La tecnica detta divide et impera è una strategia generale per impostare algoritmi (par. 9.4). Consideriamo un problema P e sia n la dimensione dei dati, la strategia

Dettagli

2. Analisi degli Algoritmi

2. Analisi degli Algoritmi 2. Analisi degli Algoritmi Introduzione 2.1 Un modello di macchina elementare: la Macchina a Registri 2.2 Costo di esecuzione di un programma 2.3 Analisi del costo di esecuzione: il modello a costi uniformi

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

Laboratorio di Algoritmi e Strutture Dati II Semestre 2005/2006. Ordinamenti: mergesort e quicksort

Laboratorio di Algoritmi e Strutture Dati II Semestre 2005/2006. Ordinamenti: mergesort e quicksort Laboratorio di Algoritmi e Strutture Dati II Semestre 2005/2006 Ordinamenti: mergesort e quicksort Marco Antoniotti Mergesort e Quicksort Due importantissimi algoritmi di ordinamento La conoscenza completa

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

Scopo: ordinare una sequenza di elementi in base a una certa relazione d ordine. Ipotesi: gli elementi siano memorizzati in un array.

Scopo: ordinare una sequenza di elementi in base a una certa relazione d ordine. Ipotesi: gli elementi siano memorizzati in un array. ALGORITMI DI ORDINAMENTO Scopo: ordinare una sequenza di elementi in base a una certa relazione d ordine lo scopo finale è ben definito algoritmi equivalenti diversi i algoritmi i possono avere efficienza

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

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

Programmazione I - corso B a.a prof. Viviana Bono

Programmazione 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

Dettagli

Array e Oggetti. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa 12. A. Miola Dicembre 2006

Array e Oggetti. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa 12. A. Miola Dicembre 2006 Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1 Dispensa 12 Array e Oggetti A. Miola Dicembre 2006 http://www.dia.uniroma3.it/~java/fondinf1/ Array e Oggetti 1 Contenuti Array paralleli

Dettagli

Quicksort e qsort() Alessio Orlandi. 28 marzo 2010

Quicksort e qsort() Alessio Orlandi. 28 marzo 2010 Quicksort e qsort() Alessio Orlandi 28 marzo 2010 Intro Quicksort è l algoritmo di ordinamento più implementato, insieme con Mergesort. Tutte le librerie standard UNIX ne prevedono una implementazione.

Dettagli

Problemi di ordinamento

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

Dettagli

Linguaggio C. Problemi di Ricerca e Ordinamento: Algoritmi e Complessità.

Linguaggio C. Problemi di Ricerca e Ordinamento: Algoritmi e Complessità. Linguaggio C Problemi di Ricerca e Ordinamento: Algoritmi e Complessità. 1 Complessità degli Algoritmi Si definisce Complessità di un Algoritmo C(A) la funzione dei parametri rilevanti per A che determina

Dettagli

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati Algoritmi Ricorsivi e Maria Rita Di Berardini, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino A.A. 2006/07 I conigli di Fibonacci Ricerca Binaria L isola dei conigli

Dettagli

T 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

T 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

Dettagli

Alberi. Gli alberi sono una generalizzazione delle liste che consente di modellare delle strutture gerarchiche come questa: Largo. Fosco.

Alberi. Gli alberi sono una generalizzazione delle liste che consente di modellare delle strutture gerarchiche come questa: Largo. Fosco. Alberi Alberi Gli alberi sono una generalizzazione delle liste che consente di modellare delle strutture gerarchiche come questa: Largo Fosco Dora Drogo Frodo Dudo Daisy Alberi Gli alberi sono una generalizzazione

Dettagli

Algoritmi di ordinamento (II parte)

Algoritmi di ordinamento (II parte) Algoritmi di ordinamento (II parte) E3: sommario Studio di due implementazioni di algoritmi avanzati Algoritmo ordinamento veloce (QuickSort) Algoritmo per fusione (MergeSort) Metodi offerti in java.util

Dettagli

QuickSort (1962, The Computer Journal)

QuickSort (1962, The Computer Journal) QuickSort (1962, The Computer Journal) Charles Antony Richard Hoare (1934 -) Attualmente senior researcher al Microsoft Research Center di Cambridge Hoare ha vinto nel 1980 il Turing Award, il premio più

Dettagli

Un esempio di calcolo di complessità: insertion sort

Un esempio di calcolo di complessità: insertion sort Un esempio di calcolo di complessità: insertion sort Vediamo su un esempio come si può calcolare la complessità di un algoritmo... L esempio è un metodo semplice per ordinare arrays: insertion sort, o

Dettagli

Algoritmi di ordinamento. Sequential-sort, Bubble-sort, Quicksort

Algoritmi di ordinamento. Sequential-sort, Bubble-sort, Quicksort Algoritmi di ordinamento Sequential-sort, Bubble-sort, Quicksort Definizione Dato un multi-insieme V={Vn} N-1 n=0 di valori in D, il problema dell ordinamento è trovare una permutazione n(j) degli indici

Dettagli

Calcolare x n = x x x (n volte)

Calcolare 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

Dettagli

Laboratorio di Programmazione Appunti sulla lezione 4: Divide et impera e algoritmi di ordinamento

Laboratorio di Programmazione Appunti sulla lezione 4: Divide et impera e algoritmi di ordinamento Laboratorio di Programmazione Appunti sulla lezione 4: Divide et impera e algoritmi di ordinamento Alessandra Raffaetà Università Ca Foscari Venezia Corso di Laurea in Informatica Ricerca binaria Assunzione:

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

Alberi. Gli alberi sono una generalizzazione delle liste che consente di modellare delle strutture gerarchiche come questa: Largo. Fosco.

Alberi. Gli alberi sono una generalizzazione delle liste che consente di modellare delle strutture gerarchiche come questa: Largo. Fosco. Alberi Alberi Gli alberi sono una generalizzazione delle liste che consente di modellare delle strutture gerarchiche come questa: Largo Fosco Dora Drogo Dudo Frodo Daisy Alberi Gli alberi sono una generalizzazione

Dettagli

Esercizio 1. E vero che in un AVL il minimo si trova in una foglia o nel penultimo livello? FB = -1. livello 0 FB = -1. livello 1 FB = -1.

Esercizio 1. E vero che in un AVL il minimo si trova in una foglia o nel penultimo livello? FB = -1. livello 0 FB = -1. livello 1 FB = -1. Esercizio 1 E vero che in un AVL il minimo si trova in una foglia o nel penultimo livello? FB = -1 livello 0 FB = -1 FB = -1 livello 1 FB = -1 livello 2 livello 3 L altezza è 3, il minimo si trova nel

Dettagli

Ordinamento. Ordinamento. Laboratorio di Programmazione II Corso di Laurea in Bioinformatica Dipartimento di Informatica - Università di Verona

Ordinamento. Ordinamento. Laboratorio di Programmazione II Corso di Laurea in Bioinformatica Dipartimento di Informatica - Università di Verona Laboratorio di Programmazione II Corso di Laurea in Bioinformatica Dipartimento di Informatica - Università di Verona Sommario Gli array in java Problema ordinamento Selection sort per array di oggetti:

Dettagli

Ordinamento. Scoperta guidata di tipici algoritmi: selection sort, bubble sort

Ordinamento. Scoperta guidata di tipici algoritmi: selection sort, bubble sort Ordinamento Scoperta guidata di tipici algoritmi: selection sort, bubble sort. Problema stimolo Si possiede una bilancia a due piatti ed N sacchi di iuta pieni di caffè. Ciascun sacco è identificato da

Dettagli

Laboratorio di Programmazione Appunti sulla lezione 4: Divide et impera e algoritmi di ordinamento

Laboratorio di Programmazione Appunti sulla lezione 4: Divide et impera e algoritmi di ordinamento Laboratorio di Programmazione Appunti sulla lezione 4: Divide et impera e algoritmi di ordinamento Alessandra Raffaetà Università Ca Foscari Venezia Corso di Laurea in Informatica Ricerca binaria Assunzione:

Dettagli

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2 Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2 Dispensa 06 Algoritmi di ordinamento C. Limongelli Febbraio 2008 http://www.dia.uniroma3.it/~java/fondinf2/ Algoritmi di Ordinamento 1

Dettagli

La ricerca. Sequenziale Binaria L ordinamento. Selection Sort Appendice: Quick Sort. Sommario FONDAMENTI DI INFORMATICA 1. Ricapitolando un po

La ricerca. Sequenziale Binaria L ordinamento. Selection Sort Appendice: Quick Sort. Sommario FONDAMENTI DI INFORMATICA 1. Ricapitolando un po Università degli Studi di Cagliari Corso di Laurea in Ingegneria Biomedica (Industriale), Chimica, Meccanica, Elettrica FONDAMENTI DI INFORMATICA 1 http://www.diee.unica.it/~marcialis/fi1 A.A. 2010/2011

Dettagli

5. DIVIDE AND CONQUER I

5. DIVIDE AND CONQUER I Divide-et-Impera (Divide and conquer) 5. DIVIDE AND CONQUER I Mergesort e Relazioni di ricorrenza Esempi di progettazione D&I Moltiplicazione di interi Contare inversioni Divide-et-Impera. Definizione

Dettagli

Algoritmi e strutture di dati 2

Algoritmi e strutture di dati 2 Algoritmi e strutture di dati 2 Paola Vocca Lezione 1: Divide et Impera 1 Paradigma del divide et impera Strutturato in tre fasi. Sia Π() istanza di dimensione di un problema computazionale Π (dove è immediato

Dettagli

Informatica II. Capitolo 2 Analisi di algoritmi. Valutare la complessità in tempo. Complessità in tempo: cosa serve?

Informatica II. Capitolo 2 Analisi di algoritmi. Valutare la complessità in tempo. Complessità in tempo: cosa serve? Valutare la complessità in tempo Complessità in tempo: cosa serve? Informatica II Capitolo 2 Analisi di algoritmi Per stimare il tempo impiegato da un programma Per stimare il più grande input gestibile

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

Notazione asintotica. notazione Ω. notazione O. notazione o notazione ω. Marina Zanella Algoritmi e strutture dati Richiami matematici 1

Notazione asintotica. notazione Ω. notazione O. notazione o notazione ω. Marina Zanella Algoritmi e strutture dati Richiami matematici 1 Notazione asintotica Sebbene si possa talvolta determinare il tempo esatto di esecuzione di un algoritmo, l estrema precisione non giustifica lo sforzo del calcolo; infatti, per input sufficientemente

Dettagli

Nell informatica esistono alcuni problemi particolarmente rilevanti, poiché essi:

Nell informatica esistono alcuni problemi particolarmente rilevanti, poiché essi: Pag 24 3) Il problema della ricerca Nell informatica esistono alcuni problemi particolarmente rilevanti, poiché essi: si incontrano in una grande varietà di situazioni reali; appaiono come sottoproblemi

Dettagli

La ricorsione. Sommario. Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino

La ricorsione. Sommario. Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino La ricorsione Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino Sommario! Definizione di ricorsione e strategie divide et impera! Semplici algoritmi ricorsivi! Merge

Dettagli

Dati e Algoritmi I (Pietracaprina) Esercizi sulle Nozioni di Base

Dati e Algoritmi I (Pietracaprina) Esercizi sulle Nozioni di Base Dati e Algoritmi I (Pietracaprina) Esercizi sulle Nozioni di Base Dati e Algoritmi I (Pietracaprina): Esercizi 1 Problema 1. Sia T una stringa arbitraria di lunghezza n 1 su un alfabeto Σ. È sempre possibile

Dettagli

T 1 =1. n 6 n. T n =3 T. Esercizio 1 (6 punti)

T 1 =1. n 6 n. T n =3 T. Esercizio 1 (6 punti) A.A. 7 8 Esame di Algoritmi e strutture dati 9 luglio 8 Esercizio (6 punti) Risolvere con almeno due metodi diversi la seguente relazione di ricorrenza T = T n =3 T n 6 n A.A. 7 8 Esame di Algoritmi e

Dettagli

Esercizi Capitolo 12 - Divide-et-Impera

Esercizi Capitolo 12 - Divide-et-Impera Esercizi Capitolo 12 - Divide-et-Impera Alberto Montresor 19 Agosto, 2014 Alcuni degli esercizi che seguono sono associati alle rispettive soluzioni. Se il vostro lettore PDF lo consente, è possibile saltare

Dettagli

UNIVERSITÀ DEGLI STUDI DI PAVIA FACOLTÀ DI INGEGNERIA. Matlab: esempi ed esercizi

UNIVERSITÀ DEGLI STUDI DI PAVIA FACOLTÀ DI INGEGNERIA. Matlab: esempi ed esercizi UNIVERSITÀ DEGLI STUDI DI PAVIA FACOLTÀ DI INGEGNERIA Matlab: esempi ed esercizi Sommario e obiettivi Sommario Esempi di implementazioni Matlab di semplici algoritmi Analisi di codici Matlab Obiettivi

Dettagli

UNIVERSITÀ DEGLI STUDI DI PAVIA FACOLTÀ DI INGEGNERIA. Algoritmi

UNIVERSITÀ DEGLI STUDI DI PAVIA FACOLTÀ DI INGEGNERIA. Algoritmi UNIVERSITÀ DEGLI STUDI DI PAVIA FACOLTÀ DI INGEGNERIA Algoritmi Algoritmi classici Alcuni problemi si presentano con elevata frequenza e sono stati ampiamente studiati Ricerca di un elemento in un vettore

Dettagli

LE STRUTTURE DATI DINAMICHE: GLI ALBERI. Cosimo Laneve

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

Dettagli

Concetti di base di complessità degli algoritmi

Concetti di base di complessità degli algoritmi Concetti di base di complessità degli algoritmi 1 Problemi, algoritmi, programmi Problema: il compito da svolgere quali output vogliamo ottenere a fronte di certi input cioè quale funzione vogliamo realizzare

Dettagli

Progettazione di algoritmi

Progettazione di algoritmi Progettazione di algoritmi Discussione dell'esercizio [vincoli] Prima di tutto rappresentiamo il problema con un grafo G: i nodi sono le n lavorazioni L 1, L 2,, L n, e tra due nodi L h, L k c'è un arco

Dettagli

Note per la Lezione 4 Ugo Vaccaro

Note per la Lezione 4 Ugo Vaccaro Progettazione di Algoritmi Anno Accademico 2016 2017 Note per la Lezione 4 Ugo Vaccaro Ripasso di nozioni su Alberi Ricordiamo che gli alberi rappresentano una generalizzazione delle liste, nel senso che

Dettagli

Tempo e spazio di calcolo (continua)

Tempo e spazio di calcolo (continua) Tempo e spazio di calcolo (continua) I numeri di Fibonacci come case study (applichiamo ad un esempio completo le tecniche illustrate nei lucidi precedenti) Abbiamo introdotto tecniche per la correttezza

Dettagli

2.2 Alberi di supporto di costo ottimo

2.2 Alberi di supporto di costo ottimo . Alberi di supporto di costo ottimo Problemi relativi ad alberi hanno numerose applicazioni: progettazione di reti (comunicazione, teleriscaldamento,...) memorizzazione compatta di sequenze (DNA) diffusione

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

Algoritmi e Strutture Dati Esercizi Svolti. Giuseppe Persiano Dipartimento di Informatica ed Appl. Renato M. Capocelli Università di Salerno

Algoritmi e Strutture Dati Esercizi Svolti. Giuseppe Persiano Dipartimento di Informatica ed Appl. Renato M. Capocelli Università di Salerno Algoritmi e Strutture Dati Esercizi Svolti Giuseppe Persiano Dipartimento di Informatica ed Appl Renato M Capocelli Università di Salerno Indice Esercizio 12-3 5 Esercizio 23-4 6 Esercizio 63-3 7 Esercizio

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

Algoritmi greedy. Gli algoritmi che risolvono problemi di ottimizzazione devono in genere operare una sequenza di scelte per arrivare alla soluzione

Algoritmi greedy. Gli algoritmi che risolvono problemi di ottimizzazione devono in genere operare una sequenza di scelte per arrivare alla soluzione Algoritmi greedy Gli algoritmi che risolvono problemi di ottimizzazione devono in genere operare una sequenza di scelte per arrivare alla soluzione Gli algoritmi greedy sono algoritmi basati sull idea

Dettagli

PROBLEMA DELLA RICERCA DI UN ELEMENTO IN UN ARRAY E ALGORITMI RISOLUTIVI

PROBLEMA DELLA RICERCA DI UN ELEMENTO IN UN ARRAY E ALGORITMI RISOLUTIVI PROBLEMA DELLA RICERCA DI UN ELEMENTO IN UN ARRAY E ALGORITMI RISOLUTIVI PROBLEMA DELLA RICERCA in termini generali: Dati in input un insieme S di elementi (numeri, caratteri, stringhe, ) e un elemento

Dettagli

Tecniche Algoritmiche/1 Divide et Impera

Tecniche Algoritmiche/1 Divide et Impera Tecniche Algoritmiche/1 Divide et Impera Ivan Lanese Dipartimento di Informatica Scienza e Ingegneria Università di Bologna Ivan.lanese@gmail.com http://www.cs.unibo.it/~lanese/ Divide-et-impera 2 Tecniche

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

Corso di Tecniche di Programmazione

Corso di Tecniche di Programmazione Corso di Tecniche di Programmazione Corsi di Laurea in Ingegneria Informatica ed Automatica Anno Accedemico 003/004 Proff. Giuseppe De Giacomo, Luca Iocchi, Domenico Lembo Dispensa : Algoritmi di Ordinamento

Dettagli

Esercizi per il corso di Algoritmi e Strutture Dati

Esercizi per il corso di Algoritmi e Strutture Dati 1 Esercizi per il corso di Algoritmi e Strutture Dati 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 algoritmi

Dettagli

Note per la Lezione 6 Ugo Vaccaro

Note per la Lezione 6 Ugo Vaccaro Progettazione di Algoritmi Anno Accademico 2016 2017 Note per la Lezione 6 Ugo Vaccaro Ancora sulla tecnica Programmazione Dinamica Nella lezione scorsa abbiamo appreso che la tecnica Divide-et-Impera,

Dettagli

Esercizi riassuntivi (Fondamenti di Informatica 2 Walter Didimo) Soluzioni

Esercizi riassuntivi (Fondamenti di Informatica 2 Walter Didimo) Soluzioni Esercizi riassuntivi (Fondamenti di Informatica 2 Walter Didimo) Soluzioni Esercizio 1 Dire quale è la complessità temporale del seguente metodo, espressa con notazione asintotica O(.) (con la migliore

Dettagli

COMPLESSITÀ COMPUTAZIONALE DEGLI ALGORITMI

COMPLESSITÀ COMPUTAZIONALE DEGLI ALGORITMI COMPLESSITÀ COMPUTAZIONALE DEGLI ALGORITMI Fondamenti di Informatica a.a.200.2005/06 Prof. V.L. Plantamura Dott.ssa A. Angelini Ω (grande omega) Diciamo che T(n) = Ω (f(n)), - leggiamo T(n) ha complessità

Dettagli

Tempo e spazio di calcolo (continua)

Tempo e spazio di calcolo (continua) Tempo e spazio di calcolo (continua) I numeri di Fibonacci come case study (applichiamo ad un esempio completo le tecniche illustrate nei lucidi precedenti) Abbiamo introdotto tecniche per la correttezza

Dettagli

SOMMARIO IL PROBLEMA DELLA RICERCA. Algoritmi di ricerca: Algoritmi di ordinamento: RICERCA LINEARE

SOMMARIO IL PROBLEMA DELLA RICERCA. Algoritmi di ricerca: Algoritmi di ordinamento: RICERCA LINEARE SOMMARIO IL PROBLEMA DELLA RICERCA Algoritmi di ricerca: Ricerca lineare; Ricerca binaria (su elenchi già ordinati). Dato un array e un oggetto, stabilire se l oggetto è contenuto in un elemento dell array,

Dettagli

Esempio: rappresentare gli insiemi

Esempio: rappresentare gli insiemi Esempio: rappresentare gli insiemi Problema: rappresentare gli insiemi Vedremo che la scelta della rappresentazione per implementarli non è così ovvia come era stato per i numeri razionali In realtà ci

Dettagli

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati Algoritmi e Strutture Dati Capitolo 1 Un introduzione informale agli algoritmi Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Definizione informale di algoritmo Insieme di istruzioni, definite

Dettagli

PROVETTE D ESAME. Algoritmi e Strutture Dati

PROVETTE D ESAME. Algoritmi e Strutture Dati PROVETTE D ESAME Algoritmi e Strutture Dati ESERCIZIO 1 Si ottengano limiti superiori e inferiori per la seguente ricorrenza ESERCIZIO 1 ESERCIZIO 2 Dato un albero binario T, il grado di sbilanciamento

Dettagli

Algoritmi di Ricerca. Esempi di programmi Java

Algoritmi di Ricerca. Esempi di programmi Java Fondamenti di Informatica Algoritmi di Ricerca Esempi di programmi Java Fondamenti di Informatica - D. Talia - UNICAL 1 Ricerca in una sequenza di elementi Data una sequenza di elementi, occorre verificare

Dettagli

Sapendo che il vettore è ordinato, la ricerca può essere ottimizzata Vettore ordinato in senso non decrescente: Vettore ordinato in senso crescente:

Sapendo che il vettore è ordinato, la ricerca può essere ottimizzata Vettore ordinato in senso non decrescente: Vettore ordinato in senso crescente: Sapendo che il vettore è ordinato, la ricerca può essere ottimizzata Vettore ordinato in senso non decrescente: Esiste una relazione d ordine totale sul dominio degli elementi se i

Dettagli

Algoritmi di Ricerca. Esempi di programmi Java

Algoritmi di Ricerca. Esempi di programmi Java Fondamenti di Informatica Algoritmi di Ricerca Esempi di programmi Java Fondamenti di Informatica - D. Talia - UNICAL 1 Ricerca in una sequenza di elementi Data una sequenza di elementi, occorre verificare

Dettagli

Laboratorio di Programmazione M-Z

Laboratorio di Programmazione M-Z Diretta Laboratorio di Programmazione M-Z Docente: Dott.ssa Alessandra Lumini alessandra.lumini@unibo.it Università di Bologna, Sede di Cesena Divide et impera Dividere un problema in sottoproblemi più

Dettagli

Algoritmi e Strutture Dati - II modulo Soluzioni degli esercizi

Algoritmi e Strutture Dati - II modulo Soluzioni degli esercizi Algoritmi e Strutture Dati - II modulo Soluzioni degli esercizi Francesco Pasquale 6 maggio 2015 Esercizio 1. Su una strada rettilinea ci sono n case nelle posizioni 0 c 1 < c 2 < < c n. Bisogna installare

Dettagli

Esercizi su alberi binari

Esercizi su alberi binari Esercizi su alberi binari Esercizi svolti: Determinazione nodi contenti verifica completezza verifica quasi completezza lunghezza del cammino interno determinazione ultima foglia in un quasi completo verifica

Dettagli

Corso di Fondamenti di Informatica. La ricorsione

Corso di Fondamenti di Informatica. La ricorsione Corso di Fondamenti di Informatica La ricorsione La ricorsione Si dice che un oggetto (una struttura dati, una funzione matematica, un concetto ) è ricorsivo se è possibile darne una definizione in termini

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

Permutazioni. 1 Introduzione

Permutazioni. 1 Introduzione Permutazioni 1 Introduzione Una permutazione su un insieme di n elementi (di solito {1, 2,...,n}) è una funzione biiettiva dall insieme in sé. In parole povere, è una regola che a ogni elemento dell insieme,

Dettagli

Appunti Senza Pretese di Programmazione II: Costruzione di un Albero Bilanciato

Appunti Senza Pretese di Programmazione II: Costruzione di un Albero Bilanciato Appunti Senza Pretese di Programmazione II: Costruzione di un Albero Bilanciato Alessandro Panconesi DSI, La Sapienza via Salaria 113, 00198, Roma Consideriamo un problema che ci consentirá di vedere un

Dettagli

PROGRAMMAZIONE. Fusione Partizionamento Algoritmi avanzati di ordinamento. Prof.ssa Lanza - AA DIB 1/66

PROGRAMMAZIONE. Fusione Partizionamento Algoritmi avanzati di ordinamento. Prof.ssa Lanza - AA DIB 1/66 PROGRAMMAZIONE Fusione Partizionamento Algoritmi avanzati di ordinamento Prof.ssa Lanza - AA 2006-07 - DIB 1/66 Algoritmi su Array Algoritmi di base (conteggio, ricerca max/min, elimina duplicati, ) Algoritmi

Dettagli

Fondamenti di Informatica T-1 Modulo 2

Fondamenti di Informatica T-1 Modulo 2 Fondamenti di Informatica T-1 Modulo 2 1 Obiettivi di questa esercitazione 1. Array e funzioni 2. Array e funzioni ricorsive 3. Array e confronto di array 2 Esercizio 1 Creare un programma che legga da

Dettagli

Esempio : i numeri di Fibonacci

Esempio : i numeri di Fibonacci Esempio : i numeri di Fibonacci La successione di Fibonacci F 1, F 2,... F n,... è definita come: F 1 =1 F 2 =1 F n =F n 1 F n 2,n 2 Leonardo Fibonacci (Pisa, 1170 Pisa, 1250) http://it.wikipedia.org/wiki/leonardo_fibonacci

Dettagli

Parallel sorting. Algoritmi Avanzati. Davide Lo Re

Parallel sorting. Algoritmi Avanzati. Davide Lo Re Parallel sorting Algoritmi Avanzati Davide Lo Re Indice Richiami Idea Descrizione Illustrazione Fase 1: Costruzione delle strutture dati Fase 1.1 Fase 1.2 Fase 2: Merge Analisi Costo Algoritmo di Cole

Dettagli

Esercizio 2 (punti 7) Dato il seguente programma C: #include <stdio.h> int swap(int * nome, int length);

Esercizio 2 (punti 7) Dato il seguente programma C: #include <stdio.h> int swap(int * nome, int length); Fondamenti di Informatica L-A (A.A. 004/005) - Ingegneria Informatica Prof.ssa Mello & Prof. Bellavista I Prova Intermedia del 11/11/004 - durata h - COMPITO B Esercizio 1 (punti 1) Una associazione di

Dettagli

UNIVERSITA DEGLI STUDI DI PERUGIA

UNIVERSITA DEGLI STUDI DI PERUGIA UNIVERSITA DEGLI STUDI DI PERUGIA REGISTRO DELLE LEZIONI E DELLE ALTRE ATTIVITÀ DIDATTICHE Anno accademico 2006-2007 Dott./Prof. Pinotti Maria Cristina Settore scientifico-disciplinare INF01 Facoltà Scienze

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

Capitolo 19. Ricorsione

Capitolo 19. Ricorsione Capitolo 19 La ricorsione Una funzione matematica è definita ricorsivamente quando nella sua definizione compare un riferimento a sé stessa Esempio: Funzione fattoriale su interi non negativi: f(n) = n!

Dettagli

2.2 Alberi di supporto di costo ottimo

2.2 Alberi di supporto di costo ottimo . Alberi di supporto di costo ottimo Problemi relativi ad alberi hanno numerose applicazioni: progettazione di reti (comunicazione, teleriscaldamento,...) protocolli reti IP memorizzazione compatta di

Dettagli

Analisi asintotica della complessità di tempo degli algoritmi

Analisi asintotica della complessità di tempo degli algoritmi Analisi asintotica della complessità di tempo degli algoritmi Due esempi di funzioni di Python: 1. nel primo mettiamo in evidenza l importanza di una buona organizzazione dei dati in memoria, cioè di una

Dettagli

Lezione 4. Problemi trattabili e soluzioni sempre più efficienti. Gianluca Rossi

Lezione 4. Problemi trattabili e soluzioni sempre più efficienti. Gianluca Rossi Lezione 4 Problemi trattabili e soluzioni sempre più efficienti Gianluca Rossi Trattabile o intrattabile? Consideriamo ora il problema, ben noto a tutti gli studenti a partire dalla scuola media, di calcolare

Dettagli

Lezione 12 Tabelle Hash

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

Dettagli

Algoritmi e Strutture Dati (Mod. B) Algoritmi Greedy (parte I)

Algoritmi e Strutture Dati (Mod. B) Algoritmi Greedy (parte I) Algoritmi e Strutture Dati (Mod. B) Algoritmi Greedy (parte I) Algoritmi greedy Gli algoritmi per problemi di ottimizzazione devono in genere operare una sequenza di scelte per arrivare alla soluzione

Dettagli