Laboratorio di Algoritmi e Strutture Dati II Semestre 2005/2006. Ordinamenti: mergesort e quicksort
|
|
- Enrico Rossini
- 8 anni fa
- Visualizzazioni
Transcript
1 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 delle loro proprietà ha permesso la loro utilizzazione nelle applicazioni più disparate Occupano un posto di prominenza assoluta nell infrastruttura informatica mondiale Quicksort è stato definito come uno dei 10 algoritmi più importanti del XX secolo per la scienza l ingegneria Mergersort mergesort della libreria standard C Java system sort per array di oggetti (metodo Arrays.sort) Ordinamento stabile di Perl, Python ed altri linguaggi Quicksort Qsort della libreria standard C Ordinamento Java per array di tipi base (int, float, etc) II Semestre 2005/2006 Laboratorio Algoritmi - Marco Antoniotti 1/30 1
2 Mergesort Mergesort Si divide l array in due parti Le si ordinano usando mergesort (ricorsione) Le si ricombinano in un array ordinato ( merge ) II Semestre 2005/2006 Laboratorio Algoritmi - Marco Antoniotti 2/30 Mergesort: esempio II Semestre 2005/2006 Laboratorio Algoritmi - Marco Antoniotti 3/30 2
3 Merging L operazione finale di merging combina due array (o liste) ordinate in un array (o lista) restituita come risultato L operazione viene fatta utilizzando un array ausiliario static void merge(int a[], int aux[], int l, int m, int r) { int k = l; int i = l; int j = m; for (; k < r; k++) aux[k] = a[k]; for (k = l; k < r; k++) { if (i >= m) a[k] = aux[j++]; else if (j >= r) a[k] = aux[i++]; else if (aux[j] < aux[i]) a[k] = aux[j++]; else a[k] = aux[i++]; II Semestre 2005/2006 Laboratorio Algoritmi - Marco Antoniotti 4/30 Mergesort Il codice per una funzione mergesort di libreria potrebbe essere il seguente static void do_mergesort(int a[], int aux[], int l, int r) { int mid; if (r <= l + 1) return; mid = (r + l) / 2; do_mergesort(a, aux, l, mid); do_mergesort(a, aux, mid + 1, r); merge(a, aux, l, mid, r); void sorting_mergesort(int a[], int n_elements) { int* aux = (int*) malloc(n_elements * sizeof(int)); do_mergesort(a, aux, 0, n_elements); free(aux); II Semestre 2005/2006 Laboratorio Algoritmi - Marco Antoniotti 5/30 3
4 Analisi: memoria Quanta memoria richiede mergesort? Array iniziale: N Array ausiliario: N Variabili locali: costante Profondità dello stack di chiamate: lg(n) Totale: 2N + O(lg(N)) Quanta memoria richiedono gli altri algoritmi di ordinamento? Array iniziale: N + O(1) (ad esempio bubblesort e selectionsort) L ordinamento avviene in-place N + O(lg(n)) Per i più audaci ed annoiati Come si fa a fare l operazione di merge in-place? [Kronrud 1969] II Semestre 2005/2006 Laboratorio Algoritmi - Marco Antoniotti 6/30 Analisi: tempo Quanto tempo richiede mergesort? Definizione sia T(N) il numero di confronti La funzione di ricorrenza per mergesort è T (N) = T N /2 0 se N =1 ( ) +T ( N /2 ) + N altrimenti L equazione di ricorrenza per mergesort è della forma canonica prevista dal Master Theorem (cfr. Cormen, Leiserson e Rivest) T (N) = a T (N /b)+ f (N) Siccome f (N) = Θ( N lg(2) ) la soluzione è ( ) = Θ(N lg(n)) T (N) = Θ N lg(2) lg(n) II Semestre 2005/2006 Laboratorio Algoritmi - Marco Antoniotti 7/30 4
5 Analisi: tempo Prova con albero di ricorsione II Semestre 2005/2006 Laboratorio Algoritmi - Marco Antoniotti 8/30 Mergesort: considerazioni pratiche e generalizzazione dell interfaccia L interfaccia presentata è molto semplice e non generica L interfaccia generica (e l implementazione) per mergesort dovrebbe essere la seguente void sorting_merge(void* a, int n, size_t s, sorting_cmp_fun_t compare) { void* aux = (void*) malloc(n * s); do_sorting(a, aux, compare, s, 0, n); free(aux); static void do_sorting(void* a, void* aux, sorting_cmp_fun_t compare, size_t s, int l, int r) { int mid; if (r <= l + 1) return; mid = (l + r) / 2; do_sorting(a, aux, compare, s, l, mid); do_sorting(a, aux, compare, s, mid + 1, r); merge(a, aux, compare, s, l, mid, r); II Semestre 2005/2006 Laboratorio Algoritmi - Marco Antoniotti 9/30 5
6 Mergesort: considerazioni pratiche e generalizzazione dell interfaccia La funzione generica merge diventa: void merge(void* a, void* aux, sorting_cmp_fun_t compare, size_t s, int l, int m, int r) { int k; int i = l; int j = m; for (k = l; k < r; k++) memcpy(aux + k * s, a + k * s, s); for (k = l; k < r; k++) { if (i >= m) memcpy(a + k * s, aux + (j++) * s, s); else if (j >= r) memcpy(a + k * s, aux + (i++) * s, s); else if (0 > compare(aux + j * s, aux + i * s)) memcpy(a + k * s, aux + (j++) * s, s); else memcpy(a + k * s, aux + (i++) * s, s); II Semestre 2005/2006 Laboratorio Algoritmi - Marco Antoniotti 10/30 Mergesort: ottimizzazioni Alcune ottimizzazioni pratiche Codice più complicato Sentinelle L uso di sentinelle ci permette di evitare due test sui limiti degli array Usare insertion sort su (sotto)array di piccole dimensioni Mergesort fa troppo lavoro extra per (sotto)array di piccole dimensioni Di solito si passa a insertion sort per (sotto)arrays di lunghezza 6 o 7 Stop se l array è già ordinato Ovvero se l elemento più grande dell array di sinistra è più piccolo del più piccolo elelmento dell array di destra Utile per arrays di input (quasi) ordinati Eliminare la copia dell array ausiliario Si scambia il ruolo dei due array ad ogni chiamata Si riduce il tempo richiesto (di una costante) ma non la memoria II Semestre 2005/2006 Laboratorio Algoritmi - Marco Antoniotti 11/30 6
7 Quicksort II Semestre 2005/2006 Laboratorio Algoritmi - Marco Antoniotti 12/30 Quicksort Si mischia l array Si partiziona l array L elemento a[i] è nella sua posizione finale per un dati i Nessun elemento a sinistra di i è più grande di a[i] Nessun elemento a destra di i è più piccolo di a[i] Si ordinano le due parti delimitate da i ricorsivamente Problema: Come si può partizionare l array in maniera efficiente? II Semestre 2005/2006 Laboratorio Algoritmi - Marco Antoniotti 13/30 7
8 Partizione in Quicksort II Semestre 2005/2006 Laboratorio Algoritmi - Marco Antoniotti 14/30 Quicksort: esempio II Semestre 2005/2006 Laboratorio Algoritmi - Marco Antoniotti 15/30 8
9 Quicksort: implementazione in C (1) void do_quicksort(int a[], int l, int r) { int p; if (r <= l) return; p = partition(a, l, r); do_quicksort(a, l, p - 1); do_quicksort(a, p + 1, r); void sorting_quicksort(int a[], int n) { shuffle(a, n); do_quicksort(a, 0, n - 1); II Semestre 2005/2006 Laboratorio Algoritmi - Marco Antoniotti 16/30 Quicksort: implementazione in C (1) void shuffle(int a[], int n) { int k; for (k = 0; k < n; k++) { exchange(&(a[rand() % n]), &(a[rand() % n])) II Semestre 2005/2006 Laboratorio Algoritmi - Marco Antoniotti 17/30 9
10 Quicksort: implementazione in C (1) void partition(int a[], int l, int r) { int i = l - 1; int j = r; while (1) { /* Cerca l elemento da scambiare a destra. */ while (a[++i] < a[r]) if (i == r) break; /* Cerca l elemento da scambiare a sinistra. */ while (a[r] < a[--j]) if (j == l) break; if (i >= j) break; exchange(&(a[i]), &(a[j])); exchange(&(a[i]), &(a[r])); return i; II Semestre 2005/2006 Laboratorio Algoritmi - Marco Antoniotti 18/30 Quicksort: dettagli implementativi Partizione in loco Usare un array ausiliario semplifica l operazione ma non ne vale la pena Terminazione del ciclo Controllare quando i due puntatori si incrociano è più complicato di quanto sembri Controllo sui limiti Il test (i == r) è ridondante, ma il test (l == j) non lo è Casualità dell input Questo passo è necessario per garantire le prestazioni dell algoritmo Elementi duplicati In presenza di elementi duplicati, sebbene controintuitivo, è meglio fermarsi quando si trova un elemento uguale all elemento di partizione (il pivot) II Semestre 2005/2006 Laboratorio Algoritmi - Marco Antoniotti 19/30 10
11 Quicksort: caratteristiche di prestazioni Caso peggiore Il numero di confronti è quadratico La probabilità di questo evento è molto bassa Attenzione Molti libri di testo riportano implementazioni potenzialmente quadratiche se L input è ordinato L input è in ordine inverso L input contiene molti elementi duplicati II Semestre 2005/2006 Laboratorio Algoritmi - Marco Antoniotti 20/30 Quicksort: caso medio Tempo medio Circa N lg(n) confronti Assunzione: l input è in ordine casuale Note Circa il 39% più confronti di mergesort In pratica più veloce di mergesort, dato che molte altre istruzioni sono più veloci Attenzione: molti libri di testo hanno implementazioni quadratiche in presenza di elementi duplicati anche con input casuale II Semestre 2005/2006 Laboratorio Algoritmi - Marco Antoniotti 21/30 11
12 Quicksort: miglioramenti pratici Mediana del campione La miglior scelta del pivot è la mediana Ma come calcoliamo la mediana? Si stima la mediana calcolando la mediana del campione Usare insertion sort per input di piccole dimensioni Parametri ottimizzati Mediana di 3 elementi Limite per il cambio ad insertion sort: circa 10 elementi Versione semi ricorsiva Ultima chiamata è in posizione tail-ricorsiva Versione non ricorsiva Gestione esplicita di uno stack (profondità garantita O(lg(N)) Si ordina per prima la partizione più piccola II Semestre 2005/2006 Laboratorio Algoritmi - Marco Antoniotti 22/30 Elementi duplicati Elementi uguali: sempre presenti in tutte le applicazioni in cui è necessario aggregare gli elementi uguali Ordinare una popolazione per età Trovare punti collineari Rimuovere i duplicati da una lista di posta Applicazione tipica Input molto grande Numero di classi di equivalenza basso Soluzione: quicksort a 3 vie II Semestre 2005/2006 Laboratorio Algoritmi - Marco Antoniotti 23/30 12
13 Partizione a 3 vie Partizione a 3 vie Gli elementi tra i e j sono uguali al pivot v Nessun elemento più grande del pivot alla sinistra di i Nessun elemento più piccolo del pivot alla destra di j Noto anche come il problema della bandiera olandese Non usato prima della metà degli anni 90 Incorporato in Java ed in alcune implementazioni della libreria C Quicksort con partizione a 3 vie è ottimale La prova richiede nozioni di teoria dell informazione II Semestre 2005/2006 Laboratorio Algoritmi - Marco Antoniotti 24/30 Soluzione del problema della bandiera olandese Soluzione Si partiziona l array in 4 parti Nessun elemento più grande del pivot alla sinistra di i Nessun elemento più piccolo alla destra di j Elementi uguali alla sinistra di p Elementi uguali alla sinistra di q Infine si muvono gli elementi uguali al centro Tutte le proprietà più utili sono verificate In loco Non molto codice Lineare anche se molti elementi sono uguali Poche operazioni extra se non ci sono elementi uguali II Semestre 2005/2006 Laboratorio Algoritmi - Marco Antoniotti 25/30 13
14 Implementazione void q3sort(int a[], int l, int r) { int i, j, p, q, k; if (r <= l) return; i = p = l - 1; j = q = r; while (1) { while (a[++i] < a[r]); Partizione a 4 vie while (a[r] < a[--j]) if (j == l) break; if (i >= j) break; exchange(a, i, j); if (a[i] == a[r]) exchange(a, ++p, i); if (a[j] == a[r]) exchange(a, --q, j); exchange(a, i, r); j = i - 1; i = i + 1; for (k = l; k <=p; k++) exchange(a, k, j--); for (k = r - 1; k >=q; k--) exchange(a, k, i++); q3sort(a, l, j); q3sort(a, i, r); Scambio degli elementi uguali a destra o sinistra Spostamento degli elementi uguali al centro II Semestre 2005/2006 Laboratorio Algoritmi - Marco Antoniotti 26/30 Selezione Selezione: trovare il k-esimo elemento Min: k = 1 Max: k = N Mediana: k = N/2 Facile minimo o massimo com O(N) confronti Mediana con O(N lg(n)) Sfida Mediana in tempo lineare II Semestre 2005/2006 Laboratorio Algoritmi - Marco Antoniotti 27/30 14
15 Quickselect Soluzione Partizione dell input in modo da L elemento a[i] è nella sua posizione finale per un dati i Nessun elemento a sinistra di i è più grande di a[i] Nessun elemento a destra di i è più piccolo di a[i] Si ripete in uno dei sotto-array in dipendenza da i void quickselect(int a[], int n, int k) { int l, r; shuffle(a, n); l = 0; r = n - 1; while (r > l) { int i = partition(a, l, r); if (i > k) r = i - 1; else if (i < k) l = i + 1; else return; Al termine a[k] contiene il (k+1)-esimo elemento II Semestre 2005/2006 Laboratorio Algoritmi - Marco Antoniotti 28/30 Quickselect: analisi Quickselect richiede, in media, tempo lineare Intuitivamente, ogni partizione divide l input a metà N + N/2 + N/4 + < 2N confronti L analisi formale è simile a quella per quicksort: la prova è che la media del numero di confronti è 2N + k ln N N + (N k)ln k N k Caso peggiore Il caso peggiore è Ω(N 2 ) confronti, ma il riordino iniziale lo rende estremamente improbabile II Semestre 2005/2006 Laboratorio Algoritmi - Marco Antoniotti 29/30 15
16 Sommario Algoritmi ottimi di ordinamento con confronti: O(N lg(n)) Mergesort 2N memoria Quicksort Operazione di partizione è fondamentale Assunzione di input casuale pure fondamentale Quicksort con partizione a 3 vie ottimo Quickselect Selezione del k-esimo elemento in tempo lineare sfruttando l operazione di partizione II Semestre 2005/2006 Laboratorio Algoritmi - Marco Antoniotti 30/30 16
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
DettagliCorso 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
DettagliEsercizi 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
DettagliAlgoritmi 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
DettagliGli algoritmi ricorsivi di ordinamento. Paolo Camurati Dip. Automatica e Informatica Politecnico di Torino
ordinamento Paolo Camurati Dip. Automatica e Informatica Politecnico di Torino Merge Sort Ricorsivo, divide et impera Stabile Divisione: due sottovettori SX e DX rispetto al centro del vettore. p r A.A.
DettagliNote su quicksort per ASD 2010-11 (DRAFT)
Note su quicksort per ASD 010-11 (DRAFT) Nicola Rebagliati 7 dicembre 010 1 Quicksort L algoritmo di quicksort è uno degli algoritmi più veloci in pratica per il riordinamento basato su confronti. L idea
DettagliComplessità Computazionale
Complessità Computazionale Analisi Algoritmi e pseudocodice Cosa significa analizzare un algoritmo Modello di calcolo Analisi del caso peggiore e del caso medio Esempio di algoritmo in pseudocodice INSERTION
Dettagli10 - Programmare con gli Array
10 - Programmare con gli 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
DettagliUna funzione è detta ricorsiva se chiama, direttamente o indirettamente, se stessa. In C tutte le funzioni possono essere usate ricorsivamente.
Ricorsione Funzioni ricorsive Una funzione è detta ricorsiva se chiama, direttamente o indirettamente, se stessa. In C tutte le funzioni possono essere usate ricorsivamente. Un esempio di funzione ricorsiva
DettagliFunzioni in C. Violetta Lonati
Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica Funzioni - in breve: Funzioni Definizione di funzioni
DettagliAlgoritmi e Strutture Dati
Algoritmi e Strutture Dati Soluzione esercizi di approfondimento Stefano Leucci stefano.leucci@univaq.it Una terza variante dell IS InsertionSort3 (A) 1. for k=1 to n-1 do 2. x = A[k+1] 3. j = ricerca_binaria(a[1,k],x)
DettagliALGORITMI DI ORDINAMENTO E RICERCA BINARIA. Docente: Giorgio Giacinto AA 2008/2009. problema dell ordinamento in modi diversi
Università degli Studi di Cagliari Corso di Laurea Specialistica in Ingegneria per l Ambiente ed il Territorio Corso di Laurea Specialistica in Ingegneria Civile - Strutture FONDAMENTI DI INFORMATICA 2
DettagliAlberi binari di ricerca
Alberi binari di ricerca Definizione Visita dell albero inorder Ricerca Ricerca minimo, massimo e successore. Inserimento ed eliminazione di un nodo Problema del bilanciamento dell albero Albero binario
DettagliCorso di Informatica
Corso di Informatica Modulo T Scorrimento-Rotazione-Ricerca Prerequisiti Programmazione elementare Conoscenza ed uso di vettori Introduzione Lo scopo di questa Unità è approfondire il concetto di vettore
DettagliGESTIONE INFORMATICA DEI DATI AZIENDALI
GESTIONE INFORMATICA DEI DATI AZIENDALI Alberto ZANONI Centro Vito Volterra Università Tor Vergata Via Columbia 2, 00133 Roma, Italy zanoni@volterra.uniroma2.it Rudimenti di programmazione Programming
DettagliGli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori
Gli array Array e puntatori Laboratorio di Informatica I un array è un insieme di elementi (valori) avente le seguenti caratteristiche: - un array è ordinato: agli elementi dell array è assegnato un ordine
DettagliAA 2006-07 LA RICORSIONE
PROGRAMMAZIONE AA 2006-07 LA RICORSIONE AA 2006-07 Prof.ssa A. Lanza - DIB 1/18 LA RICORSIONE Il concetto di ricorsione nasce dalla matematica Una funzione matematica è definita ricorsivamente quando nella
Dettagli4.1 Modelli di calcolo analisi asintotica e ricorrenze
4 Esercizi Prima Parte 4.1 Modelli di calcolo analisi asintotica e ricorrenze Esercizio 4 1 Rispondere alle seguenti domande: 1. Come misuriamo l efficienza di un algoritmo?. Quali sono gli algoritmi più
DettagliAlgebra di Boole: Concetti di base. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica
Fondamenti di Informatica Algebra di Boole: Concetti di base Fondamenti di Informatica - D. Talia - UNICAL 1 Algebra di Boole E un algebra basata su tre operazioni logiche OR AND NOT Ed operandi che possono
DettagliCorrettezza. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa 10. A. Miola Novembre 2007
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1 Dispensa 10 Correttezza A. Miola Novembre 2007 http://www.dia.uniroma3.it/~java/fondinf1/ Correttezza 1 Contenuti Introduzione alla correttezza
DettagliScheduling della CPU. Sistemi multiprocessori e real time Metodi di valutazione Esempi: Solaris 2 Windows 2000 Linux
Scheduling della CPU Sistemi multiprocessori e real time Metodi di valutazione Esempi: Solaris 2 Windows 2000 Linux Sistemi multiprocessori Fin qui si sono trattati i problemi di scheduling su singola
DettagliBontà dei dati in ingresso
COMPLESSITÀ COMPUTAZIONALE DEGLI ALGORITMI Fondamenti di Informatica a.a.2006/07 Prof. V.L. Plantamura Dott.ssa A. Angelini Il costo puo' dipendere dal valore dei dati in ingresso Un tipico esempio è dato
DettagliEsercizi Capitolo 6 - Alberi binari di ricerca
Esercizi Capitolo 6 - Alberi binari di ricerca Alberto Montresor 23 settembre 200 Alcuni degli esercizi che seguono sono associati alle rispettive soluzioni. Se il vostro lettore PDF lo consente, è possibile
DettagliLe funzioni in C. I programmi C sono costituiti da definizioni di variabili e funzioni.
Le funzioni in C I programmi C sono costituiti da definizioni di variabili e funzioni. Una definizione di funzione ha il seguente formato: tipo-ritornato nome-funzione(lista-parametri) { dichiarazioni
DettagliSistemi Operativi. Interfaccia del File System FILE SYSTEM : INTERFACCIA. Concetto di File. Metodi di Accesso. Struttura delle Directory
FILE SYSTEM : INTERFACCIA 8.1 Interfaccia del File System Concetto di File Metodi di Accesso Struttura delle Directory Montaggio del File System Condivisione di File Protezione 8.2 Concetto di File File
DettagliAlgoritmi di ordinamento
Algoritmi di ordinamento Il problema Vogliamo ordinare un array monodimensionale in modo crescente per il caso decrescente valgono le stesse considerazioni Vari algoritmi possibili Diverse caratteristiche
DettagliLaboratorio 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
DettagliAlgoritmi di ordinamento
Algoritmi di ordinamento Il problema Vogliamo ordinare un array monodimensionale in modo crescente per il caso decrescente valgono le stesse considerazioni Vari algoritmi possibili Diverse caratteristiche
DettagliCALCOLO DEL MASSIMO COMUN DIVISORE
CALCOLO DEL MASSIMO COMUN DIVISORE Problema: "calcolare il Massimo Comun Divisore (M.C.D.) di due numeri naturali, A e B, secondo l'algoritmo cosiddetto delle sottrazioni successive". L'algoritmo "delle
DettagliAlgoritmi e Strutture Dati & Laboratorio di Algoritmi e Programmazione
Algoritmi e Strutture Dati & Laboratorio di Algoritmi e Programmazione Esercizi II parte Esercizio 1 Discutere la correttezza di ciascuna delle seguenti affermazioni. Dimostrare formalmente la validità
DettagliCOGNOME E NOME (IN STAMPATELLO) MATRICOLA
Politecnico di Milano Facoltà di Ingegneria dell Informazione Informatica 3 Proff. Ghezzi, Lanzi, Matera e Morzenti Seconda prova in itinere 4 Luglio 2005 COGNOME E NOME (IN STAMPATELLO) MATRICOLA Risolvere
DettagliRicerche, ordinamenti e fusioni. 5.1 Introduzione. 5.2 Ricerca completa
Ricerche, ordinamenti e fusioni 5.1 Introduzione Questo capitolo ci permette di fare pratica di programmazione utilizzando gli strumenti del linguaggio introdotti finora. A una prima lettura possono essere
DettagliUniversità di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2013-14. Pietro Frasca.
Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2013-14 Pietro Frasca Lezione 11 Martedì 12-11-2013 1 Tecniche di allocazione mediante free list Generalmente,
DettagliAlgoritmi di ordinamento
Algoritmi di ordinamento Scopo di questa esercitazione: Comprendere la complessità del problema ordinamento cerchiamo di valutare il costo di una soluzione (confrontandola con un altra ) Modifiche al codice
DettagliConcetto di Funzione e Procedura METODI in Java
Fondamenti di Informatica Concetto di Funzione e Procedura METODI in Java Fondamenti di Informatica - D. Talia - UNICAL 1 Metodi e Sottoprogrammi Mentre in Java tramite le classi e gli oggetti è possibile
DettagliAllocazione dinamica della memoria - riepilogo
Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica In breve Storage duration Allocazione dinamica della
Dettagli16.3.1 Alberi binari di ricerca
442 CAPITOLO 16. STRUTTURE DI DATI DINAMICHE root 7 5 11 2 8 13 10 Figura 16.11 Esempio di albero binario: ogni nodo contiene il dato da immagazzinare e tre puntatori che definiscono le sue relazioni di
DettagliProgrammazione dinamica
Capitolo 6 Programmazione dinamica 6.4 Il problema della distanza di edit tra due stringhe x e y chiede di calcolare il minimo numero di operazioni su singoli caratteri (inserimento, cancellazione e sostituzione)
DettagliFondamenti di Informatica e Laboratorio T-AB T-16 Progetti su più file. Funzioni come parametro. Parametri del main
Fondamenti di Informatica e Laboratorio T-AB T-16 Progetti su più file. Funzioni come parametro. Parametri del main Paolo Torroni Dipartimento di Elettronica, Informatica e Sistemistica Università degli
DettagliINFORMATICA 1 L. Mezzalira
INFORMATICA 1 L. Mezzalira Possibili domande 1 --- Caratteristiche delle macchine tipiche dell informatica Componenti hardware del modello funzionale di sistema informatico Componenti software del modello
DettagliL algoritmo di ricerca binaria. Daniele Varin LS Ing. Informatica Corso di Informatica teorica Docente: prof. Paolo Sipala
L algoritmo di ricerca binaria Daniele Varin LS Ing. Informatica Corso di Informatica teorica Docente: prof. Paolo Sipala L algoritmo di ricerca binaria (o dicotomica) In informatica,, la ricerca dicotomica
DettagliStrutture. Strutture e Unioni. Definizione di strutture (2) Definizione di strutture (1)
Strutture Strutture e Unioni DD cap.10 pp.379-391, 405-406 KP cap. 9 pp.361-379 Strutture Collezioni di variabili correlate (aggregati) sotto un unico nome Possono contenere variabili con diversi nomi
DettagliInformatica. appunti dalle lezioni del 20/09/2011 e del 27/09/2011
Informatica appunti dalle lezioni del 20/09/2011 e del 27/09/2011 Definizioni Informatica: scienza per lʼelaborazione automatica dellʼinformazione Informatica = Informazione + Automatica Informazione:
DettagliB+Trees. Introduzione
B+Trees Introduzione B+Trees Il B+Trees e la variante maggiormente utilizzata dei BTrees BTrees e B+trees fanno parte della famiglia degli alberi di ricerca. Nel B+Trees i dati sono memorizzati solo nelle
DettagliLa struttura dati ad albero binario
La struttura dati ad albero binario L albero è una struttura dati nella quale le informazioni sono organizzate in modo gerarchico, dall alto verso il basso. Gli elementi di un albero si chiamano nodi,
DettagliCalcolare il massimo di una lista
Calcolare il massimo di una lista Ieri abbiamo imparato a calcolare il massimo di una lista predefinita: lista = [4,24,-89,81,3,0,-12,31] max = lista[0] # questo e' un commento: primo elemento di lista
DettagliInformatica 3. LEZIONE 21: Ricerca su liste e tecniche di hashing. Modulo 1: Algoritmi sequenziali e basati su liste Modulo 2: Hashing
Informatica 3 LEZIONE 21: Ricerca su liste e tecniche di hashing Modulo 1: Algoritmi sequenziali e basati su liste Modulo 2: Hashing Informatica 3 Lezione 21 - Modulo 1 Algoritmi sequenziali e basati su
DettagliCorso 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
DettagliPROBLEMA 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
DettagliOggetti Lezione 3. aspetti generali e definizione di classi I
Programmazione a Oggetti Lezione 3 Il linguaggio Java: aspetti generali e definizione di classi I Sommario Storia e Motivazioni Definizione di Classi Campi e Metodi Istanziazione di oggetti Introduzione
DettagliRicerca binaria. Operazione dominante: confronto
procedure ordinaperfusioni(var a: nelements; n: integer); var b: nelements; procedure mergesort(var a,b: nelements; primo,ultimo:integer); var q: integer; procedure merge(var a,b: nelements; primo, ultimo,
DettagliInformatica 3. LEZIONE 23: Indicizzazione. Modulo 1: Indicizzazione lineare, ISAM e ad albero Modulo 2: 2-3 trees, B-trees e B + -trees
Informatica 3 LEZIONE 23: Indicizzazione Modulo 1: Indicizzazione lineare, ISAM e ad albero Modulo 2: 2-3 trees, B-trees e B + -trees Informatica 3 Lezione 23 - Modulo 1 Indicizzazione lineare, ISAM e
DettagliQuick 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
DettagliUn po di statistica. Christian Ferrari. Laboratorio di Matematica
Un po di statistica Christian Ferrari Laboratorio di Matematica 1 Introduzione La statistica è una parte della matematica applicata che si occupa della raccolta, dell analisi e dell interpretazione di
DettagliAppunti tratti dal videocorso on-line di Algoritmi e Programmazione Avanzata By ALeXio
Appunti tratti dal videocorso on-line di Algoritmi e Programmazione Avanzata By ALeXio 1-La memoria dinamica La scrittura di un programma (indipendentemente dal linguaggio adottato) deve sempre tener conto
Dettagli12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP)
12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP) Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica,
Dettagli3) Il seguente numerale A1F0 in base 16 a quale numero in base 10 corrisponde?
Leggete attentamente le domande del test e date la/le vostra/e risposta/e. 1) Per quanto tempo la memoria RAM di un personal computer conserva le informazioni? Finchè lo hard disk funziona in modo corretto
DettagliDefinire all'interno del codice un vettore di interi di dimensione DIM, es. int array[] = {1, 5, 2, 4, 8, 1, 1, 9, 11, 4, 12};
ESERCIZI 2 LABORATORIO Problema 1 Definire all'interno del codice un vettore di interi di dimensione DIM, es. int array[] = {1, 5, 2, 4, 8, 1, 1, 9, 11, 4, 12}; Chiede all'utente un numero e, tramite ricerca
DettagliAlgoritmo 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
DettagliProgrammazione I - Laboratorio
Programmazione I - Laboratorio Esercitazione 2 - Funzioni Gianluca Mezzetti 1 Paolo Milazzo 2 1. Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ mezzetti mezzetti di.unipi.it 2.
DettagliQUICKSORT. 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
DettagliSOMMARIO Coda (queue): QUEUE. QUEUE : specifica QUEUE
SOMMARIO Coda (queue): Specifica: interfaccia. Implementazione: Strutture indicizzate (array): Array di dimensione variabile. Array circolari. Strutture collegate (nodi). Prestazioni. Strutture Software
DettagliProva di Laboratorio di Programmazione
Prova di Laboratorio di Programmazione 6 febbraio 015 ATTENZIONE: Non è possibile usare le classi del package prog.io del libro di testo. Oltre ai metodi richiesti in ciascuna classe, è opportuno implementare
DettagliBreve riepilogo della puntata precedente:
Breve riepilogo della puntata precedente: 1. In C, il passaggio dei parametri alle funzioni avviene sempre per copia, ovvero il valore del parametro viene copiato all'interno della variabile che rappresenta
DettagliPROVA FINALE V. AULETTA G. PERSIANO ALGORITMI II - -MAGIS INFO
PROVA FINALE V. AULETTA G. PERSIANO ALGORITMI II - -MAGIS INFO 1. Load Balancing Un istanza del problema del load balancing consiste di una sequenza p 1,..., p n di interi positivi (pesi dei job) e un
DettagliLABORATORIO DI PROGRAMMAZIONE 2012 2013 EDIZIONE 1, TURNO B
LABORATORIO DI PROGRAMMAZIONE 2012 2013 EDIZIONE 1, TURNO B 23.XI.2012 VINCENZO MARRA Indice Esercizio 1 1 Menu 1 Tempo: 35 min. 2 Commento 1 2 Esercizio 2 2 Ordinamento e ricerca binaria con la classe
DettagliFondamenti dell Informatica Ricorsione e Iterazione Simona Ronchi Della Rocca (dal testo: Kfoury, Moll and Arbib, cap.5.2)
Fondamenti dell Informatica Ricorsione e Iterazione Simona Ronchi Della Rocca (dal testo: Kfoury, Moll and Arbib, cap.5.2) Definiamo innanzitutto una relazione d ordine tra le funzioni. Siano φ e ψ funzioni
DettagliSemplici Algoritmi di Ordinamento
Fondamenti di Informatica Semplici Algoritmi di Ordinamento Fondamenti di Informatica - D. Talia - UNICAL 1 Ordinamento di una sequenza di elementi Esistono molti algoritmi di ordinamento. Tutti ricevono
DettagliCorso di Matematica per la Chimica
Dott.ssa Maria Carmela De Bonis a.a. 203-4 I sistemi lineari Generalità sui sistemi lineari Molti problemi dell ingegneria, della fisica, della chimica, dell informatica e dell economia, si modellizzano
DettagliTipi di Dato Ricorsivi
Tipi di Dato Ricorsivi Luca Abeni September 2, 2015 1 Tipi di Dato Vari linguaggi di programmazione permettono all utente di definire nuovi tipi di dato definendo per ogni nuovo tipo l insieme dei suoi
DettagliIndici di dispersione
Indici di dispersione 1 Supponiamo di disporre di un insieme di misure e di cercare un solo valore che, meglio di ciascun altro, sia in grado di catturare le caratteristiche della distribuzione nel suo
DettagliSommario. Definizione di informatica. Definizione di un calcolatore come esecutore. Gli algoritmi.
Algoritmi 1 Sommario Definizione di informatica. Definizione di un calcolatore come esecutore. Gli algoritmi. 2 Informatica Nome Informatica=informazione+automatica. Definizione Scienza che si occupa dell
DettagliIntroduzione ai tipi di dato astratti: applicazione alle liste
Universitàdegli Studi di L Aquila Facoltàdi Scienze M.F.N. Corso di Laurea in Informatica Corso di Laboratorio di Algoritmi e Strutture Dati A.A. 2005/2006 Introduzione ai tipi di dato astratti: applicazione
DettagliIntroduzione al MATLAB c Parte 2
Introduzione al MATLAB c Parte 2 Lucia Gastaldi Dipartimento di Matematica, http://dm.ing.unibs.it/gastaldi/ 18 gennaio 2008 Outline 1 M-file di tipo Script e Function Script Function 2 Costrutti di programmazione
DettagliLa selezione binaria
Andrea Marin Università Ca Foscari Venezia Laurea in Informatica Corso di Programmazione part-time a.a. 2011/2012 Introduzione L esecuzione di tutte le istruzioni in sequenza può non è sufficiente per
DettagliEsercizi per il corso di Algoritmi, anno accademico 2011/12
Esercizi per il corso di Algoritmi, anno accademico 2011/12 Esercizi sulla Tecnica Divide et Impera N.B. Tutti gli algoritmi vanno scritti in pseudocodice (non in Java, nè in C++, etc. ). Di tutti gli
DettagliAlgoritmi e Strutture Dati & Laboratorio di Algoritmi e Programmazione
Algoritmi e Strutture Dati & Laboratorio di Algoritmi e Programmazione Appello dell 8 Febbraio 2005 Esercizio 1 (ASD) 1. Dire quale delle seguenti affermazioni è vera giustificando la risposta. (a) lg
DettagliCorso di Laurea Ingegneria Informatica Fondamenti di Informatica 2
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2 Dispensa 10 Strutture collegate - 2 A. Miola Febbraio 2008 http://www.dia.uniroma3.it/~java/fondinf2/ Strutture collegate - 2 1 Contenuti!Strutture
DettagliAlgoritmi e Strutture Dati
Algoritmi e Strutture Dati Capitolo 4 Ordinamento Ordinamento Dato un insieme S di n oggetti presi da un dominio totalmente ordinato, ordinare S Esempi: ordinare una lista di nomi alfabeticamente, o un
DettagliCrittografia. Primalità e Fattorizzazione. Corso di Laurea Specialistica. in Informatica
Crittografia Corso di Laurea Specialistica in Informatica Primalità e Fattorizzazione Alberto Leporati Dipartimento di Informatica, Sistemistica e Comunicazione Università degli Studi di Milano Bicocca
DettagliB-Tree. Struttura dati usata in applicazioni che necessitano di gestire insiemi di chiavi ordinate Una variante (B+-Tree) è diffusa in:
B-Tree Prof. Rudolf Bayer Struttura dati usata in applicazioni che necessitano di gestire insiemi di chiavi ordinate Una variante (B+-Tree) è diffusa in: Filesystem: btrfs, NTFS, ReiserFS, NSS, XFS, JFS
DettagliCorso di Laurea Ingegneria Informatica Fondamenti di Informatica
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica Dispensa E01 Esempi di programmi A. Miola Ottobre 2011 1 Contenuti Vediamo in questa lezione alcuni primi semplici esempi di applicazioni
DettagliIntroduzione al linguaggio C Gli array
Introduzione al linguaggio C Gli array Vettori nome del vettore (tutti gli elementi hanno lo stesso nome, c) Vettore (Array) Gruppo di posizioni (o locazioni di memoria) consecutive Hanno lo stesso nome
DettagliAlgoritmi di Ordinamento
Algoritmi di Ordinamento 1 Algoritmi di ordinamento Selection Sort Quick Sort Lower bound alla complessità degli algoritmi di ordinamento Statistiche di ordine 2 Selection Sort SelectionSort(dati[]) {
DettagliVerifica che una grammatica sia Context Free nel GrammaReader
Verifica che una grammatica sia Context Free nel GrammaReader Sommario Dispensa di Linguaggi di Programmazione Corrado Mencar Pasquale Lops In questa dispensa si descrivono alcune soluzioni per verificare
DettagliIndirizzo di una funzione. Puntatori a funzioni. Definizione di variabili. Definizione di variabili
Indirizzo di una funzione 2 Puntatori a funzioni Ver. 2.4 Si può chiamare una funzione utilizzando l indirizzo di memoria dal quale inizia il codice eseguibile della funzione stessa L indirizzo di memoria
DettagliDivide et impera (Divide and Conquer) Dividi il problema in sottoproblemi piu` semplici e risolvili ricorsivamente
Divide et impera (Divide and Conquer) Dividi il problema in sottoproblemi piu` semplici e risolvili ricorsivamente Divide et impera - Schema generale Divide-et-impera (P, n) if n k then risolvi direttamente
DettagliLibrerie digitali. Video. Gestione di video. Caratteristiche dei video. Video. Metadati associati ai video. Metadati associati ai video
Video Librerie digitali Gestione di video Ogni filmato è composto da più parti Video Audio Gestito come visto in precedenza Trascrizione del testo, identificazione di informazioni di interesse Testo Utile
DettagliTesti di Esercizi e Quesiti 1
Architettura degli Elaboratori, 2009-2010 Testi di Esercizi e Quesiti 1 1. Una rete logica ha quattro variabili booleane di ingresso a 0, a 1, b 0, b 1 e due variabili booleane di uscita z 0, z 1. La specifica
DettagliEsercizi Capitolo 2 - Analisi di Algoritmi
Esercizi Capitolo - Analisi di Algoritmi Alberto Montresor 19 Agosto, 014 Alcuni degli esercizi che seguono sono associati alle rispettive soluzioni. Se il vostro lettore PDF lo consente, è possibile saltare
DettagliCorso di Laurea Ingegneria Informatica Fondamenti di Informatica 2
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2 Dispensa E08 Soluzione Esercizi F. Gasparetti, C. Limongelli Marzo 2008 http://www.dia.uniroma3.it/~java/fondinf1/ Soluzione Esercizi
DettagliFONDAMENTI di INFORMATICA L. Mezzalira
FONDAMENTI di INFORMATICA L. Mezzalira Possibili domande 1 --- Caratteristiche delle macchine tipiche dell informatica Componenti hardware del modello funzionale di sistema informatico Componenti software
DettagliUso di JUnit. Fondamenti di informatica Oggetti e Java. JUnit. Luca Cabibbo. ottobre 2012
Fondamenti di informatica Oggetti e Java ottobre 2012 1 JUnit JUnit è uno strumento per assistere il programmatore Java nel testing JUnit consente di scrivere test di oggetti e classi Java i test sono
DettagliCamil Demetrescu, Irene Finocchi, Giuseppe F. Italiano. Usa la tecnica del divide et impera:
MergeSort Usa la tecnica del divide et impera: 1 Divide: dividi l array a metà 2 Risolvi i due sottoproblemi ricorsivamente 3 Impera: fondi le due sottosequenze ordinate 1 Esempio di esecuzione 7 2 4 5
DettagliCorso di Informatica
Corso di Informatica Modulo T3 1-Sottoprogrammi 1 Prerequisiti Tecnica top-down Programmazione elementare 2 1 Introduzione Lo scopo di questa Unità è utilizzare la metodologia di progettazione top-down
DettagliTipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:
Tipi primitivi Il linguaggio Java offre alcuni tipi di dato primitivi Una variabile di tipo primitivo può essere utilizzata direttamente. Non è un riferimento e non ha senso tentare di istanziarla mediante
DettagliALGORITMI 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
DettagliFunzioni funzione dominio codominio legge argomento variabile indipendente variabile dipendente
Funzioni In matematica, una funzione f da X in Y consiste in: 1. un insieme X detto dominio di f 2. un insieme Y detto codominio di f 3. una legge che ad ogni elemento x in X associa uno ed un solo elemento
DettagliVC-dimension: Esempio
VC-dimension: Esempio Quale è la VC-dimension di. y b = 0 f() = 1 f() = 1 iperpiano 20? VC-dimension: Esempio Quale è la VC-dimension di? banale. Vediamo cosa succede con 2 punti: 21 VC-dimension: Esempio
DettagliInformatica (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