Laboratorio di Algoritmi e Strutture Dati II Semestre 2005/2006. Ordinamenti non basati su confronti

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Laboratorio di Algoritmi e Strutture Dati II Semestre 2005/2006. Ordinamenti non basati su confronti"

Transcript

1 Laboratorio di Algoritmi e Strutture Dati II Semestre 2005/2006 Radix Sorts Marco Antoniotti Ordinamenti non basati su confronti Per gli algoritmi di ordinamento basati su confronti di N elementi esiste il limite inferiore Ω(N lg(n)) È possibile ordinare N elementi in tempo minore sfruttando la struttura delle chiavi da ordinare Variazioni Radix sort Counting Sort Bucket Sort MSD sort Ecc. Ecc. Ecc. II Semestre 2005/2006 Laboratorio Algoritmi - Marco Antoniotti 1/22 1

2 Radix Sort Radix (radice) sort su stringhe Stessa idea per bits, cifre, ecc Ovvero, utile per tutte quelle chiavi che possono venir destrutturate in componenti più semplici Applicazioni Ordinamento tra stringhe Indicizzazione di testi Controllo copiature e plagiarizzazioni Biologia molecolare computazionale II Semestre 2005/2006 Laboratorio Algoritmi - Marco Antoniotti 2/22 Applicazione: controllo ridondanza Sottostringa ripetuta più lunga Data una stringa di N caratteri, trovare la sottostringa ripetuta più lunga Esempio a a c a a g t t t a c a a g c Applicazione: biologia molecolare computazionale Forza bruta e stupida Si provano tutti gli indici i e j e tutte le possibili lunghezze k Complessità O(W N 3 ) dove W è la lunghezza del match più lungo, mentre N è la lunghezza della stringa II Semestre 2005/2006 Laboratorio Algoritmi - Marco Antoniotti 3/22 2

3 Applicazione: controllo ridondanza Sottostringa ripetuta più lunga Data una stringa di N caratteri, trovare la sottostringa ripetuta più lunga Esempio a a c a a g t t t a c a a g c Applicazione: biologia molecolare computazionale Forza bruta meno stupida Si provano tutti gli indici i e j per ogni inizio di un possibile match Complessità O(W N 2 ) dove W è la lunghezza del match più lungo, mentre N è la lunghezza della stringa II Semestre 2005/2006 Laboratorio Algoritmi - Marco Antoniotti 4/22 Una soluzione basata sull ordinamento dei suffissi Suffix sort Si generano tutti i suffissi dell input Si ordinano i suffissi per avvicinare tutti match più lunghi II Semestre 2005/2006 Laboratorio Algoritmi - Marco Antoniotti 5/22 3

4 Problema: come ordinare efficientemente tutte queste stringhe Notazione Stringa = sequenza di lunghezza variabile di caratteri W = massimo numero di caratteri per stringa N = numero di stringhe in input R = radice N.B. La radice è 256 per ASCII esteso, per l UNICODE originale, da 4 a 27 o poco più per gli standard di rappresentazione di sequenze genomiche Sintassi C e C++ Array di stringhe: char* a[]; (Potremmo usare STL in C++) Numero di stringhe: int N; L i-esima stringa: a[i]; Il d-esimo carattere della stringa i-esima: a[i][d]; Le stringa da ordinare: a[0] a[n-1] II Semestre 2005/2006 Laboratorio Algoritmi - Marco Antoniotti 6/22 In C Codice per risolvere il problema #define N /* some number */ char * s = read_string(stdin, N); char ** suffixes = malloc(n * sizeof(char *)); int i; for (i = 0; i < N; i++) suffixes[i] = substring(s, i, N); string_sort(suffixes); fprintf(stdout, %s\n, lcp(suffixes)); Quicksort di stringhe, per esempio Least common prefix di stringhe adiacenti II Semestre 2005/2006 Laboratorio Algoritmi - Marco Antoniotti 7/22 4

5 Prestazioni di string sort Il nostro algoritmo per l ordinamento dei suffissi può assumere le prestazioni di quicksort Quindi le prestazioni saranno O(W N lg(n)) ovvero un miglioramento notevole Ciononostante si può - in questo caso - far meglio Idea: key indexing counting come passo base II Semestre 2005/2006 Laboratorio Algoritmi - Marco Antoniotti 8/22 Key Indexing Counting (primo passo) Si contano le frequenze di ogni lettera (in posizione 0) int *count = (int*) malloc(sizeof(int) * (256+1)); int i; for (i = 0; i < N; i++) { char c = a[i][d]; count[c + 1]++; d = 0 in quest esempio II Semestre 2005/2006 Laboratorio Algoritmi - Marco Antoniotti 9/22 5

6 Key Indexing Counting (secondo passo) Si contano le frequenze di ogni lettera (in posizione 0) Si computanto le frequenze cumulative for (i = 0; i < 256; i++) { count[i] += count[i - 1]; Frequenze cumulative II Semestre 2005/2006 Laboratorio Algoritmi - Marco Antoniotti 10/22 Key Indexing Counting (terzo passo) Si contano le frequenze di ogni lettera (in posizione 0) Si computanto le frequenze cumulative Si riarrangiano le string sulla base delle frequenze cumulative char ** temp; /* N puntatori */ for (i = 0; i < N; i++) { char c = a[i][d]; temp[count[c]++] = a[i]; Riarrangiamento II Semestre 2005/2006 Laboratorio Algoritmi - Marco Antoniotti 11/22 6

7 Key Indexing Counting (quarto passo) Si contano le frequenze di ogni lettera (in posizione 0) Si computanto le frequenze cumulative Si riarrangiano le string sulla base delle frequenze cumulative Si ricopia su a l array temp for (i = 0; i < N; i++) { a[i] = temp[i]; Ri-copia II Semestre 2005/2006 Laboratorio Algoritmi - Marco Antoniotti 12/22 LSD Radix Sort Least significant digit radix sort Un metodo di ordinamento molto antico II Semestre 2005/2006 Laboratorio Algoritmi - Marco Antoniotti 13/22 7

8 LSD Radix Sort Consideriamo i caratteri o cifre (digits) di ogni elemento da destra (meno significativo) a sinistra (più significativo) Si usi il metodo di key indexing per ordinare stabilmente ogni elemento II Semestre 2005/2006 Laboratorio Algoritmi - Marco Antoniotti 14/22 LSD Radix Sort Consideriamo i caratteri o cifre (digits) di ogni elemento da destra (meno significativo) a sinistra (più significativo) Si usi il metodo di key indexing per ordinare stabilmente ogni elemento void sorting_lsd(char * a[], int N, int W) { int d; for (d = W - 1; d >= 0; d--) { /* key-indexing count sort su tutti i caratteri d. */ Si assumono N stringhe di lunghezza fissa W II Semestre 2005/2006 Laboratorio Algoritmi - Marco Antoniotti 15/22 8

9 LSD Radix Sort: prestazioni LSD radix sort ha la seguente complessità Θ(W(N + R)) Domanda: perchè non si sta violando il limite inferiore di Ω(N lg(n)) sugli ordinamenti? Vantaggi È il metodo di ordinamento più veloce per insiemi di stringhe di lunghezza fissa (e.g. C.A.P. o C.F.) Svantaggi Accesso alla memoria molto casuale (caching) Ciclo interno molto complesso Perde molto tempo sugli elementi meno significativi Non funziona per stringhe di lunghezza variabile Poco ordine fino all ultimo passo Obiettivo: trovare un algoritmo che funzioni bene per stringhe di lunghezza variabile II Semestre 2005/2006 Laboratorio Algoritmi - Marco Antoniotti 16/22 MSD Radix Sort Most Significant Digit radix sort Si partiziona l input (e.g. N stringhe) in W parti secondo il primo elemento (carattere) Si ordina ricorsivamente ogni stringa cha inizia con lo stesso carattere (ecc. ecc.) Domanda: come si ordina secondo il d-esimo carattere? Si usa key-indexing counting sort II Semestre 2005/2006 Laboratorio Algoritmi - Marco Antoniotti 17/22 9

10 MSD Radix Sort void sorting_msd(char * a[], int N, int W) { msd(a, 0, N - 1, 0, W); void msd(char * a[], int l, int r, int d, int W) { int * count; int i; if (r <= l) return; /* key-indexing counting sort sull elemento d da a[l] a a[r]. */ count = (int*) malloc(sizeof(int) * (256+1)); /* */ /* Si ordinano ricorsivamente le 255 partizioni * (Si assume che le stringhe siano terminate da \0. */ for (i = 0; i < 255; i++) msd(a, l + count[i], l + count[i + 1] - 1, d + 1, W); II Semestre 2005/2006 Laboratorio Algoritmi - Marco Antoniotti 18/22 MSD Radix Sort: analisi Complessità La complessità di MSD Radix Sort è O(W(N + R)) come LSD Svantaggi Troppo lento per piccoli insiemi di elementi ASCII: 100x più lento di insertion sort per N = 2 UNICODE: 30000x più lento di insertion sort per N = 2 Enorme numero di chiamate ricorsive su piccoli insiemi Soluzione Si usa insertion sort su piccoli inputs Competitivo con soluzioni basate su quicksort II Semestre 2005/2006 Laboratorio Algoritmi - Marco Antoniotti 19/22 10

11 Struttura ricorsiva delle chiamate di MSD Radix Sort Struttura a trie : la struttura di MSD Radix Sort Problema: l algoritmo tocca un mucchio di nodi vuoti L albero può essere in realtà R volte più grande di quanto appaia II Semestre 2005/2006 Laboratorio Algoritmi - Marco Antoniotti 20/22 Corrispondenza tra alberi ed algoritmi di ordinamento I Binary Search Trees (BSTs) corrispondono alla struttura ricorsiva di quicksort I trie a R vie corrispondono alla struttura ricorsiva di MSD Radix Sort II Semestre 2005/2006 Laboratorio Algoritmi - Marco Antoniotti 21/22 11

12 Conclusioni Gli algoritmi di ordinamento basati su confronti hanno un limite teorico e pratico di Ω(N lg(n)) Sfruttando la struttura delle chiavi su cui eseguire l ordinamento (stringhe e caratteri, numeri e cifre) è possibile battere questo limite in alcuni casi L operazione di key-counting sort è fondamentale Least Significant Digit Radix Sort Most Significant Digit Radix Sort Quicksort ha una struttura ricorsiva di chiamate corrispondente a BSTs MSD ha una struttura ricorsiva di chiamate corrispondente ai tries ad R vie II Semestre 2005/2006 Laboratorio Algoritmi - Marco Antoniotti 22/22 12

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

char *s; s = (char *) malloc(5*sizeof(char)); scanf( %s, s); Stringhe

char *s; s = (char *) malloc(5*sizeof(char)); scanf( %s, s); Stringhe char *s; s = (char *) malloc(5*sizeof(char)); scanf( %s, s); Stringhe Stringhe s char *s; s = (char *) malloc(5*sizeof(char)); scanf( %s, s); c i a o \0 Scrivere un programma che legga da input un array

Dettagli

Laboratorio di Algoritmi e Strutture Dati II Semestre 2005/2006

Laboratorio di Algoritmi e Strutture Dati II Semestre 2005/2006 aboratorio di Algoritmi e Strutture Dati II Semestre 2005/2006 Insiemi di Stringhe e tries Marco Antoniotti Sommario Dizionari Dizionari Associazioni tra chiavi e valori Ricerca per chiave BSTs bilanciati

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

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

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

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

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

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

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

Laboratorio di algoritmi e strutture dati

Laboratorio di algoritmi e strutture dati Laboratorio di algoritmi e strutture dati Docente: Violetta Lonati mercoledì 15 novemb017 L esercitazione di oggi prevede di utilizzare gli alberi binari e in particolare gli alberi binari di ricerca.

Dettagli

Algoritmi e Principi dell Informatica

Algoritmi e Principi dell Informatica Algoritmi e Principi dell Informatica Appello del 1 Settembre 2016 Chi deve sostenere l esame integrato (API) deve svolgere tutti gli esercizi in 2 ore e 30 minuti. Chi deve sostenere solo il modulo di

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

Lezione 5. Giuditta Franco. 19 Febbraio 2008

Lezione 5. Giuditta Franco. 19 Febbraio 2008 Outline Lezione 5 Dipartimento di Informatica, Università di Verona 19 Febbraio 2008 Talk Outline Outline 1. 2. 3. Come costruire un Un esempio introduttivo L albero dei suffissi di una data stringa è

Dettagli

Rappresentazione di numeri interi e frazionari. 28 settembre 2015 (ore 9-11)

Rappresentazione di numeri interi e frazionari. 28 settembre 2015 (ore 9-11) Rappresentazione di numeri interi e frazionari 28 settembre 2015 (ore 9-11) Punto della situazione Vogliamo «dialogare» col computer: impariamo le rappresentazioni in binario Abbiamo visto la rappresentazioni

Dettagli

Rappresentazione dell informazione. 27 settembre 2018

Rappresentazione dell informazione. 27 settembre 2018 Rappresentazione dell informazione 27 settembre 2018 Notazione posizionale per numeri interi In base b. I simboli ammessi sono 0,1,, b-1. Una sequenza / stringa di 0, 1,, b-1, di lunghezza n a n-1 a n-2

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

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

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

Esame di Algoritmi e Strutture Dati Corso di Laurea in Ingegneria Informatica Canali A-L, M-Z

Esame di Algoritmi e Strutture Dati Corso di Laurea in Ingegneria Informatica Canali A-L, M-Z Esame di Algoritmi e Strutture Dati Corso di Laurea in Ingegneria Informatica Canali A-L, M-Z Anno Accademico 2002-2003 9 luglio 2002-03 Domanda 1, punti 6 Si consideri la seguente classe Java, in cui,

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

Stringhe in C. Luca Abeni. Informatica Luca Abeni 1 / 10

Stringhe in C. Luca Abeni. Informatica Luca Abeni 1 / 10 Stringhe in C Luca Abeni Informatica Luca Abeni 1 / 10 Stringhe in C Stringhe: tipo di dato strutturato Sequenze di caratteri Linguaggio C: progettato per la semplicità No supporto nativo per le stringhe

Dettagli

Esercizi vari. Alberto Montresor. 19 Agosto, 2014

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

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

Laboratorio di algoritmi e strutture dati

Laboratorio di algoritmi e strutture dati Laboratorio di algoritmi e strutture dati Docente: Violetta Lonati mercoledì 25 novemb009 L esercitazione di oggi prevede di utilizzare gli alberi binari e in particolare gli alberi binari di ricerca.

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

Informatica (A-K) 14. Linguaggio C -4

Informatica (A-K) 14. Linguaggio C -4 Strutture Dati in C Le strutture dati sono entità che permettono di memorizzare dati in modo organizzato e funzionale a particolari esigenze Informatica (A-K) 14. Linguaggio C -4 Strutture Dati tipiche

Dettagli

Algoritmi e Strutture Dati

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

Dettagli

Algoritmi e Strutture Dati

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

Dettagli

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

Lezione 6 Selection/Insertion Sort su interi e stringhe

Lezione 6 Selection/Insertion Sort su interi e stringhe Lezione 6 Selection/Insertion Sort su interi e stringhe Rossano Venturini rossano@di.unipi.it Pagina web del corso http://didawiki.cli.di.unipi.it/doku.php/informatica/all-b/start Tutoraggio Venerdì 14

Dettagli

Ricorsione. DD cap. 5 pp KP cap. 5 pp

Ricorsione. DD cap. 5 pp KP cap. 5 pp Ricorsione DD cap. 5 pp.160-184 KP cap. 5 pp.199-208 Un esempio Problema: prendere in input un intero e calcolarne il fattoriale se n>1 n!=n(n-1)(n-2)(n-3) 1; se n=0 o 1 n!=1. ma (n-1)! la definizione

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

Laboratorio di Algoritmi e Strutture Dati II Semestre 2005/2006. Templates C++ ed Alberi di Ricerca

Laboratorio di Algoritmi e Strutture Dati II Semestre 2005/2006. Templates C++ ed Alberi di Ricerca Laboratorio di Algoritmi e Strutture Dati II Semestre 2005/2006 Templates C++ ed Alberi di Ricerca Marco Antoniotti Laboratorio Comunicazioni di servizio Da settimana prossima di venerdì 12, 19 e 26 1

Dettagli

Fondamenti di Programmazione

Fondamenti di Programmazione A.A. 08/09 Fondamenti di Programmazione (canale E-O) Docente: Prof.ssa Tiziana Calamoneri calamo@di.uniroma1.it Esercitatore: Dott. Roberto Petroccia petroccia@di.uniroma1.it Pagina del corso: http://twiki.di.uniroma1.it/twiki/view/programmazione1/eo/webhome

Dettagli

TRIE (albero digitale di ricerca)

TRIE (albero digitale di ricerca) TRIE (albero digitale di ricerca) Struttura dati impiegata per memorizzare un insieme S di n stringhe (il vocabolario V). Tabelle hash le operazioni di dizionario hanno costo O(m) al caso medio per una

Dettagli

Riepilogo della puntata precedente

Riepilogo della puntata precedente Riepilogo della puntata precedente Da quanto detto la volta scorsa, la scelta di passare un array mediante un puntatore è giustificata solo dal risparmio, in termini di memoria, che tale scelta comporta.

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

Lezione 8 Struct e qsort

Lezione 8 Struct e qsort Lezione 8 Struct e qsort Rossano Venturini rossano@di.unipi.it Pagina web del corso http://didawiki.cli.di.unipi.it/doku.php/informatica/all-b/start Esercizio 3 QuickSort strambo Modificare il Quicksort

Dettagli

Alberi binari e alberi binari di ricerca

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

Dettagli

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

Alberi binari e alberi binari di ricerca

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

Dettagli

9 - Array. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

9 - Array. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo 9 - Array Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it Corso di Laurea

Dettagli

Esempio di Prova Scritta

Esempio di Prova Scritta Esempio di Prova Scritta La prova scritta è composta da alcuni esercizi per un totale di 12 punti, sufficienza con 7 punti (durata: circa 1h). Le tipologie di esercizi possibili comprendono: sintesi di

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

Alberi. Alberi: Esempio di utilizzo

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

Dettagli

Alberi binari e alberi binari di ricerca

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

Dettagli

Tipi di dati fondamentali. Tipi di dati fondamentali. Utilità dei tipi di dati nelle dichiarazioni. Il tipo di dati char. Codice ASCII.

Tipi di dati fondamentali. Tipi di dati fondamentali. Utilità dei tipi di dati nelle dichiarazioni. Il tipo di dati char. Codice ASCII. Tipi di dati fondamentali Tipi di dati fondamentali Linguaggi di Programmazione I Ferdinando Cicalese caratteri: char signed char unsigned char interi short int long interi unsigned short unsigned unsigned

Dettagli

Lezione 6 Struct e qsort

Lezione 6 Struct e qsort Lezione 6 Struct e qsort Rossano Venturini rossano.venturini@unipi.it Pagina web del corso http://didawiki.cli.di.unipi.it/doku.php/informatica/all-b/start Struct Struct Fino ad ora abbiamo utilizzato

Dettagli

Argomenti. Array. Stringhe. Merge sort

Argomenti. Array. Stringhe. Merge sort ARRAY Ivan Lanese Argomenti Array Stringhe Merge sort Array E' una struttura dati che contiene più elementi dello stesso tipo Normalmente su elementi diversi di uno stesso array si fanno operazioni simili

Dettagli

ORDINAMENTO PER SELEZIONE ORDINAMENTO PER SELEZIONE ORDINAMENTO VELOCE CONFRONTI

ORDINAMENTO PER SELEZIONE ORDINAMENTO PER SELEZIONE ORDINAMENTO VELOCE CONFRONTI ORDINAMENTO PER SELEZIONE Per l analisi delle prestazioni di tale algoritmo di ordinamento, si considerano i due cicli for annidati: poiché i confronti avvengono nel ciclo interno si ha che n 2 i= 0 (

Dettagli

Informatica per Statistica Riassunto della lezioni del 14/11/2012 e 16/11/2012

Informatica per Statistica Riassunto della lezioni del 14/11/2012 e 16/11/2012 Informatica per Statistica Riassunto della lezioni del 14/11/2012 e 16/11/2012 Igor Melatti Cenni sui puntatori in C Per ogni variabile normale dichiarata, il compilatore riserva una precisa quantità di

Dettagli

Algoritmi di ordinamento (I parte)

Algoritmi di ordinamento (I parte) Algoritmi di ordinamento (I parte) E2: sommario Classificazione degli algoritmi di ordinamento Studio di due implementazioni di algoritmi che utilizzano interfaccia Comparable Algoritmo per inserimento

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

Lezione 8: Stringhe ed array multidimensionali

Lezione 8: Stringhe ed array multidimensionali Lezione 8: Stringhe ed array multidimensionali Vittorio Scarano Corso di Laurea in Informatica Università degli Studi di Salerno Struttura della lezione AVVISO: la lezione di laboratorio di 28/5 non si

Dettagli

Programmazione di base

Programmazione di base Fondamenti di Informatica Testo A Secondo Appello 016-17 febbraio 017 Rispondi alle domande negli appositi spazi. I punti assegnati per ogni domanda sono indicati nel riquadro a lato. L'esame contiene

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

Ricerca in Array/Lista. Dato un array o lista di n elementi, vogliamo trovarne uno (e.g., un numero x in un array di interi)

Ricerca in Array/Lista. Dato un array o lista di n elementi, vogliamo trovarne uno (e.g., un numero x in un array di interi) Tabelle Hash Ricerca in Array/Lista Dato un array o lista di n elementi, vogliamo trovarne uno (e.g., un numero x in un array di interi) Ricerca in Array/Lista Dato un array o lista di n elementi, vogliamo

Dettagli

Array. Aggragati di variabili omogenee...

Array. Aggragati di variabili omogenee... Array Aggragati di variabili omogenee... Cosa è un array È un insieme di variabili omogenee identificato da un indice, ad esempio Se devo leggere 1 numeri dallo standard input e memorizzarli all'interno

Dettagli

Alberi Binari di Ricerca

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

Dettagli

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

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati Cognome................................ Nome................................... Matricola............................... Algoritmi e Strutture Dati Prova scritta del 24 febbraio 2017 TEMPO DISPONIBILE:

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

Ordinamento efficiente: quick-sort

Ordinamento efficiente: quick-sort Ordinamento efficiente: quick-sort Si cerca di ridurre la parte disordinata di più di un elemento per volta (a differenza di selection-sort e bubble-sort) L idea è di ordinare parzialmente l array, in

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

Informatica! Appunti della lezione 8!

Informatica! Appunti della lezione 8! Informatica! Appunti della lezione 8! Palindromia! Una stringa si dice palindroma quando si legge allo stesso modo da destra e da sinistra (es.: itopinonavevanonipoti )! Il problema del riconoscimento

Dettagli

Allora v = v2 =

Allora v = v2 = Problema: a partire da due sequenze ordinate v1 e v2 di elementi vogliamo costruirne una ordinata v con tutti gli elementi di v1 e v2 Algoritmo ricorsivo: Se le due sequenze contengono elementi confronta

Dettagli

Databases. Architettura di un DBMS: Struttura ad indice per i files, B + -Trees

Databases. Architettura di un DBMS: Struttura ad indice per i files, B + -Trees Databases Architettura di un DBMS: Struttura ad indice per i files, B + -Trees Indici Un indice consiste di coppie e supporta l efficiente recupero di tutte le etichette con chiave

Dettagli

Corso di Fondamenti di Programmazione canale E-O. Un esempio. Funzioni ricorsive. La ricorsione

Corso di Fondamenti di Programmazione canale E-O. Un esempio. Funzioni ricorsive. La ricorsione Corso di Fondamenti di Programmazione canale E-O Tiziana Calamoneri Ricorsione DD Cap. 5, pp. 160-184 KP Cap. 5, pp. 199-208 Un esempio Problema: prendere in input un intero e calcolarne il fattoriale

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

Esame di Algoritmi e Strutture Dati Corso di Laurea in Ingegneria Informatica Canali A-L, M-Z 28 giugno 2005 tempo a disposizione: 2 ore

Esame di Algoritmi e Strutture Dati Corso di Laurea in Ingegneria Informatica Canali A-L, M-Z 28 giugno 2005 tempo a disposizione: 2 ore Domanda 1, punti 6 Esame di Algoritmi e trutture Dati Corso di Laurea in Ingegneria Informatica Canali A-L, M- 8 giugno 00 tempo a disposizione: ore Con riferimento all algoritmo mistero1, determinarne

Dettagli

Algoritmi di Ricerca. Esempi di programmi Java. Prof. Angela Bonifati

Algoritmi di Ricerca. Esempi di programmi Java. Prof. Angela Bonifati Passaggio dei parametri in Java Nel seguente esempio public class parametri2 public static void main(string args[]) int x = 1; int y; double d[] = new double[2]; d[0] = 25; y= metodo1(d, x); System.out.println("Il

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

Introduzione al linguaggio C Dati aggregati

Introduzione al linguaggio C Dati aggregati Introduzione al linguaggio C Dati aggregati Violetta Lonati Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica 5 ottobre

Dettagli

UNIVERSITÀ DEGLI STUDI DI BERGAMO

UNIVERSITÀ DEGLI STUDI DI BERGAMO UNIVERSITÀ DEGLI STUDI DI BERGAMO DIPARTIMENTO DI INGEGNERIA DELL INFORMAZIONE E METODI MATEMATICI Corso di Laurea in Ingegneria Informatica Esame di Informatica III B Progettazione e algoritmi a.a. 2011/12

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

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

Dizionari Liste invertite e Trie

Dizionari Liste invertite e Trie Dizionari Liste invertite e Trie Lucidi tratti da Crescenzi Gambosi Grossi, Strutture di dati e algoritmi Progettazione, analisi e visualizzazione Addison-Wesley, 2006 Dizionari Universo U delle chiavi

Dettagli

Algoritmi di Ordinamento Corso di Informatica Laurea in Fisica. prof. ing. Corrado Santoro

Algoritmi di Ordinamento Corso di Informatica Laurea in Fisica. prof. ing. Corrado Santoro Algoritmi di Ordinamento Corso di Informatica Laurea in Fisica prof. ing. Corrado Santoro ፫ Bubble Sort Se l i-esimo elemento è maggiore dell elemento i+-esimo, essi vengono scambiati. Si termina quando

Dettagli

I puntatori e l allocazione dinamica di memoria

I puntatori e l allocazione dinamica di memoria I puntatori e l allocazione dinamica di memoria Vettore = puntatore Vettore come parametro a funzione Puntatori e stringhe Vettori di puntatori 2 2006 Politecnico di Torino 1 Vettore = puntatore Data una

Dettagli

Il linguaggio dei computer: rappresentazione in binario e algoritmi di conversione 20 settembre 2017

Il linguaggio dei computer: rappresentazione in binario e algoritmi di conversione 20 settembre 2017 Il linguaggio dei computer: rappresentazione in binario e algoritmi di conversione 20 settembre 2017 Architettura degli Elaboratori L Architettura (informatica) è l insieme dei criteri in base ai quali

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

Esempi di programmazione in C

Esempi di programmazione in C Esempi di programmazione in C Problemi elementari..................................... 363 Somma tra due numeri positivi......................... 363 Moltiplicazione di due numeri positivi attraverso la

Dettagli

Alberi. CORDA Informatica. A. Ferrari. Testi da. Marco Bernardo Edoardo Bontà. Dispense del Corso di. Algoritmi e Strutture Dati

Alberi. CORDA Informatica. A. Ferrari. Testi da. Marco Bernardo Edoardo Bontà. Dispense del Corso di. Algoritmi e Strutture Dati Alberi CORDA Informatica A. Ferrari Testi da Marco Bernardo Edoardo Bontà Dispense del Corso di Algoritmi e Strutture Dati Albero - definizione Albero Figli, fratelli, nodi, foglie Grado, livello, altezza,

Dettagli

Dati aggregati. Violetta Lonati

Dati aggregati. Violetta Lonati Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica - in breve: Definizione di tipi Array Stringhe Strutture

Dettagli

Ordinamento di una lista: bubble-sort

Ordinamento di una lista: bubble-sort Ordinamento di una lista: bubble-sort L idea è di far galleggiare il minimo della lista nelle prima posizione Riduco la parte di lista da considerare, escludendo le prime posizioni già ordinate Ordinamento:

Dettagli

Precisazione sui tipi in ANSi C

Precisazione sui tipi in ANSi C Precisazione sui tipi in ANSi C Tipi primitivi del C Un tipo è costituito da un insieme di valori ed un insieme di operazioni su questi valori. Classificazione dei tipi primitivi del C scalari aritmetici:

Dettagli

Organizzazione Fisica dei Dati (Parte II)

Organizzazione Fisica dei Dati (Parte II) Modello Fisico dei Dati Basi di Dati / Complementi di Basi di Dati 1 Organizzazione Fisica dei Dati (Parte II) Angelo Montanari Dipartimento di Matematica e Informatica Università di Udine Modello Fisico

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

Esempio di Prova Scritta

Esempio di Prova Scritta Esempio di Prova Scritta La prova scritta è composta da alcuni esercizi per un totale di 10 punti (durata:circa 1h15 ). Le tipologie di esercizi possibili comprendono:! sintesi di una funzione ricorsiva/iterativa,

Dettagli