Corso di Tecniche di Programmazione
|
|
|
- Ambra Bianchi
- 10 anni fa
- Просмотров:
Транскрипт
1 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 Problema: Data una sequenza di elementi in ordine qualsiasi, ordinarla. Questo è un problema fondamentale, che si presenta in moltissimi contesti, ed in diverse forme: ordinamento degli elementi di un array in memoria centrale ordinamento di una collezione in memoria centrale ordinamento di informazioni memorizzate in un file su memoria di massa (file ad accesso casuale su disco, file ad accesso sequenziale su disco o su nastro) Noi consideriamo solo la variante base del problema dell ordinamento. Problema: Dato un vettore a di n elementi in memoria centrale non ordinato, ordinarne gli elementi in ordine crescente. Tecniche di Programmazione Corsi di Laurea in Ingegneria Informatica ed Automatica A.A. 003/004 1
2 Ordinamento per selezione del minimo (selection sort) Esempio: Ordinamento di una pila di carte: seleziono la carta più piccola e la metto da parte delle rimanenti seleziono la più piccola e la metto da parte mi fermo quando rimango con una sola carta Quando ho un vettore: per selezionare l elemento più piccolo tra quelli rimanenti uso un ciclo mettere da parte significa scambiare con l elemento che si trova nella posizione che compete a quello selezionato Tecniche di Programmazione Corsi di Laurea in Ingegneria Informatica ed Automatica A.A. 003/004 Ordinamento per selezione del minimo (selection sort) Implementazione: public static void selectionsort(int[] a) { int n = a.length; for (int i=0; i<n-1; i++) { // trova il piu piccolo elemento da i a n-1 int jmin = i; for (int j=i+1; j<n; j++) { if (a[j]<a[jmin]) jmin = j; // scambia gli elementi i e jmin int aux = a[jmin]; a[jmin] = a[i]; a[i] = aux; Tecniche di Programmazione Corsi di Laurea in Ingegneria Informatica ed Automatica A.A. 003/004 3
3 Complessità dell ordinamento per selezione Doppio ciclo = O(n ) Più in dettaglio: Istruzione dominante è il confronto (a[j] < a[jmin]). Viene eseguita (n 1)+(n ) + ++1= n (n 1) = O(n ) operazioni volte. La complessità è O(n ) in tutti i casi (anche se il vettore ègià ordinato). Numero di scambi: nel caso migliore: 0 nel caso peggiore: O(n) Tecniche di Programmazione Corsi di Laurea in Ingegneria Informatica ed Automatica A.A. 003/004 4 Ordinamento a bolle (bubble sort) Idea: Si fanno salire gli elementi più piccoli ( più leggeri ) verso l inizio del vettore ( verso l alto ), scambiandoli con quelli adiacenti. L ordinamento è suddiviso in n 1 fasi: fase 0: 0 o elemento (il più piccolo) in posizione 0 fase 1: 1 o elemento in posizione 1 fase n : (n ) o elemento in posizione n, e quindi (n 1) o elemento in posizione n 1 Nella fase i: cominciamo a confrontare dal basso e portiamo l elemento più piccolo (più leggero) in posizione i Tecniche di Programmazione Corsi di Laurea in Ingegneria Informatica ed Automatica A.A. 003/004
4 Ordinamento a bolle (bubble sort) Implementazione (semplificata): public static void bubblesortnaive(int[] a) { int n = a.length; for (int i=0; i<n-1; i++) { for (int j=n-1; j>i; j--) if (a[j-1] > a[j]) { int aux = a[j-1]; a[j-1] = a[j]; a[j] = aux; Tecniche di Programmazione Corsi di Laurea in Ingegneria Informatica ed Automatica A.A. 003/004 6 Osservazione: Se durante una fase non avviene alcuno scambio, allora il vettore è ordinato. Se invece avviene almeno uno scambio, non sappiamo se il vettore è ordinato o meno. = Possiamo interrompere l ordinamento appena durante una fase non avviene alcuno scambio. Implementazione: public static void bubblesort(int[] a) { int n = a.length; boolean ordinato = false; for (int i=0; i<n-1 &&!ordinato; i++) { ordinato = true; for (int j=n-1; j>i; j--) if (a[j-1] > a[j]) { int aux = a[j-1]; a[j-1] = a[j]; a[j] = aux; ordinato=false; Tecniche di Programmazione Corsi di Laurea in Ingegneria Informatica ed Automatica A.A. 003/004
5 Complessità della versione ottimizzata nel caso migliore (vettore già ordinato correttamente): O(n) confronti, 0 scambi nel caso peggiore (vettore ordinato al contrario): n 1 fasi = (n 1)+(n ) + ++1= n (n 1) O(n ) confronti, O(n ) scambi confronti e scambi Tecniche di Programmazione Corsi di Laurea in Ingegneria Informatica ed Automatica A.A. 003/004 8 Ordinamento per inserimento (insertion sort) L ordinamento per inserimento è un metodo di ordinamento che risulta essere tra i più efficienti metodi di ordinamento naive (cioè, intrinsecamente O(n )). L idea di base dell insertionsort è la seguente: consideriamo di aver già ordinato gli elementi tra 0 e i-1 di un array a, allora possiamo facilmente inserire l elemento i-esimo nella posizione giusta scalando gli elementi piu grandi di lui. Si noti, simile a come si ordina una carta nuova in una mano di carte di un tipico gioco di carte (scopone, bridge, ecc.) Esempio: a = elem 0-esimo ordinato (banalmente) elem 0..1 ordinati elem 0.. ordinati elem 0..3 ordinati elem 0..4 ordinati elem 0.. ordinati (tutti) Tecniche di Programmazione Corsi di Laurea in Ingegneria Informatica ed Automatica A.A. 003/004
6 Ordinamento per inserimento (insertion sort) Implementazione: public static void insertionsort(int[] a) { for (int i = 1; i < a.length; i++) { // gli elementi tra 0 e i-1 sono gia ordinati // inserisci l elemento i tra gli elementi ordinati //nella giusta posizione int tmp = a[i]; int j; for (j = i; j > 0 && a[j-1] > tmp; j--) a[j] = a[j-1]; a[j] = tmp; Tecniche di Programmazione Corsi di Laurea in Ingegneria Informatica ed Automatica A.A. 003/ Ordinamento per inserimento (insertion sort) Costo: Nell algoritmo di ordinamento insertion sort il caso peggiore si presenta quando l array è ordinato all inverso. In tal caso l istruzione dominante (tmp < a[j-1]) viene ripututa per n +n 1=n (n 1)/ volte. Quindi il suo costo è O(n ). Si noti che il caso migliore si ha quando l array ègià ordinato. In tal caso l istuzione dominante (tmp < a[j-1]) viene eseguita n 1 volte. Quindi il costo in tal caso è O(n). Tecniche di Programmazione Corsi di Laurea in Ingegneria Informatica ed Automatica A.A. 003/004 11
7 Ordinamento per fusione (merge sort) Per ordinare 1000 elementi usando un algoritmo di complessità O(n ) (ordinamento per selezione o a bolle): sono necessarie 10 6 operazioni Idea: Divido i 1000 elementi in due gruppi da 00 elementi ciascuno: ordino il primo gruppo in O(n ): operazioni ordino il secondo gruppo in O(n ): operazioni combino (fondo) i due gruppi ordinati: si può fare in O(n) = 1000 operazioni Totale: operazioni (contro le 10 6 ) Il procedimento può essere iterato: per ordinare le due metà non uso un algoritmo di complessità O(n ), ma applico lo stesso procedimento di divisione, ordinamento separato e fusione. La suddivisione in due metà si ferma quando si arriva ad un gruppo costituito da un solo elemento (che è già ordinato). Tecniche di Programmazione Corsi di Laurea in Ingegneria Informatica ed Automatica A.A. 003/004 1 algoritmo ordina per fusione gli elementi di A da iniziale a finale if iniziale < finale (ovvero, c è più di un elemento tra iniziale e finale, estremi inclusi) then mediano (iniziale + finale) / ordina per fusione gli elementi di A da iniziale a mediano ordina per fusione gli elementi di A da mediano +1 finale fondi gli elementi di A da iniziale a mediano con gli elementi di A da mediano +1 a finale restituendo il risultato nel sottovettore di A da iniziale a finale Esempio: Dividi Fondi Tecniche di Programmazione Corsi di Laurea in Ingegneria Informatica ed Automatica A.A. 003/004 13
8 Per effettuare la fusione di due sottovettori ordinati e contigui ottenendo un unico sottovettore ordinato: si utilizzano un vettore di appoggio e due indici per scandire i due sottovettori il più piccolo tra i due elementi indicati dai due indici viene copiato nella prossima posizione del vettore di appoggio, e viene fatto avanzare l indice corrispondente quando uno dei due sottovettori è terminato si copiano gli elementi rimanenti dell altro nel vettore di appoggio alla fine si ricopia il vettore di appoggio nelle posizioni occupate dai due sottovettori Tecniche di Programmazione Corsi di Laurea in Ingegneria Informatica ed Automatica A.A. 003/ Ordinamento per fusione (merge sort) Implementazione: public class MergeSort { public static void sort(int v[]) { sort(v,0,v.length-1); private static void mergesort(int[] v, int inf, int sup) { if (inf < sup) { int med = (inf+sup)/; mergesort(v,inf,med); mergesort(v,med+1,sup); merge(v,inf,med,sup); Tecniche di Programmazione Corsi di Laurea in Ingegneria Informatica ed Automatica A.A. 003/004 1
9 private static void merge(int[] v, int inf, int med, int sup) { int[] a = new int[sup-inf+1]; int i1 = inf; int i = med+1; int i = 0; while ((i1 <= med)&&(i <= sup)) { // entrambi i vettori //contengono elementi if (v[i1] <= v[i]) { a[i] = v[i1]; i1++; i++; else { a[i] = v[i]; i++; i++; if (i > sup) // e finito prima il secondo pezzo del vettore Tecniche di Programmazione Corsi di Laurea in Ingegneria Informatica ed Automatica A.A. 003/ for (int k = i1; k <= med; k++) { a[i] = v[k]; i++; else // e finito prima il primo pezzo del vettore for (int k = i; k <= sup; k++) { a[i] = v[k]; i++; // copiamo il vettore ausiliario nel vettore originario for(int k = 0; k < a.length; k++) v[inf+k] = a[k]; funzione merge effettua la fusione funzione sort effettua l ordinamento di un sottovettore compreso tra due indici iniziale e finale funzione mergesort chiama sort sull intervallo di indici da 0 a n 1 Tecniche di Programmazione Corsi di Laurea in Ingegneria Informatica ed Automatica A.A. 003/004 1
10 Complessità dell ordinamento per fusione Sia T (n) il costo di ordinare per fusione un vettore di n elementi. se il vettore ha 0 o 1 elementi: T (n) =c 1 se il vettore ha più di un elemento: T (n) = costo dell ordinamento della prima metà + costo dell ordinamento della seconda metà + costo della fusione = T (n/) + T (n/) + c n Otteniamo un equazione di ricorrenza la cui soluzione è la funzione di complessità cercata: T (n) = { c1 se n 1 T (n/) + T (n/) + c n se n>1 La soluzione, ovvero la complessità dell ordinamento per fusione è T (n) =O(n log n). Questo è quanto di meglio si possa fare. Si può infatti dimostrare che nel caso peggiore sono necessari n log n confronti per ordinare un vettore di n elementi. Tecniche di Programmazione Corsi di Laurea in Ingegneria Informatica ed Automatica A.A. 003/ Ordinamento veloce (quick sort) L ordinamento veloce si basa sulla seguente idea: si prende in esame un elemento X dell array (qualsiasi in generale) che viene detto pivot, e si partiziona (riorganizza) l array in modo che: il pivot si trovi nella posizione corretta (sia essa k); tutti gli elementi più piccoli del pivot siano nelle posizioni precedenti k; tutti gli elementi più grandi del pivot siano nelle posizioni seguenti k. Esempio: : a = pivot = 6 k = 4 a = A questo punto i due vettori a 1 =[431] e a = [1 8 ] possono essere ricosivamente ordinati allo stesso modo. La scelta del pivot può essere effettuata secondo diversi criteri. Nell implementazione che segue viene scelto semplicemente il primo elemento del vettore. Tecniche di Programmazione Corsi di Laurea in Ingegneria Informatica ed Automatica A.A. 003/004 1
11 Ordinamento veloce (quick sort) Implementazione: public class QuickSort { public static void sort(int[] a) { quicksort(a,0,a.length-1); public static void quicksort(int[] a,int inf, int sup) { if (inf >= sup) return; else { int pospivot sceglipivot(a,inf,sup); int k = partition(a, inf, sup, pospivot); quicksort(a,inf,k); quicksort(a,k+1,sup); Tecniche di Programmazione Corsi di Laurea in Ingegneria Informatica ed Automatica A.A. 003/004 0 private static int sceglipivot(int[] a, int inf, int sup) { //si consulti un libro di alg. e stutt. dati //per criteri di scelta avanzati. //Noi scegliamo semplicemente il primo elemento return inf; private static int partition(int[] a, int inf, int sup, int pospivot) { int i = inf; int j = sup; int pivot = a[pospivot]; while (i < j) { while (a[i] < pivot) i++; while (a[j] > pivot) j--; if (i < j) { // ora a[i] > pivot e a[j] < pivot // quindi scambio a[i] e a[j] int tmp = a[i]; a[i] = a[j]; Tecniche di Programmazione Corsi di Laurea in Ingegneria Informatica ed Automatica A.A. 003/004 1
12 a[j] = tmp; return i; Tecniche di Programmazione Corsi di Laurea in Ingegneria Informatica ed Automatica A.A. 003/004 Ordinamento veloce (quick sort) Costo: Il quick sort funziona bene quando ad ogni passo si riesce a partizionare il vettore in due vettori di dimensione circa n/. In questo caso la complessità è O(n log n) - l analisi è molto simile a quella del merge sort. Nel caso peggiore, che si verifica ad esempio se il vettore ègià ordinato, si ha una complessità di O(n ), in quanto ad ogni passo si esamina un nuovo vettore di dimensione inferiore di uno rispetto a quella precedente. Pur avendo, nel caso peggiore, una complessità asintotica più grande del merge sort, il quick sort si comporta molto bene quando il vettore è mediamente disordinato, cioè la partizione del vettore avvinene in parti circa uguali. In questi casi in effetti è spesso preferito al merge sort in quanto non richiede l allocazione di un array aggiunutivo per il merge. Il quick sort è l algoritmo di ordinamento più studiato dal punto di vista delle ottimizzazioni. Tuttavia va tenuto presente che, specialmente introducendo ottimizzazioni, in codice del quick sort è molto sensibile a piccoli errori di programmazione che sono difficili da trovare e che ne degradano fortemente le prestazioni per particolari configurazioni dell input. Tecniche di Programmazione Corsi di Laurea in Ingegneria Informatica ed Automatica A.A. 003/004 3
13 Rissunto sulla complessità degli algoritmi di ordinamento algoritmo confronti scambi complessià totale selection sort O(n ) sempre O(n) O(n ) sempre 0 se già ordinato bubble sort O(n ) O(n ) O(n ) (ottimizzato) O(n) se già ordinato 0 se già ordinato O(n) se già ordinato insertion sort O(n ) O(n ) O(n ) O(n) se già ordinato 0 se già ordinato O(n) se già ordinato merge sort O(n log n) sempre O(n log n) sempre O(n log n) sempre (serve vettore appoggio) quick sort O(n ) caso peggiore O(n log n) caso medio Tecniche di Programmazione Corsi di Laurea in Ingegneria Informatica ed Automatica A.A. 003/004 4
Corso di Tecniche di Programmazione
Problema: Data una sequenza di elementi in ordine qualsiasi, ordinarla. Corso di Tecniche di Programmazione Corsi di Laurea in Ingegneria Informatica ed Automatica Anno Accedemico 003/004 Proff. Giuseppe
10 - 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
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
Semplici 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
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
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
Algoritmi 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
Esempi di algoritmi. Lezione III
Esempi di algoritmi Lezione III Scopo della lezione Implementare da zero algoritmi di media complessità. Verificare la correttezza di un algoritmo eseguendolo a mano. Imparare a valutare le prestazioni
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati Soluzione esercizi di approfondimento Stefano Leucci [email protected] 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)
GESTIONE INFORMATICA DEI DATI AZIENDALI
GESTIONE INFORMATICA DEI DATI AZIENDALI Alberto ZANONI Centro Vito Volterra Università Tor Vergata Via Columbia 2, 00133 Roma, Italy [email protected] Rudimenti di programmazione Programming
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: 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
Complessità 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
COGNOME 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
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
Esercizi 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
Corso 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
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
Corso 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
B+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
Tipi 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
Corso 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
4.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ù
Corso di Laurea in Ingegneria Gestionale Esame di Informatica - a.a. 2012-13 25 luglio 2013
Cognome Nome Matricola Postazione PC Corso di Laurea in Ingegneria Gestionale Esame di Informatica - a.a. 2012-13 25 luglio 2013 Testo Il database di una banca è costituito da due vettori paralleli. Il
Studente (Cognome Nome): Corso di Informatica Corso di Laurea in Ingegneria Gestionale a.a. 2007-08 Primo scritto 11 Gennaio 2008
Studente (Cognome Nome): Matricola: Corso di Informatica Corso di Laurea in Ingegneria Gestionale a.a. 2007-08 Primo scritto 11 Gennaio 2008 Si noti che le soluzioni ai quesiti saranno considerate valide
12 - 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,
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
SOMMARIO 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
Funzioni 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
Università 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,
Studente (Cognome Nome): Corso di Informatica Corso di Laurea in Ingegneria Gestionale a.a. 2006-07 Secondo Compitino 21 Dicembre 2006
Studente (Cognome Nome): Matricola: Corso di Informatica Corso di Laurea in Ingegneria Gestionale a.a. 2006-07 Secondo Compitino 21 Dicembre 2006 Si noti che le soluzioni ai quesiti saranno considerate
Ricerche, 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
Algoritmi 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à
Studente: SANTORO MC. Matricola : 528
CORSO di LAUREA in INFORMATICA Corso di CALCOLO NUMERICO a.a. 2004-05 Studente: SANTORO MC. Matricola : 528 PROGETTO PER L ESAME 1. Sviluppare una versione dell algoritmo di Gauss per sistemi con matrice
Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a. 2012-13 14 giugno 2013
Cognome Nome Matricola Postazione PC Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a. 2012-13 14 giugno 2013 Testo Il database di una banca è costituito da due vettori paralleli. Il primo
Sistema operativo: Gestione della memoria
Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A. 2008/2009 Sistema operativo: Gestione della memoria La presente dispensa e
Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a. 2010-11 13 settembre 2011
Cognome Nome Matricola Postazione PC Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a. 2010-11 13 settembre 2011 Testo Il database di un videonoleggio è costituito da due vettori paralleli.
Correttezza. 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
Sistemi Operativi IMPLEMENTAZIONE DEL FILE SYSTEM. D. Talia - UNICAL. Sistemi Operativi 9.1
IMPLEMENTAZIONE DEL FILE SYSTEM 9.1 Implementazione del File System Struttura del File System Implementazione Implementazione delle Directory Metodi di Allocazione Gestione dello spazio libero Efficienza
La 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
Algoritmi di ordinamento in linguaggio C
Algoritmi di ordinamento in linguaggio C Ordinamento per inserimento Insertion Sort con funzione ausiliaria int inserisci_valore(int vett[], int dim, int valore) { int i = dim; while (i > 0 && vett[i-1]
Laboratorio di Calcolatori 1 Corso di Laurea in Fisica A.A. 2006/2007
Laboratorio di Calcolatori 1 Corso di Laurea in Fisica A.A. 2006/2007 Dott.Davide Di Ruscio Dipartimento di Informatica Università degli Studi di L Aquila Lezione del 08/03/07 Nota Questi lucidi sono tratti
Calcolatori: Algebra Booleana e Reti Logiche
Calcolatori: Algebra Booleana e Reti Logiche 1 Algebra Booleana e Variabili Logiche I fondamenti dell Algebra Booleana (o Algebra di Boole) furono delineati dal matematico George Boole, in un lavoro pubblicato
Appunti sulla Macchina di Turing. Macchina di Turing
Macchina di Turing Una macchina di Turing è costituita dai seguenti elementi (vedi fig. 1): a) una unità di memoria, detta memoria esterna, consistente in un nastro illimitato in entrambi i sensi e suddiviso
Realizzazione di Politiche di Gestione delle Risorse: i Semafori Privati
Realizzazione di Politiche di Gestione delle Risorse: i Semafori Privati Condizione di sincronizzazione Qualora si voglia realizzare una determinata politica di gestione delle risorse,la decisione se ad
Informatica 3. Informatica 3. LEZIONE 10: Introduzione agli algoritmi e alle strutture dati. Lezione 10 - Modulo 1. Importanza delle strutture dati
Informatica 3 Informatica 3 LEZIONE 10: Introduzione agli algoritmi e alle strutture dati Modulo 1: Perchè studiare algoritmi e strutture dati Modulo 2: Definizioni di base Lezione 10 - Modulo 1 Perchè
Vettori Algoritmi elementari di ordinamento
Dipartimento di Informatica e Sistemistica Antonio Ruberti Sapienza Università di Roma Vettori Algoritmi elementari di ordinamento Corso di Fondamenti di Informatica Laurea in Ingegneria Informatica (Canale
Sistemi Operativi IMPLEMENTAZIONE DEL FILE SYSTEM. Implementazione del File System. Struttura del File System. Implementazione
IMPLEMENTAZIONE DEL FILE SYSTEM 9.1 Implementazione del File System Struttura del File System Implementazione Implementazione delle Directory Metodi di Allocazione Gestione dello spazio libero Efficienza
B-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
Introduzione. Classificazione di Flynn... 2 Macchine a pipeline... 3 Macchine vettoriali e Array Processor... 4 Macchine MIMD... 6
Appunti di Calcolatori Elettronici Esecuzione di istruzioni in parallelo Introduzione... 1 Classificazione di Flynn... 2 Macchine a pipeline... 3 Macchine vettoriali e Array Processor... 4 Macchine MIMD...
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2 Dispensa 12 ADT: Lista, Pila, Coda A. Miola Marzo 2008 http://www.dia.uniroma3.it/~java/fondinf2/ ADT: Lista, Pila, Coda 1 Contenuti!Tipo
Sistemi Operativi GESTIONE DELLA MEMORIA SECONDARIA. D. Talia - UNICAL. Sistemi Operativi 11.1
GESTIONE DELLA MEMORIA SECONDARIA 11.1 Memoria Secondaria Struttura del disco Scheduling del disco Gestione del disco Gestione dello spazio di swap Struttura RAID Affidabilità Implementazione della memoria
Sistemi Operativi. Memoria Secondaria GESTIONE DELLA MEMORIA SECONDARIA. Struttura del disco. Scheduling del disco. Gestione del disco
GESTIONE DELLA MEMORIA SECONDARIA 11.1 Memoria Secondaria Struttura del disco Scheduling del disco Gestione del disco Gestione dello spazio di swap Struttura RAID Affidabilità Implementazione della memoria
Esercitazione Informatica I AA 2012-2013. Nicola Paoletti
Esercitazione Informatica I AA 2012-2013 Nicola Paoletti 4 Gigno 2013 2 Conversioni Effettuare le seguenti conversioni, tenendo conto del numero di bit con cui si rappresenta il numero da convertire/convertito.
Algoritmi e diagrammi di flusso
Algoritmi e diagrammi di flusso Un algoritmo può essere descritto come una sequenza finita ed ordinata di operazioni che descrivono la soluzione di un problema. Per sequenza finita si intende che un algoritmo
Gli 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.
Prof. Giuseppe Chiumeo. Avete già studiato che qualsiasi algoritmo appropriato può essere scritto utilizzando soltanto tre strutture di base:
LA STRUTTURA DI RIPETIZIONE La ripetizione POST-condizionale La ripetizione PRE-condizionale INTRODUZIONE (1/3) Avete già studiato che qualsiasi algoritmo appropriato può essere scritto utilizzando soltanto
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: 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
( x) ( x) 0. Equazioni irrazionali
Equazioni irrazionali Definizione: si definisce equazione irrazionale un equazione in cui compaiono uno o più radicali contenenti l incognita. Esempio 7 Ricordiamo quanto visto sulle condizioni di esistenza
Che cosa è un VIRUS?
Virus & Antivirus Virus Nella sicurezza informatica un virus è un software, appartenente alla categoria dei malware, che è in grado, una volta eseguito, di infettare dei file in modo da riprodursi facendo
Programmazione 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)
Per scrivere una procedura che non deve restituire nessun valore e deve solo contenere le informazioni per le modalità delle porte e controlli
CODICE Le fonti in cui si possono trovare tutorial o esempi di progetti utilizzati con Arduino si trovano nel sito ufficiale di Arduino, oppure nei forum di domotica e robotica. Il codice utilizzato per
A intervalli regolari ogni router manda la sua tabella a tutti i vicini, e riceve quelle dei vicini.
Algoritmi di routing dinamici (pag.89) UdA2_L5 Nelle moderne reti si usano algoritmi dinamici, che si adattano automaticamente ai cambiamenti della rete. Questi algoritmi non sono eseguiti solo all'avvio
Soluzione dell esercizio del 12 Febbraio 2004
Soluzione dell esercizio del 12/2/2004 1 Soluzione dell esercizio del 12 Febbraio 2004 1. Casi d uso I casi d uso sono riportati in Figura 1. Figura 1: Diagramma dei casi d uso. 2. Modello concettuale
Introduzione 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
Laboratorio di Informatica
per chimica industriale e chimica applicata e ambientale LEZIONE 4 - parte II La memoria 1 La memoriaparametri di caratterizzazione Un dato dispositivo di memoria è caratterizzato da : velocità di accesso,
Iniziamo con un esercizio sul massimo comun divisore: Esercizio 1. Sia d = G.C.D.(a, b), allora:
Iniziamo con un esercizio sul massimo comun divisore: Esercizio 1. Sia d = G.C.D.(a, b), allora: G.C.D.( a d, b d ) = 1 Sono state introdotte a lezione due definizioni importanti che ricordiamo: Definizione
Uso di base delle funzioni in Microsoft Excel
Uso di base delle funzioni in Microsoft Excel Le funzioni Una funzione è un operatore che applicato a uno o più argomenti (valori, siano essi numeri con virgola, numeri interi, stringhe di caratteri) restituisce
Cluster. Vicino alla temperatura critica gli spin formano grandi gruppi (cluster)
Cluster Vicino alla temperatura critica gli spin formano grandi gruppi (cluster) all interno di ogni gruppo è molto improbabile riuscire a flippare uno spin perché ci sarebbe una grande perdita di energia,
Parte 1. Vettori di bit - AA. 2012/13 1.1
1.1 Parte 1 Vettori di bit 1.2 Notazione posizionale Ogni cifra assume un significato diverso a seconda della posizione in cui si trova Rappresentazione di un numero su n cifre in base b: Posizioni a n
APPUNTI DI MATEMATICA LE FRAZIONI ALGEBRICHE ALESSANDRO BOCCONI
APPUNTI DI MATEMATICA LE FRAZIONI ALGEBRICHE ALESSANDRO BOCCONI Indice 1 Le frazioni algebriche 1.1 Il minimo comune multiplo e il Massimo Comun Divisore fra polinomi........ 1. Le frazioni algebriche....................................
4 3 4 = 4 x 10 2 + 3 x 10 1 + 4 x 10 0 aaa 10 2 10 1 10 0
Rappresentazione dei numeri I numeri che siamo abituati ad utilizzare sono espressi utilizzando il sistema di numerazione decimale, che si chiama così perché utilizza 0 cifre (0,,2,3,4,5,6,7,8,9). Si dice
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2 Dispensa 11 Tipi astratti di dato e loro rappresentazione A. Miola Marzo 28 http://www.dia.uniroma3.it/~java/fondinf2/ ADT e Rappresentazione
Strutture. 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
Librerie 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
Lezione 8. La macchina universale
Lezione 8 Algoritmi La macchina universale Un elaboratore o computer è una macchina digitale, elettronica, automatica capace di effettuare trasformazioni o elaborazioni su i dati digitale= l informazione
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};
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
I motori di ricerca. Che cosa sono. Stefania Marrara Corso di Sistemi Informativi
I motori di ricerca Stefania Marrara Corso di Sistemi Informativi a.a 2002/2003 Che cosa sono Un motore di ricerca è uno strumento per mezzo del quale è possibile ricercare alcuni termini (parole) all
Gestione della memoria centrale
Gestione della memoria centrale Un programma per essere eseguito deve risiedere in memoria principale e lo stesso vale per i dati su cui esso opera In un sistema multitasking molti processi vengono eseguiti
Ricorsione. (da lucidi di Marco Benedetti)
Ricorsione (da lucidi di Marco Benedetti) Funzioni ricorsive Dal punto di vista sintattico, siamo in presenza di una funzione ricorsiva quando all interno della definizione di una funzione compaiono una
Sono casi particolari di MCF : SPT (cammini minimi) non vi sono vincoli di capacità superiore (solo x ij > 0) (i, j) A : c ij, costo di percorrenza
Il problema di flusso di costo minimo (MCF) Dati : grafo orientato G = ( N, A ) i N, deficit del nodo i : b i (i, j) A u ij, capacità superiore (max quantità di flusso che può transitare) c ij, costo di
RICERCA DI UN ELEMENTO
RICERCA DI UN ELEMENTO Si legga da tastiera un array di N elementi (N stabilito dall utente) Si richieda un elemento x il programma deve cercare l elemento x nell array Se l elemento è presente, deve visualizzare
CALCOLO COMBINATORIO
CALCOLO COMBINATORIO 1 Modi di formare gruppi di k oggetti presi da n dati 11 disposizioni semplici, permutazioni Dati n oggetti distinti a 1,, a n si chiamano disposizioni semplici di questi oggetti,
Consideriamo due polinomi
Capitolo 3 Il luogo delle radici Consideriamo due polinomi N(z) = (z z 1 )(z z 2 )... (z z m ) D(z) = (z p 1 )(z p 2 )... (z p n ) della variabile complessa z con m < n. Nelle problematiche connesse al
Corso di Fondamenti di Informatica Algoritmi su array / 2
Corso di Fondamenti di Informatica Algoritmi su array / Anno Accademico 00/009 Francesco Tortorella Algoritmi su array Operazioni tipiche sugli array: inizializzazione lettura stampa ricerca del minimo
Oggetti 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
Introduzione all analisi dei segnali digitali.
Introduzione all analisi dei segnali digitali. Lezioni per il corso di Laboratorio di Fisica IV Isidoro Ferrante A.A. 2001/2002 1 Segnali analogici Si dice segnale la variazione di una qualsiasi grandezza
Appunti di informatica. Lezione 2 anno accademico 2015-2016 Mario Verdicchio
Appunti di informatica Lezione 2 anno accademico 2015-2016 Mario Verdicchio Sistema binario e logica C è un legame tra i numeri binari (0,1) e la logica, ossia la disciplina che si occupa del ragionamento
Uso 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
Cosa è un foglio elettronico
Cosa è un foglio elettronico Versione informatica del foglio contabile Strumento per l elaborazione di numeri (ma non solo...) I valori inseriti possono essere modificati, analizzati, elaborati, ripetuti
Inizializzazione, Assegnamento e Distruzione di Classi
Inizializzazione, Assegnamento e Distruzione di Classi Lezione 9 Operazioni Automatiche In ogni programma C++ oggetti classe vengono gestiti automaticamente dal compilatore Inizializzati al momento della
SAPIENZA Università di Roma Facoltà di Ingegneria dell Informazione, Informatica e Statistica
SAPIENZA Università di Roma Facoltà di Ingegneria dell Informazione, Informatica e Statistica Esercitazioni di PROGETTAZIONE DEL SOFTWARE (Corsi di Laurea in Ingegneria Informatica ed Automatica ed Ingegneria
Arduino: Programmazione
Programmazione formalmente ispirata al linguaggio C da cui deriva. I programmi in ARDUINO sono chiamati Sketch. Un programma è una serie di istruzioni che vengono lette dall alto verso il basso e convertite
