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

Dimensione: px
Iniziare la visualizzazioe della pagina:

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

Transcript

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

2 Algoritmi su Array Algoritmi di base (conteggio, ricerca max/min, elimina duplicati, ) Algoritmi di supporto Partizionamento Fusione Ricerca Sequenziale Binaria (Basata su un ordinamento) Ordinamento Per selezione, Per scambio, Per inserzione Per fusioni successive, Per partizionamento (v.iterativa e ricorsiva) Prof.ssa Lanza - AA DIB 2/66

3 Tecniche Avanzate di Ordinamento Si può dimostrare che, in media, per dati casuali, gli elementi devono essere spostati di una distanza pari a n/3 rispetto alla loro posizione originaria Gli algoritmi semplici tendono a spostare solo gli elementi vicini e quindi necessitano di molti spostamenti in più per ordinare la lista Meno efficienza Gli algoritmi migliori sono in grado di scambiare, nelle prime fasi di ordinamento, valori che occupano posizioni molto distanti nella lista Prof.ssa Lanza - AA DIB 3/66

4 Partizionamento Dato un array non ordinato di n elementi, e un valore x dello stesso tipo degli elementi, partizionare gli elementi in due sottoinsiemi tali che Gli elementi x siano in un sottoinsieme Gli elementi > x siano nell altro sottoinsieme Esempio: a: x = 20 una possibile soluzione: > 20 Prof.ssa Lanza - AA DIB 4/66

5 Partizionamento Si potrebbe ordinare l array e trovare l indice dell elemento che separa i due sottoinsiemi > 20 Non richiesto suggerimento: l algoritmo non deve fare più di quanto venga richiesto Non necessario Da Matematica Discreta: P S unione P D = intero insieme (l unione delle parti copre l insieme originario e le parti a due a due non hanno intersezioni) Prof.ssa Lanza - AA DIB 5/66

6 Partizionamento Se è nota la posizione p che divide i due sottoinsiemi Alcuni elementi non vanno spostati Scorrendo l array da sinistra verso p, i valori x Scorrendo l array da destra verso p, i valori > x Alcuni elementi sono fuori posto Scambiare un elemento fuori posto da una parte con uno fuori posto dall altra parte. La posizione p può essere ricavata contando gli elementi x presenti nell array In tal caso, occorrono 2 scansioni dell array Determinare la posizione p Individuare e scambiare gli elementi fuori posto Si termina quando si arriva a p Prof.ssa Lanza - AA DIB 6/66

7 Partizionamento È possibile partizionare l array mediante una sola scansione? Si, procedendo dagli estremi verso il centro Mentre le due partizioni non si incontrano Estendere le partizioni sinistra e destra scambiando le coppie piazzate nella partizione sbagliata La posizione p sarà individuata automaticamente al termine della scansione Prof.ssa Lanza - AA DIB 7/66

8 Partizionamento Scansione effettuata tramite 2 indici i per la partizione sinistra Parte da 1 Incrementato j per la partizione destra Parte da n Decrementato Prof.ssa Lanza - AA DIB 8/66

9 Partizionamento Algoritmo Individuazione dei primi valori fuori posto Mentre l i-mo elemento è x e i < j Incrementare i Mentre il j-mo elemento è > x e i < j Decrementare j Mentre le partizioni non si sono incontrate Scambiare i valori nelle posizioni individuate Cercare i successivi valori fuori posto Al termine, j è la posizione p Limite inferiore per i valori > x nella partizione Prof.ssa Lanza - AA DIB 9/66

10 Partizionamento Note Implementative Gestione del caso in cui x è fuori dall intervallo dei valori assunti dall array Inserire un controllo supplementare dopo i cicli preliminari: Se il j-mo elemento è > x allora decrementa j Ciò assicura che k [1..j]: a[k] x Se x è maggiore di tutti gli elementi dell array, al termine dei cicli si ha i = j = n e il controllo non scatta Se x è minore di tutti gli elementi dell array, al termine del ciclo(1a) si ha i = 1, al termine del ciclo(1b) si ha j = 1 e a 1 non controllato, mentre dopo il controllo, j = 0 Prof.ssa Lanza - AA DIB 10/66

11 Partizionamento Esempio Dati x = n = 9 Il risultato è: i=1, j=n i=2, j= i=3, j= j=4 Dimensione di P S : p = 4 P D Partizione di destra ha dimensione: n-p Prof.ssa Lanza - AA DIB 11/66

12 Partizionamento Casi limite x = È già partizionato! P S è vuota P D coincide con l intera lista Tutti gli a[ j ] sono > x x = È già partizionato! P S coincide con l intera lista P D è vuota Tutti gli a[ i ] sono <= x Prof.ssa Lanza - AA DIB 12/66

13 inizio fine i = 1; j = n; Partizionamento Pseudo-codice mentre (i < j) e (a i <= x) esegui i = i + 1; /*estende P S verso il centro*/ mentre (i < j) e (a j > x) esegui j = j 1; /*estende P D verso il centro*/ se a j > x allora j = j 1; /* caso particolare: x a k k [1..n] */ mentre i < j esegui t = a i ; a i = a j ; a j = t; /* scambia */ i = i + 1; j = j 1; /* continua ad estendere P S e P D */ mentre (a i <= x) esegui i = i + 1; /*ricerca elemento da scambiare*/ mentre (a j > x) esegui j = j 1; /*ricerca elemento da scambiare*/ fine_mentre p = j; /* dimensione della P S */ Prof.ssa Lanza - AA DIB 13/66

14 Partizionamento Codice C Partition (a, 0, n-1, x, p) Nota 1: al posto di n posso usare una funzione che ritorni la lunghezza di un array - lenght(a) Prof.ssa Lanza - AA DIB 14/66

15 Partizionamento Programma Pascal begin i := 1; j := n; while (i < j) AND (a[i] <= x) do i := i + 1; while (i < j) AND (a[j] > x) do j := j 1; if a[j] > x then j := j 1; while i < j do begin t := a[i]; a[i] := a[j]; a[j] := t; i := i + 1; j := j 1; while (a[i] <= x) do i := i + 1; while (a[j] > x) do j := j 1; end; p := j; end; Prof.ssa Lanza - AA DIB 15/66

16 Ordinamento Veloce di Hoare (per partizionamento) Ordinamento basato sul partizionamento (partition-exchange) Noto come Quicksort in media è molto veloce Due versioni (iterativa, ricorsiva) tutti gli elementi + piccoli tutti gli elementi + grandi Il partizionamento aumenta il preordinamento Si riduce la dimensione del problema Ogni partizione può essere trattata separatamente Prof.ssa Lanza - AA DIB 16/66

17 Ordinamento Veloce Il partizionamento richiede un valore x (pivot o perno) in base al quale separare gli elementi. Come scegliere il pivot? Scelto a caso Potrebbe essere esterno ai valori della lista Avremmo una partizione vuota! Prenderne uno della lista stessa Scegliere il primo della lista (versione per EUCIP) Il tempo di esecuzione dipende dal fatto che il partizionamento sia o meno bilanciato Elemento mediano» Elemento in posizione media» Posizione media: (limite inferiore+limite superiore) /2 Prof.ssa Lanza - AA DIB 17/66

18 Ordinamento Veloce Situazione dopo il partizionamento: Parte sinistra Elementi minori dell elemento mediano Parte destra Elementi maggiori dell elemento mediano Sone escluse le interazioni fra partizioni Nessun elemento della parte sinistra potrà mai, nell ordinamento, finire nella parte destra Ciascuna può essere trattata (ordinata) separatamente Ciascuna contiene meno elementi della lista completa Prof.ssa Lanza - AA DIB 18/66

19 Ordinamento Veloce Per ciascuna delle 2 partizioni ottenute valgono le stesse considerazioni precedenti Problemi analoghi a quello iniziale (ordinamento) Dimensione minore Riapplichiamo su ciascuna i concetti già esposti Si ottengono, per ciascuna partizione, altre 2 partizioni Situazione dopo un certo numero di passi: elementi I partizione < elementi II partizione < < elementi n-ma partizione Criterio di stop: partizioni di un solo elemento Non ulteriormente partizionabili Già ordinate Prof.ssa Lanza - AA DIB 19/66

20 Ordinamento Veloce Meccanismo Base Mentre tutte le partizioni non risultano ancora ridotte a dimensione 1 esegui Scegli la prossima partizione da elaborare Individua un nuovo valore di partizionamento per la partizione scelta (il mediano) Partiziona la partizione attuale in due insiemi più piccoli parzialmente ordinati rispetto al mediano attuale Prof.ssa Lanza - AA DIB 20/66

21 Ordinamento Veloce Ogni passo genera 2 nuove partizioni Si può agire su una sola partizione alla volta! L elaborazione dell altra resta in sospeso Possibile esistenza, in un certo momento, di partizioni create in attesa di elaborazione Necessità di ricordarne i limiti destro e sinistro Salvare l informazione sui limiti di ciascuna» posizioni dell array originale Prof.ssa Lanza - AA DIB 21/66

22 Ordinamento Veloce Memorizzazione dei limiti delle partizioni lasciate in sospeso Ogni partizione richiede la memorizzazione di 2 valori che la individuano (gli estremi) Immagazzinati in un array di appoggio Relativi agli indici dell array di partenza 2 elementi dell array di appoggio per ogni partizione Scelta della prossima partizione Simulazione di una struttura a pila LastIn, First Out Prof.ssa Lanza - AA DIB 22/66

23 Ordinamento Veloce Man mano che il processo di partizionamento prosegue Il numero delle partizioni di cui salvare l informazione sui limiti aumenta (di 1) Le partizioni diventano più piccole Prof.ssa Lanza - AA DIB 23/66

24 Ordinamento Veloce Dimensione dell array di servizio Caso peggiore: 2 *(n 1) elementi Il partizionamento è il più sbilanciato possibile Si memorizzano n 1 partizioni lasciate in sospeso Ogni volta si elabora la partizione più grande Ogni volta la partizione più piccola contiene un solo elemento partizione elaborata per prima x Ciascuna partizione richiede 2 elementi Troppo Spazio! Cerchiamo di migliorare Prof.ssa Lanza - AA DIB 24/66

25 Ordinamento Veloce Ottimizzazione Elaborare per prima la partizione più piccola Minor numero di partizioni da tenere in sospeso Partizioni di dimensione 1 non generano altre partizioni Individuate e scartate subito dall elaborazione In ogni istante esiste una sola partizione in sospeso di cui vanno salvati i limiti corrispondono alla partizione più grande Prof.ssa Lanza - AA DIB 25/66

26 Ordinamento Veloce Ottimizzazione Ad ogni passo si elabora la più grande delle partizioni più piccole Attuale caso peggiore: 2 log 2 n Partizioni divise sempre a metà Dimensione dimezzata Caso peggiore senza ottimizzazione: 2*(n 1) elementi Accettabile! Prof.ssa Lanza - AA DIB 26/66

27 Ordinamento Veloce Test per decidere qual è la partizione più grande Se le partizioni cadono (si congiungono) a sinistra del medio Elabora la partizione sinistra (che è la più piccola) Salva i limiti di quella destra Altrimenti Elabora la partizione destra (che è la più piccola) Salva i limiti di quella sinistra La partizione più grande è sempre messa in attesa di elaborazione Gestione a pila Prof.ssa Lanza - AA DIB 27/66

28 Ordinamento Veloce Meccanismo di partizionamento e accodamento 1 a cd b a..c < d..b 2 a e f c f..c < a..e 3 f gh c f..g < h..c Top dello stack h.. c a.. e a.. e Array di servizio d.. b d.. b d.. b Prof.ssa Lanza - AA DIB 28/66

29 Ordinamento Veloce Quando si raggiunge una partizione di dimensione 1 si ricomincia il processo di partizionamento sulla partizione più recentemente memorizzata Limiti della partizione rimossi dalla cima della pila Quando tutte le partizioni sono state ridotte a dimensione 1 Pila vuota Terminazione del processo di partizionamento Prof.ssa Lanza - AA DIB 29/66

30 Ordinamento Veloce Algoritmo iterativo Definire l array a[1..n] da ordinare Inizializzare a 2 il puntatore al top dello stack Impostare i limiti sup e inf dell array nello stack a 1..n (si parte con 1 sola partizione coincidente con l intero array di partenza) Mentre lo stack non è vuoto esegui Estrai dal top dello stack la prossima partizione (limiti sup e inf del segmento di array corrispondente) Mentre il corrente segmento non è ridotto a dimensione 1 esegui Scegli l elemento mediano del segmento di array Partiziona il segmento in 2 rispetto al suo valore mediano Salva nello stack i limiti della partizione più grande Segmento corrente partizione più piccola Prof.ssa Lanza - AA DIB 30/66

31 Ordinamento Veloce Programma Pascal begin top := 2; stack[1] := 1; stack[2] := n; while top > 0 do begin right := stack[top]; left := stack[top 1]; top := top 2; while left > right do begin medio := (left + right) DIV 2; mediano := a[medio]; partiziona(a,left,right,mediano,pos); if pos < medio then begin stack[top+1] := pos+1; top := top + 2; stack[top] := right; right := pos end else begin stack[top+1] := left; top := top + 2; stack[top] := pos; left := pos+1 end end end end. Prof.ssa Lanza - AA DIB 31/66

32 Ordinamento veloce Versione Ricorsiva Algoritmo per natura ricorsivo Implementazione ricorsiva molto semplice Strategia divide et impera (applicazione dello stesso processo ad istanze del problema via via più piccole) Divide: l insieme di dati è ripartito in 2 partizioni in modo tale che tutti gli elementi della partizione sinistra (prime pos posizioni) siano di tutti gli elementi della parte destra (posizioni da pos+1 fino ad n) Impera: ordina le 2 partizioni riapplicando lo stesso meccanismo di partizionamento a[1..pos] e a[pos+1..n] fino ad ottenere segmenti di dimensione 1 Ricombina: Non è richiesto alcuno sforzo per ricombinare le 2 partizioni» A questo punto l intero array a[1..n] sarà ordinato Prof.ssa Lanza - AA DIB 32/66

33 Quicksort (v. ricorsiva) se card(a) = 1 allora A è ordinato /* passo base */ altrimenti -scegli un elemento pivot in A e ripartisci gli elementi di A in due sottoinsiemi, disponendo nella parte bassa gli elementi di A < del pivot e nella parte alta gli elementi di A > del pivot. -riapplica l algoritmo ai due sottoinsiemi /* due chiamate ricorsive */ fine_se Prof.ssa Lanza - AA DIB 33/66

34 Quicksort (v. ricorsiva) Situazione iniziale: Dati originali inf = 1 sup = n Dopo il primo partizionamento: partizione sinistra partizione destra inf pos sup Passi fondamentali dell algoritmo ricorsivo Se nell insieme corrente c è più di 1 elemento Partiziona i dati in partizione sinistra e destra Riapplica il partizionamento alla partizione sinistra Riapplica il partizionamento alla partizione destra Prof.ssa Lanza - AA DIB 34/66

35 Quicksort (v. ricorsiva) Indicatori di indice necessari: inf pos sup partition(a, inf, sup, mediano, pos) Ricorsione quicksort2(a, inf, pos) quicksort2(a, pos+1, sup) Terminazione della ricorsione Chiamata ad un segmento di 1 elemento Test: se inf < sup allora continua Nota: il modulo di partizionamento del quicksort può fare a meno del parametro mediano Prof.ssa Lanza - AA DIB 35/66

36 Quicksort Algoritmo Ricorsivo Se il segmento corrente da ordinare contiene più di 1 elemento allora Partizionalo in 2 segmenti più piccoli tali che tutti gli elementi del segmento di sinistra siano di tutti gli elementi del segmento di destra Se il segmento di sinistra è più piccolo del segmento di destra allora Altrimenti Quicksort il segmento di sinistra Quicksort il segmento di destra Quicksort il segmento di destra Quicksort il segmento di sinistra Prof.ssa Lanza - AA DIB 36/66

37 Quicksort Una implementazione C void quicksort2 (int a[max], int inizio, int fine) int q; if (inizio<fine) { partition (a, inizio, fine, q); quicksort2 (a, inizio, q); quicksort2 (a, q+1, fine); } } (Versione che non ottimizza la scelta della partizione) La libreria standard del C fornisce una implementazione efficiente del QuickSort denominata qsort( ) Prof.ssa Lanza - AA DIB 37/66

38 QuickSort versione per EUCIP (C++) void QuickSort (int *vettore, int IndiceSinistro, int IndiceDestro) { if (IndiceSinistro < IndiceDestro) { int Pivot = vettore[indicesinistro]; /*scelta del primo come pivot*/ int IS = IndiceSinistro; int ID = IndiceDestro +1; do { do IS++; while (vettore[is] < Pivot; do ID++; while (vettore[id] < Pivot; if (IS< ID) Scambia (vettore[is], vettore[ ID]); } while (IS < ID); Scambia (vettore[is], vettore [ID]); QuickSort (vettore, IndiceSinistro, ID-1); QuickSort (vettore, ID+1, IndiceDestro); } } // QuickSort Prof.ssa Lanza - AA DIB 38/66

39 Ordinamento Veloce Programma Pascal procedure quicksort2(var a: tipo_array; inf, sup: integer); var pos : integer; begin if inf < sup then begin medio := (inf + sup) DIV 2; mediano := a[medio]; partition(a, inf, sup, mediano, pos); if (pos inf) < (sup pos+1) then begin quicksort2(a, inf, pos); quicksort2(a, pos+1, sup) end else begin quicksort2(a, pos+1, sup); quicksort2(a, inf, pos) end end end; Prof.ssa Lanza - AA DIB 39/66

40 Ordinamento Veloce Considerazioni Il tempo di esecuzione dipende dal bilanciamento delle partizioni effettuate dall algoritmo di partizionamento (scelta del pivot) caso migliore: partizioni perfettamente bilanciate, entrambe di dimensione n/2 caso peggiore: una partizione è sempre di dimensione 1 (l altra sarà di dimensione n-1) Suddivisione successiva della sequenza in sottosequenze Rappresentazione tramite un albero binario Complessità: n log 2 n (tempo asintotico medio) Algoritmo ottimo! Prof.ssa Lanza - AA DIB 40/66

41 Ordinamento Veloce Considerazioni n n/2 n/2 n/4 n/4 n/4 n/4 n/8 n/8 n/8 n/8 n/8 n/8 n/8 n/8 sino ad ottenere n log 2 n Prof.ssa Lanza - AA DIB 41/66

42 Fusione (Merge) Fondere due array, già ordinati secondo il medesimo criterio, in un unico array ordinato secondo sempre lo stesso criterio a: b: c: Numero di elementi dell array c risultante pari alla somma degli elementi dei due array, m +n Necessità di esaminare tutti gli elementi dei due array dati Prof.ssa Lanza - AA DIB 42/66

43 Fusione I due array possono considerarsi come costituiti da sottosequenze da concatenare opportunamente nell array finale Suddividere ciascuno dei due array dati in una parte già fusa e una ancora da fondere In ogni istante, esaminare il primo elemento della parte da fondere dei due array Inserire il minore nella prima posizione dell array fuso Avanzare al prossimo elemento dell array da cui è stato preso Prof.ssa Lanza - AA DIB 43/66

44 Fusione Uno dei due array finirà per primo Copiare fino ad esaurimento gli elementi restanti nell array finale Individuabile dall inizio confrontando gli ultimi elementi dei due array Caso particolare: se l ultimo elemento di un array è minore del primo elemento dell altro, la fusione si riduce alla copiatura degli elementi dell uno seguita dalla copiatura degli elementi dell altro Prof.ssa Lanza - AA DIB 44/66

45 Fusione Esempio a: i=2 b: j=3 c: k=4 Prof.ssa Lanza - AA DIB 45/66

46 Fusione Algoritmo ingenuo Mentre ci sono elementi da considerare nei due array (i<m) e (j <n) Confronta i loro primi elementi non fusi e metti il più piccolo nell array finale Aggiorna l indice dell array appropriato Se è finito il primo array, allora Copia il resto del secondo nell array finale Altrimenti Copia il resto del primo nell array finale Prof.ssa Lanza - AA DIB 46/66

47 Fusione Una implementazione C void merge( int a[ ], int b[ ], int c[ ], int m, int n) { int i = 0, j= 0, k = 0; while ((i < m)&& (j < n)) if (a[i] < b[j]) {c[k] = a[i]; i=i+1; k=k+1}; else {c[k] = b[ j]; j=j+1; k=k+1}; while (i < m) c[k++] = a[ i++]; while (j < n) c[k++] = b[ j++]; } Prof.ssa Lanza - AA DIB 47/66

48 Fusione Modularizzazione Procedura merge Decide quale array finisce prima, quindi esegue la fusione di conseguenza Procedura mergecopy Distingue il caso di accodamento dalla fusione classica e fonde l array che finisce prima con l altro Procedura shortmerge Fonde le parti degli array ricadenti nello stesso intervallo Procedura copy Copia nell array risultato gli elementi di un array dalla posizione attuale fino alla fine La procedura da chiamare nel main è merge Prof.ssa Lanza - AA DIB 48/66

49 Fusione Procedura merge Definire gli array a[1..m] e b[1..n] Se l ultimo elemento di a è dell ultimo elemento di b allora Fondi tutto a con b mergecopy( a, b, c, m, n) Copia il resto di b copy Altrimenti Fondi tutto b con a mergecopy(b, a, c, n, m) Copia il resto di a copy Fornire il risultato c[1..n+m] Prof.ssa Lanza - AA DIB 49/66

50 Fusione Procedura mergecopy Definire gli array a[1..m] e b[1..n] con a[m] b[n] Se l ultimo elemento di a è al primo elemento di b allora (vengono evitati tutti i confronti) Copia tutto a nei primi m elementi di c copy Copia tutto b in c, partendo dalla posizione m+1 copy Altrimenti Fondi in c tutto a con b shortmerge Copia il resto di b in c partendo dalla posizione in cui è finita la fusione copy Prof.ssa Lanza - AA DIB 50/66

51 Fusione Procedura shortmerge Definire gli array a[1..m] e b[1..n] con a[m] b[n] Mentre tutto a non è ancora fuso esegui Se il corrente di a del corrente di b allora Copia il corrente di a nella corrente posizione di c Avanza l indice di a Altrimenti Copia il corrente di b nella corrente posizione di c Avanza l indice di b Avanza l indice di c Prof.ssa Lanza - AA DIB 51/66

52 Fusione Procedura shortmerge a: b: da fondere c: Situazione della fusione dopo che l array a si è esaurito Prof.ssa Lanza - AA DIB 52/66

53 Fusione Procedura copy Definire gli array b[1..n] e c[1..n+m] e definire da dove cominciare la copia da b (al corrente j) e in c (al corrente k) Mentre non è ancora finito b esegui Copia l elemento dalla corrente posizione in b nella corrente posizione in c Avanza l indice di b (ossia j) Avanza l indice di c (ossia k) Prof.ssa Lanza - AA DIB 53/66

54 Fusione Considerazioni L algoritmo non è adatto per fondere due insiemi di dati di cui non si conosca la cardinalità È una situazione frequente Occorre apportare modifiche Prof.ssa Lanza - AA DIB 54/66

55 Ordinamento per Fusioni Successive Algoritmo di MergeSort L idea di base è che l ordinamento di una lista di n elementi può essere ottenuto Dividendo la lista in due sequenze di n/2 elementi ciascuna Dimensione inferiore (esattamente dimezzata) Ordinando singolarmente ogni sequenza Problema di ordine inferiore Risolubile secondo la stessa tecnica» Procedura ricorsiva Fondendo le due metà ordinate in un unica sequenza Lista risultante ordinata Strategia fondata sul principio del divide et impera Prof.ssa Lanza - AA DIB 55/66

56 Ordinamento per Fusione Esempio Insieme iniziale Suddivisione in 2 sottoinsiemi Ordinamento di ogni singolo sottoinsieme Fusione dei sottoinsiemi ordinati Prof.ssa Lanza - AA DIB 56/66

57 MergeSort (sulla Ricorsione) Se l array da ordinare contiene n= 1 elemento, allora (per definizione) l array è già ordinato: è l assioma (anche se n=0 l array è ordinato) contiene n>1 elementi, si suddivide a metà l array iniziale, si ordinano le due metà e si fondono. Si arriva a suddividere l array iniziale in n sottoinsiemi costituiti da 1 elemento ciascuno, si riaggregano i sottoinsiemi fondendoli ordinatamente sino a ricostruire una unica sequenza ordinata. Prof.ssa Lanza - AA DIB 57/66

58 MergeSort (Implementazione C) void MergeSort(int a[ ]; int primo, ultimo) { int mid; if primo < ultimo /* a ha almeno 2 elementi */ { mid = (primo + ultimo) / 2; MergeSort(a, primo, mid); /* prima chiamata ricorsiva */ MergeSort(a, mid + 1, ultimo); /* seconda chiamata ricorsiva */ merge(a, primo, mid, ultimo); /* Att.ne: procedura iterativa diversa da quella definita in precedenza */ } } Prof.ssa Lanza - AA DIB 58/66

59 Ordinamento per Fusioni Successive (Pascal) procedure MergeSort(var a: nelements; primo, ultimo: integer); var q: integer; begin if primo < ultimo then begin q := (primo + ultimo) DIV 2; MergeSort(a, primo, q); MergeSort(a, q + 1, ultimo); merge(a, primo, q, ultimo) end end; Prof.ssa Lanza - AA DIB 59/66

60 Procedura Merge per MergeSort La procedura di fusione deve lavorare su segmenti diversi di uno stesso vettore Non può essere la stessa già definita per la fusione di due vettori distinti Occorre definire una nuova procedura che fonde due sottosequenze contigue di uno stesso vettore void merge(int a[ ]; int primo, mezzo, ultimo) Occorrono: un array di appoggio b per il risultato della fusione (alla fine b viene copiato in a) variabili locali usate come indici Prof.ssa Lanza - AA DIB 60/66

61 Merge per MergeSort (pseudo-codice) Merge( a, primo, mid, ultimo) inizio Sia i= primo e j = mid + 1 /* fondere a(primo..mid) con a(mid+1..ultimo)*/ k = primo mentre (i <= mid) e (j <= ultimo) esegui se a i < a j allora b k = a i ; i = i + 1; altrimenti b k = a j ; j = j + 1; fine_se k = k + 1 fine_mentre se i <= mid allora copia (a i a mid ) altrimenti copia (a j a ultimo ) fine_se copia l array b nell array a fine Merge Prof.ssa Lanza - AA DIB 61/66

62 Merge per il MergeSort (Pascal) begin i:= primo; k := primo; j := mezzo + 1; while (i <= mezzo) and (j <= ultimo) do begin if a[i] < a[j] then begin b[k] := a[i]; i := i + 1 end else begin b[k] := a[j]; j := j + 1 end; k := k + 1 end; if i <= mezzo then begin j := ultimo k; for h := j downto 0 do a[k+h] := a[i+h] for j := primo to k-1 do a[j] := b[j] end; end; Prof.ssa Lanza - AA DIB 62/66

63 Ordinamento per Fusioni Successive (Pascal) procedure ordina_per_fusioni(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, mezzo: integer); var i, j, k, h: integer; begin {merge} end; {merge} begin {mergesort} end {mergesort} begin {chiamante} mergesort(a, b, 1, n) end {chiamante} Prof.ssa Lanza - AA DIB 63/66

64 MergeSort Considerazioni Durante il processo di suddivisione, l insieme non viene in alcun modo modificato, i suoi elementi non sono né confrontati, né spostati. Viene operata una suddivisione dicotomica ricorsiva della sequenza iniziale da ordinare sino ad ottenere n sequenze di dimensione 1. Quando la procedura ricorsiva MergeSort viene chiamata per una sottosequenza di lunghezza 1, sarà primo=ultimo e la procedura termina senza compiere alcuna operazione. Il punto di forza dell algoritmo sta nel backtracking della ricorsione. Prof.ssa Lanza - AA DIB 64/66

65 MergeSort Considerazioni Durante il backtracking vengono fusi a due a due i sottoinsiemi ottenuti con la suddivisione ricorsiva. Durante la fusione gli elementi vengono posizionati in modo da ottenere una unica sottosequenza ordinata da 2 sottosequenze ordinate Si inizia la fusione con sequenze costituite da 1 solo elemento e, perciò, ordinate. La complessità computazionale è O(nlog 2 n) Non esistono casi più favorevoli di altri l algoritmo si comporta nello stesso modo a prescindere dalla disposizione iniziale degli elementi nella sequenza da ordinare. Prof.ssa Lanza - AA DIB 65/66

66 MergeSort Esempio n = 8 = 2 3 da ordinare: {3,15,6,2,7,4,12,8} {3,15,6,2} {7,4,12,8} {3,15} {6,2} {7,4} {12,8} {3} {15} {6} {2} {7} {4} {12} {8} {3, 15} {2, 6} lungh. 2 {4, 7} {8, 12} ordinato: {2, 3, 6, 15} lungh. 4 {4, 7, 8, 12} {2, 3, 4, 6, 7, 8, 12, 15} lungh.8 Le sottosequenze ordinate hanno lunghezza fissa: da 2 0 sino a 2 log 2 n (log 2 n = log = 3) Prof.ssa Lanza - AA DIB 66/66

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

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

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

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

Dettagli

Alberi binari di ricerca

Alberi binari di ricerca Alberi binari di ricerca Ilaria Castelli castelli@dii.unisi.it Università degli Studi di Siena Dipartimento di Ingegneria dell Informazione A.A. 2009/20010 I. Castelli Alberi binari di ricerca, A.A. 2009/20010

Dettagli

2.3 Cammini ottimi. E. Amaldi Fondamenti di R.O. Politecnico di Milano 1

2.3 Cammini ottimi. E. Amaldi Fondamenti di R.O. Politecnico di Milano 1 . Cammini ottimi E. Amaldi Fondamenti di R.O. Politecnico di Milano .. Cammini minimi e algoritmo di Dijkstra Dato un grafo orientato G = (N, A) con una funzione di costo c : A c ij R e due nodi s e t,

Dettagli

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

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

Dettagli

Esercitazione 3. Espressioni booleane I comandi if-else e while

Esercitazione 3. Espressioni booleane I comandi if-else e while Esercitazione 3 Espressioni booleane I comandi if-else e while Esercizio Si consideri la seguente istruzione: if (C1) if (C2) S1; else S2; A quali delle seguenti interpretazioni corrisponde? if (C1) if

Dettagli

= < < < < < Matematica 1

= < < < < < Matematica  1 NUMERI NATURALI N I numeri naturali sono: 0,1,2,3,4,5,6,7,8,9,10,11,12,13,... L insieme dei numeri naturali è indicato con la lettera. Si ha cioè: N= 0,1,2,3,4,5,6,7,.... L insieme dei naturali privato

Dettagli

Corso di Fondamenti di Informatica

Corso di Fondamenti di Informatica Corso di Fondamenti di Informatica Gli algoritmi di base sul tipo array: ordinamento e ricerca Claudio De Stefano - Corso di Fondamenti di Informatica 1 Algoritmi di ordinamento gli algoritmi si differenziano

Dettagli

Corso di Programmazione Algoritmi Fondamentali. Minimo fra 3 valori. Minimo fra 3 valori Algoritmo. Dott. Pasquale Lops

Corso di Programmazione Algoritmi Fondamentali. Minimo fra 3 valori. Minimo fra 3 valori Algoritmo. Dott. Pasquale Lops Materiale didattico preparato dal dott. Stefano Ferilli Corso di Programmazione Algoritmi Fondamentali Dott. Pasquale Lops lops@di.uniba.it Corso di Programmazione - DIB 1/249 Minimo fra 3 valori Trovare

Dettagli

ADT Coda con priorità

ADT Coda con priorità Code con priorità ADT Coda con priorità Una coda con priorità è una struttura dati dinamica che permette di gestire una collezione di dati con chiave numerica. Una coda con priorità offre le operazioni

Dettagli

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

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

Dettagli

Algoritmi e Strutture Dati. HeapSort

Algoritmi e Strutture Dati. HeapSort Algoritmi e Strutture Dati HeapSort Selection Sort: intuizioni L algoritmo Selection-Sort scandisce tutti gli elementi dell array a partire dall ultimo elemento fino all inizio e ad ogni iterazione: Viene

Dettagli

Linguaggio C++ 8. Matrici

Linguaggio C++ 8. Matrici 2009-2010 Ingegneria Aerospaziale Prof. A. Palomba - Elementi di Informatica (E-Z) Linguaggio C++ 8 Matrici Linguaggio C++ 8 1 Array a più dimensioni. Sintassi generale : tipo nome [dimensione 1][dimensione

Dettagli

Unità Didattica 3 Linguaggio C. Generalità sulle Funzioni. Variabili locali e globali. Passaggio di parametri per valore.

Unità Didattica 3 Linguaggio C. Generalità sulle Funzioni. Variabili locali e globali. Passaggio di parametri per valore. Unità Didattica 3 Linguaggio C Generalità sulle Funzioni. Variabili locali e globali. Passaggio di parametri per valore. Funzioni Generalizzazione del concetto di funzione algebrica: legge che associa

Dettagli

Strutture di accesso ai dati: B + -tree

Strutture di accesso ai dati: B + -tree Strutture di accesso ai dati: B + -tree A L B E R T O B E L U S S I S E C O N D A P A R T E A N N O A C C A D E M I C O 2 0 0 9-2 0 0 Osservazione Quando l indice aumenta di dimensioni, non può risiedere

Dettagli

Procedura operativa per la gestione della funzione di formazione classi prime

Procedura operativa per la gestione della funzione di formazione classi prime Procedura operativa per la gestione della funzione di formazione classi prime Questa funzione viene fornita allo scopo di effettuare la formazione delle classi prime nel rispetto dei parametri indicati

Dettagli

FILE E INDICI Architettura DBMS

FILE E INDICI Architettura DBMS FILE E INDICI Architettura DBMS Giorgio Giacinto 2010 Database 2 Dati su dispositivi di memorizzazione esterni! Dischi! si può leggere qualunque pagina a costo medio fisso! Nastri! si possono leggere le

Dettagli

Corso di Tecniche di Programmazione

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

Dettagli

Diagrammi a blocchi 1

Diagrammi a blocchi 1 Diagrammi a blocchi 1 Sommario Diagrammi di flusso, o a blocchi. Analisi strutturata. Esercizi. 2 Diagrammi a blocchi È un linguaggio formale di tipo grafico per rappresentare gli algoritmi. Attraverso

Dettagli

Esempi di attribuzione dei seggi

Esempi di attribuzione dei seggi Esempi di attribuzione dei seggi Al fine di chiarire il funzionamento dei meccanismi previsti per l attribuzione dei seggi e l ordine delle relative operazioni, vengono presentati due esempi di attribuzione

Dettagli

Mini-Corso di Informatica

Mini-Corso di Informatica Mini-Corso di Informatica CALCOLI DI PROCESSO DELL INGEGNERIA CHIMICA Ing. Sara Brambilla Tel. 3299 sara.brambilla@polimi.it Note sulle esercitazioni Durante le esercitazioni impareremo a implementare

Dettagli

Elezioni comunali 2014. Esempi di attribuzione dei seggi

Elezioni comunali 2014. Esempi di attribuzione dei seggi Elezioni comunali 2014 4 Esempi di attribuzione dei seggi Esempi di attribuzione dei seggi Al fine di chiarire il funzionamento dei meccanismi previsti per l attribuzione dei seggi e l ordine delle relative

Dettagli

Appunti di informatica. Lezione 4 anno accademico 2015-2016 Mario Verdicchio

Appunti di informatica. Lezione 4 anno accademico 2015-2016 Mario Verdicchio Appunti di informatica Lezione 4 anno accademico 2015-2016 Mario Verdicchio Numeri primi Si definisce primo un numero intero maggiore di 1 che ha due soli divisori: se stesso e 1 Esempi di numeri primi:

Dettagli

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1 Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1 Dispensa E03 Esempi di algoritmi e programmi A. Miola Settembre 2006 http://www.dia.uniroma3.it/~java/fondinf1/ Esempi di algoritmi e

Dettagli

Esercitazione 4. Comandi iterativi for, while, do-while

Esercitazione 4. Comandi iterativi for, while, do-while Esercitazione 4 Comandi iterativi for, while, do-while Comando for for (istr1; cond; istr2) istr3; Le istruzioni vengono eseguite nel seguente ordine: 1) esegui istr1 2) se cond è vera vai al passo 3 altrimenti

Dettagli

Sistemi Web per il turismo - lezione 3 -

Sistemi Web per il turismo - lezione 3 - Sistemi Web per il turismo - lezione 3 - Software Si definisce software il complesso di comandi che fanno eseguire al computer delle operazioni. Il termine si contrappone ad hardware, che invece designa

Dettagli

Sommario. Tabelle ad indirizzamento diretto e hash Funzioni Hash

Sommario. Tabelle ad indirizzamento diretto e hash Funzioni Hash Funzioni Hash Sommario Tabelle ad indirizzamento diretto e hash Funzioni Hash Requisiti Metodo della divisione Metodo della moltiplicazione Funzione Hash Universale La ricerca Talvolta si richiede che

Dettagli

PROGRAMMAZIONE STRUTTURATA

PROGRAMMAZIONE STRUTTURATA PROGRAMMAZIONE STRUTTURATA Programmazione strutturata 2 La programmazione strutturata nasce come proposta per regolamentare e standardizzare le metodologie di programmazione (Dijkstra, 1965) Obiettivo:

Dettagli

Pro memoria per la ripartizione delle spese

Pro memoria per la ripartizione delle spese Pro memoria per la ripartizione delle spese Documento di lavoro post incontro del 23 e 24 novembre 2009, Roma, ad uso interno del Gruppo di lavoro Istat-Upi per la sperimentazione della contabilità ambientale

Dettagli

Numeri frazionari. sistema posizionale. due modi: virgola fissa virgola mobile. posizionale, decimale

Numeri frazionari. sistema posizionale. due modi: virgola fissa virgola mobile. posizionale, decimale Numeri frazionari sistema posizionale due modi: virgola fissa virgola mobile posizionale, decimale 0,341=tre decimi più quattro centesimi più un millesimo cifre dopo la virgola: decimi centesimi millesimi

Dettagli

INDICE. Vista Libretto Livello Digitale 2. Importazione di dati da strumento 3. Inserisci File Vari 5. Compensazione Quote 5.

INDICE. Vista Libretto Livello Digitale 2. Importazione di dati da strumento 3. Inserisci File Vari 5. Compensazione Quote 5. Prodotto da INDICE Vista Libretto Livello Digitale 2 Importazione di dati da strumento 3 Inserisci File Vari 5 Compensazione Quote 5 Uscite 6 File Esporta Livellazioni (.CSV) 6 Corso Livello Digitale Pag.

Dettagli

Codice Gray. (versione Marzo 2007)

Codice Gray. (versione Marzo 2007) Codice Gray (versione Marzo 27) Data una formula booleana con n variabili, per costruire una tavola di verità per questa formula è necessario generare tutte le combinazioni di valori per le n variabili.

Dettagli

Programmazione. Cognome... Nome... Matricola... Prova scritta del 22 settembre 2014. Negli esercizi proposti si utilizzano le seguenti classi:

Programmazione. Cognome... Nome... Matricola... Prova scritta del 22 settembre 2014. Negli esercizi proposti si utilizzano le seguenti classi: Cognome................................ Nome................................... Matricola............................... Programmazione Prova scritta del 22 settembre 2014 TEMPO DISPONIBILE: 2 ore Negli

Dettagli

Strutture Dinamiche. Fondamenti di Informatica

Strutture Dinamiche. Fondamenti di Informatica Strutture Dinamiche Fondamenti di Informatica 1 Indice Allocazione e de-allocazione di memoria Liste e loro gestione Companies, srl 2 Allocazione e cancellazione di memoria malloc (sizeof (TipoDato));

Dettagli

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

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

Dettagli

7 2 =7 2=3,5. Casi particolari. Definizione. propria se < impropria se > e non è multiplo di b. apparente se è un multiplo di. Esempi.

7 2 =7 2=3,5. Casi particolari. Definizione. propria se < impropria se > e non è multiplo di b. apparente se è un multiplo di. Esempi. NUMERI RAZIONALI Q Nell insieme dei numeri naturali e nell insieme dei numeri interi relativi non è sempre possibile effettuare l operazione di divisione. Infatti, eseguendo la divisione 7 2 si ottiene

Dettagli

Somma di numeri floating point. Algoritmi di moltiplicazione e divisione per numeri interi

Somma di numeri floating point. Algoritmi di moltiplicazione e divisione per numeri interi Somma di numeri floating point Algoritmi di moltiplicazione e divisione per numeri interi Standard IEEE754 " Standard IEEE754: Singola precisione (32 bit) si riescono a rappresentare numeri 2.0 10 2-38

Dettagli

Informatica/ Ing. Meccanica/ Prof. Verdicchio/ 14/02/2012 / Foglio delle domande / VERSIONE 1

Informatica/ Ing. Meccanica/ Prof. Verdicchio/ 14/02/2012 / Foglio delle domande / VERSIONE 1 Informatica/ Ing. Meccanica/ Prof. Verdicchio/ 14/02/2012 / Foglio delle domande / VERSIONE 1 1) Il bus in un computer trasporta a) solo dati b) solo istruzioni c) sia dati sia istruzioni 2) In una sequenza

Dettagli

Algoritmi. Pagina 1 di 5

Algoritmi. Pagina 1 di 5 Algoritmi Il termine algoritmo proviene dalla matematica e deriva dal nome di in algebrista arabo del IX secolo di nome Al-Khuwarizmi e sta ad indicare un procedimento basato su un numero finito operazioni

Dettagli

Statistica descrittiva e statistica inferenziale

Statistica descrittiva e statistica inferenziale Statistica descrittiva e statistica inferenziale 1 ALCUNI CONCETTI POPOLAZIONE E CAMPIONE Popolazione: insieme finito o infinito di unità statistiche classificate secondo uno o più caratteri Campione:

Dettagli

La codifica. dell informazione

La codifica. dell informazione La codifica dell informazione (continua) Codifica dei numeri Il codice ASCII consente di codificare le cifre decimali da 0 a 9 fornendo in questo modo un metodo per la rappresentazione dei numeri Il numero

Dettagli

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

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

Dettagli

Introduzione a Visual Basic Lezione 2 Cicli e anomalie

Introduzione a Visual Basic Lezione 2 Cicli e anomalie a Visual Basic Lezione 2 Mario Alviano Introduzione all informatica Università della Calabria http://alviano.net/introinfo A.A. 2008/09 Introduzione Perché i cicli? Un esempio concreto Finora abbiamo visto

Dettagli

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

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

Dettagli

Matematica e-learning - Corso Zero di Matematica. Gli Insiemi. Prof. Erasmo Modica A.A.

Matematica e-learning - Corso Zero di Matematica. Gli Insiemi. Prof. Erasmo Modica  A.A. Matematica e-learning - Gli Insiemi Prof. Erasmo Modica http://www.galois.it erasmo@galois.it A.A. 2009/2010 1 Simboli Matematici Poiché in queste pagine verranno utilizzati differenti simboli matematici,

Dettagli

DESCRIZIONE CREAZIONE APP Si suddivide in 4 fasi di lavoro: 1. PIANIFICAZIONE; 2. PROGETTAZIONE; 3. SVILUPPO; 4. DISTRIBUZIONE.

DESCRIZIONE CREAZIONE APP Si suddivide in 4 fasi di lavoro: 1. PIANIFICAZIONE; 2. PROGETTAZIONE; 3. SVILUPPO; 4. DISTRIBUZIONE. DESCRIZIONE CREAZIONE APP Si suddivide in 4 fasi di lavoro: 1. PIANIFICAZIONE; 2. PROGETTAZIONE; 3. SVILUPPO; 4. DISTRIBUZIONE. PIANIFICAZIONE La pianificazione è la prima fase. Questa è la più delicata

Dettagli

UNIVERSITA DEGLI STUDI DI PERUGIA

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

Dettagli

7 Disegni sperimentali ad un solo fattore. Giulio Vidotto Raffaele Cioffi

7 Disegni sperimentali ad un solo fattore. Giulio Vidotto Raffaele Cioffi 7 Disegni sperimentali ad un solo fattore Giulio Vidotto Raffaele Cioffi Indice: 7.1 Veri esperimenti 7.2 Fattori livelli condizioni e trattamenti 7.3 Alcuni disegni sperimentali da evitare 7.4 Elementi

Dettagli

LEZIONE 4. { x + y + z = 1 x y + 2z = 3

LEZIONE 4. { x + y + z = 1 x y + 2z = 3 LEZIONE 4 4.. Operazioni elementari di riga. Abbiamo visto, nella precedente lezione, quanto sia semplice risolvere sistemi di equazioni lineari aventi matrice incompleta fortemente ridotta per righe.

Dettagli

Programmazione. Cognome... Nome... Matricola... Prova scritta del 11 luglio 2014

Programmazione. Cognome... Nome... Matricola... Prova scritta del 11 luglio 2014 Cognome................................ Nome................................... Matricola............................... Programmazione Prova scritta del 11 luglio 2014 TEMPO DISPONIBILE: 2 ore Negli esercizi

Dettagli

Progettazione di Algoritmi

Progettazione di Algoritmi Corso di laurea in Informatica Prova scritta del: Progettazione di Algoritmi 1/01/016 Prof. De Prisco Inserire i propri dati nell apposito spazio. Non voltare la finché non sarà dato il via. Dal via avrai

Dettagli

Disequazioni in una incognita. La rappresentazione delle soluzioni

Disequazioni in una incognita. La rappresentazione delle soluzioni Disequazioni in una incognita Una disequazione in una incognita è una disuguaglianza tra due espressioni contenenti una variabile (detta incognita) verificata solo per particolari valori attribuirti alla

Dettagli

PON 2007 2013 Liceo Scientifico Leonardo da Vinci. Vallo della Lucania

PON 2007 2013 Liceo Scientifico Leonardo da Vinci. Vallo della Lucania PON 2007 2013 Liceo Scientifico Leonardo da Vinci Vallo della Lucania Nuovi percorsi matematici: Osservare, descrivere, costruire. Matlab - 2: Lavorare con le matrici Vallo della Lucania 26 Settembre 2008

Dettagli

Macchine RAM. API a.a. 2013/2014 Gennaio 27, 2014 Flavio Mutti, PhD

Macchine RAM. API a.a. 2013/2014 Gennaio 27, 2014 Flavio Mutti, PhD Macchine RAM API a.a. 2013/2014 Gennaio 27, 2014 Flavio Mutti, PhD 2 Macchina RAM 3 Esercizio Si consideri il linguaggio definito da: L = wcw R w a, b } 1. Codificare un programma RAM per il riconoscimento

Dettagli

Codice binario. Codice. Codifica - numeri naturali. Codifica - numeri naturali. Alfabeto binario: costituito da due simboli

Codice binario. Codice. Codifica - numeri naturali. Codifica - numeri naturali. Alfabeto binario: costituito da due simboli Codice La relazione che associa ad ogni successione ben formata di simboli di un alfabeto il dato corrispondente è detta codice. Un codice mette quindi in relazione le successioni di simboli con il significato

Dettagli

11.4 Chiusura transitiva

11.4 Chiusura transitiva 6 11.4 Chiusura transitiva Il problema che consideriamo in questa sezione riguarda il calcolo della chiusura transitiva di un grafo. Dato un grafo orientato G = hv,ei, si vuole determinare il grafo orientato)

Dettagli

In molte applicazioni sorge il problema di sapere in quanti modi possibili si può presentare un certo fenomeno.

In molte applicazioni sorge il problema di sapere in quanti modi possibili si può presentare un certo fenomeno. Definizione Oggetto del calcolo combinatorio è quello di determinare il numero dei modi mediante i quali possono essere associati, secondo prefissate regole, gli elementi di uno stesso insieme o di più

Dettagli

Esercizio 1: archivio CD e DVD

Esercizio 1: archivio CD e DVD Esercizio 1: archivio CD e DVD Realizzare un applicazione Java per la creazione e la consultazione di un archivio di dischi ottici (CD e DVD). L applicazione riceve da standard input in maniera interattiva

Dettagli

Laboratorio di Programmazione: Linguaggio C Lezione 9 del 27 novembre 2013

Laboratorio di Programmazione: Linguaggio C Lezione 9 del 27 novembre 2013 Laboratorio di Programmazione: Linguaggio C Lezione 9 del 27 novembre 2013 Damiano Macedonio Giochi d Azzardo Note Iniziali Per generare un numero casuale basta includere la libreria stdlib.h e utilizzare

Dettagli

SUI SISTEMI DI DISEQUAZIONI IN DUE INCOGNITE

SUI SISTEMI DI DISEQUAZIONI IN DUE INCOGNITE SUI SISTEMI DI DISEQUAZIONI IN DUE INCOGNITE.Sistema di disequazioni in due incognite di primo grado Una disequazione di primo grado in due incognite: a b c nel piano cartesiano, rappresenta uno dei due

Dettagli

Rappresentazioni numeriche

Rappresentazioni numeriche Rappresentazioni numeriche Un numero è dotato di un valore una rappresentazione La rappresentazione di un numero è il sistema che utilizziamo per indicarne il valore. Normalmente è una sequenza (stringa)

Dettagli

Metodi e Modelli per l Ottimizzazione Combinatoria Ripasso sulla Programmazione Lineare e il metodo del Simplesso (parte I)

Metodi e Modelli per l Ottimizzazione Combinatoria Ripasso sulla Programmazione Lineare e il metodo del Simplesso (parte I) Metodi e Modelli per l Ottimizzazione Combinatoria Ripasso sulla Programmazione Lineare e il metodo del Simplesso (parte I) Luigi De Giovanni Giacomo Zambelli 1 Problemi di programmazione lineare Un problema

Dettagli

Grafici. 1 Generazione di grafici a partire da un foglio elettronico

Grafici. 1 Generazione di grafici a partire da un foglio elettronico Grafici In questa parte analizzeremo le funzionalità relative ai grafici. In particolare: 1. Generazione di grafici a partire da un foglio elettronico 2. Modifica di un grafico 1 Generazione di grafici

Dettagli

4 Le liste collegate 4.0. Le liste collegate. 4 Le liste collegate Rappresentazione di liste 4.1 Rappresentazione di liste

4 Le liste collegate 4.0. Le liste collegate. 4 Le liste collegate Rappresentazione di liste 4.1 Rappresentazione di liste 4 Le liste collegate 4.0 Le liste collegate c Diego Calvanese Fondamenti di Informatica Corso di Laurea in Ingegneria Elettronica A.A. 2001/2002 4.0 0 4 Le liste collegate Rappresentazione di liste 4.1

Dettagli

1 L estrazione di radice

1 L estrazione di radice 1 L estrazione di radice Consideriamo la potenza 3 2 = 9 di cui conosciamo: Esponente 3 2 = 9 Valore della potenza Base L operazione di radice quadrata consiste nel chiedersi qual è quel numero x che elevato

Dettagli

Cluster Analysis. La Cluster Analysis è il processo attraverso il quale vengono individuati raggruppamenti dei dati. per modellare!

Cluster Analysis. La Cluster Analysis è il processo attraverso il quale vengono individuati raggruppamenti dei dati. per modellare! La Cluster Analysis è il processo attraverso il quale vengono individuati raggruppamenti dei dati. Le tecniche di cluster analysis vengono usate per esplorare i dati e non per modellare! La cluster analysis

Dettagli

Strutturare il codice: sottoprogrammi

Strutturare il codice: sottoprogrammi Andrea Marin Università Ca Foscari Venezia Laurea in Informatica Corso di Programmazione part-time a.a. 2011/2012 Motivazioni Alcuni problemi si presentano frequentemente durante lo sviluppo di un programma

Dettagli

Sistemi Operativi Esercizi Gestione Memoria

Sistemi Operativi Esercizi Gestione Memoria Sistemi Operativi Esercizi Gestione Memoria Docente: Claudio E. Palazzi cpalazzi@math.unipd.it Crediti per queste slides ad A. Memo e T. Vardanega Sistemi Operativi - C. Palazzi 64 Esercizio 1 Dato un

Dettagli

Appunti del corso di Informatica 1 (IN110 Fondamenti) 3 Modelli di calcolo

Appunti del corso di Informatica 1 (IN110 Fondamenti) 3 Modelli di calcolo Università Roma Tre Dipartimento di Matematica e Fisica Corso di Laurea in Matematica Appunti del corso di Informatica 1 (IN110 Fondamenti) 3 Modelli di calcolo Marco Liverani (liverani@mat.uniroma3.it)

Dettagli

Corso di Fondamenti di Informatica Classi di istruzioni 2

Corso di Fondamenti di Informatica Classi di istruzioni 2 Corso di Informatica Classi di istruzioni 2 Anno Accademico 2010/2011 Francesco Tortorella Strutture di controllo Caratteristica essenziale degli algoritmi è la possibilità di decidere le operazioni da

Dettagli

VALORIZZAZIONE MOVIMENTI DI SCARICO E VALORIZZAZIONE TRASFERIMENTO COSTI DI ANALITICA

VALORIZZAZIONE MOVIMENTI DI SCARICO E VALORIZZAZIONE TRASFERIMENTO COSTI DI ANALITICA VALORIZZAZIONE MOVIMENTI DI SCARICO E VALORIZZAZIONE TRASFERIMENTO COSTI DI ANALITICA Riportiamo di seguito i vari passaggi per poter gestire la rivalorizzazione, sui documenti di scarico, del costo di

Dettagli

Esercizio. Sia a R non nullo e siano m, n numeri interi non nulli con m n. Allora a m /a n è uguale a. [1] 1/a n m [2] 1/a m n [3] 1/a n m [4] a n m

Esercizio. Sia a R non nullo e siano m, n numeri interi non nulli con m n. Allora a m /a n è uguale a. [1] 1/a n m [2] 1/a m n [3] 1/a n m [4] a n m Sia a R non nullo e siano m, n numeri interi non nulli con m n. Allora a m /a n è uguale a [1] 1/a n m [2] 1/a m n [3] 1/a n m [4] a n m Vale la [1] perché per le proprietà delle potenze risulta a m a

Dettagli

Introduzione alle macchine a stati (non definitivo)

Introduzione alle macchine a stati (non definitivo) Introduzione alle macchine a stati (non definitivo) - Introduzione Il modo migliore per affrontare un problema di automazione industriale (anche non particolarmente complesso) consiste nel dividerlo in

Dettagli

Manutenzione periodica al PIANO DEI CONTI

Manutenzione periodica al PIANO DEI CONTI Manutenzione periodica al PIANO DEI CONTI La nuova gestione Utilità Piano dei Conti Premessa... 2 La creazione di un nuovo sottoconto... 3 1. Nuovo sottoconto tramite duplica da piano dei conti standard...

Dettagli

BOLLETTINO dei controlli della produttività del latte 2015

BOLLETTINO dei controlli della produttività del latte 2015 ASSOCIAZIONE ITALIANA ALLEVATORI ENTE MORALE D.P.R. N. 1051 DEL 27-10-1950 UFFICIO CENTRALE DEI CONTROLLI DELLA PRODUTTIVITÁ ANIMALE SOTTOPOSTO ALLA VIGILANZA DEL MINISTERO DELLE POLITICHE AGRICOLE E FORESTALI

Dettagli

Progettazione logica

Progettazione logica Progettazione logica Progettazione Logica Il prodotto della progettazione logica è uno schema logico che rappresenta le informazioni contenute nello schema E- R in modo corretto ed efficiente. Richiede

Dettagli

Compilazione on-line del Piano di Studio

Compilazione on-line del Piano di Studio Compilazione on-line del Piano di Studio 1 Indice 1. INTRODUZIONE E ACCESSO AL SISTEMA... 3 1.1. Accesso alla funzionalità... 3 2. COMPILAZIONE DEL PIANO DI STUDIO... 4 2.1. Struttura della procedura di

Dettagli

Definizione: Dato un sottoinsieme non vuoti di. Si chiama funzione identica o identità di in sé la funzione tale che.

Definizione: Dato un sottoinsieme non vuoti di. Si chiama funzione identica o identità di in sé la funzione tale che. Esercitazioni di Analisi Matematica Prof.ssa Chiara Broggi Materiale disponibile su www.istitutodefilippi.it/claro Lezione 2: Funzioni reali e loro proprietà Definizione: Siano e due sottoinsiemi non vuoti

Dettagli

AA 2006-07 LA RICORSIONE

AA 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

Dettagli

Linguaggio C: introduzione

Linguaggio C: introduzione Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A. 2008/2009 Linguaggio C: introduzione La presente dispensa e da utilizzarsi

Dettagli

Il sistema informativo deve essere di tipo centralizzato e accessibile mediante un computer server installato nella rete locale dell albergo.

Il sistema informativo deve essere di tipo centralizzato e accessibile mediante un computer server installato nella rete locale dell albergo. PROBLEMA. Un albergo di una grande città intende gestire in modo automatizzato sia le prenotazioni sia i soggiorni e realizzare un database. Ogni cliente viene individuato, tra l altro, con i dati anagrafici,

Dettagli

Esercizi per il corso di Algoritmi e Strutture Dati

Esercizi per il corso di Algoritmi e Strutture Dati 1 Esercizi per il corso di Algoritmi e Strutture Dati Esercizi sulla Tecnica Divide et Impera N.B. Tutti gli algoritmi vanno scritti in pseudocodice (non in Java, né in C++, etc. ). Di tutti gli algoritmi

Dettagli

Architettura degli elaboratori Docente:

Architettura degli elaboratori Docente: Politecnico di Milano Il File System Architettura degli elaboratori Docente: Ouejdane Mejri mejri@elet.polimi.it Sommario File Attributi Operazioni Struttura Organizzazione Directory Protezione Il File

Dettagli

PowerDIP Software gestione presenze del personale aziendale. - Guida all inserimento e gestione dei turni di lavoro -

PowerDIP Software gestione presenze del personale aziendale. - Guida all inserimento e gestione dei turni di lavoro - PowerDIP Software gestione presenze del personale aziendale - Guida all inserimento e gestione dei turni di lavoro - Informazioni preliminari. E necessario innanzitutto scaricare e installare l ultima

Dettagli

Traduzione e adattamento a cura di Gylas per Giochi Rari. Versione 1.1 Novembre

Traduzione e adattamento a cura di Gylas per Giochi Rari. Versione 1.1 Novembre Traduzione e adattamento a cura di Gylas per Giochi Rari Versione 1.1 Novembre 2001 http://www.giochirari.it e-mail: giochirari@giochirari.it NOTA. La presente traduzione non sostituisce in alcun modo

Dettagli

Campionamento La statistica media campionaria e la sua distribuzione

Campionamento La statistica media campionaria e la sua distribuzione Campionamento La statistica media campionaria e la sua distribuzione 1 Definisco il problema da studiare: es. tempo di percorrenza tra abitazione e università Carattere: tempo ossia v.s. continua Popolazione:

Dettagli

Manuale Utente CMMG Corso Medici Medicina Generale

Manuale Utente CMMG Corso Medici Medicina Generale CMMG- Manuale Utente CMMG Aprile 2014 Versione 1.1 Manuale Utente CMMG Corso Medici Medicina Generale CMMG-Manuale Utente.doc Pagina 1 di 14 CMMG- Manuale Utente AGGIORNAMENTI DELLE VERSIONI Versione Data

Dettagli

Files in C++ Fondamenti di Informatica. R. Basili. a.a. 2006-2007

Files in C++ Fondamenti di Informatica. R. Basili. a.a. 2006-2007 Files in C++ Fondamenti di Informatica R. Basili a.a. 2006-2007 Sintesi Motivazioni Definizione di file in C++ Un esempio Uso dei file Esempi Esercizi Motivazioni il programma in esecuzione legge (sequenzialmente)

Dettagli

Il Sistema Operativo Windows

Il Sistema Operativo Windows Il Sistema Operativo Windows Il Sistema Operativo Windows 1 Per cominciare Le operazioni di base per utilizzare il computer sono: l accensione e lo spegnimento. Mentre l accensione del PC si ottiene premendo

Dettagli

SOTTOSPAZI E OPERAZIONI IN SPAZI DIVERSI DA R n

SOTTOSPAZI E OPERAZIONI IN SPAZI DIVERSI DA R n SPAZI E SOTTOSPAZI 1 SOTTOSPAZI E OPERAZIONI IN SPAZI DIVERSI DA R n Spazi di matrici. Spazi di polinomi. Generatori, dipendenza e indipendenza lineare, basi e dimensione. Intersezione e somma di sottospazi,

Dettagli

PROCESSI NON SEQUENZIALI E TIPI DI INTERAZIONE

PROCESSI NON SEQUENZIALI E TIPI DI INTERAZIONE PROCESSI NON SEQUENZIALI E TIPI DI INTERAZIONE 1 ALGORITMO, PROGRAMMA, PROCESSO Algoritmo Procedimento logico che deve essere eseguito per risolvere un determinato problema. Programma Descrizione di un

Dettagli

APPUNTI DI MATEMATICA ALGEBRA \ CALCOLO LETTERALE \ MONOMI (1)

APPUNTI DI MATEMATICA ALGEBRA \ CALCOLO LETTERALE \ MONOMI (1) LGEBR \ CLCOLO LETTERLE \ MONOMI (1) Un monomio è un prodotto di numeri e lettere; gli (eventuali) esponenti delle lettere sono numeri naturali (0 incluso). Ogni numero (reale) può essere considerato come

Dettagli

TEOREMA DEL RESTO E REGOLA DI RUFFINI

TEOREMA DEL RESTO E REGOLA DI RUFFINI TEOREMA DEL RESTO E REGOLA DI RUFFINI ALCUNI TEOREMI IMPORTANTI Prendiamo una divisione intera tra numeri: 6 : 3 = 2. Il resto di questa divisione è 0, e questo significa che moltiplicando il quoziente

Dettagli

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati Algoritmi e Strutture Dati Capitolo 8 Code con priorità: Heap binomiali Riepilogo Array non ord. Array ordinato Lista non ordinata Lista ordinata Find Min Insert Delete DelMin Incr. Key Decr. Key merge

Dettagli

I B+ Alberi. Sommario

I B+ Alberi. Sommario I B+ Alberi R. Basili (Basi di Dati, a.a. 2002-3) Sommario Indici organizzati secondo B + -alberi Motivazioni ed Esempio Definizione Ricerca in un B + -albero Esempio Vantaggi Inserimento/Cancellazione

Dettagli

Definizione di metodi in Java

Definizione di metodi in Java Definizione di metodi in Java Un metodo in Java definisce un operazione ad alto livello (sottoprogramma) che consente di manipolare dati e oggetti. Durante la computazione effettuata da un programma, un

Dettagli

DISPENSE DI PROGRAMMAZIONE

DISPENSE DI PROGRAMMAZIONE DISPENSE DI PROGRAMMAZIONE Modulo 1 Risolvere problemi con l elaboratore: dal problema all algoritmo (Parte II) I Linguaggi di descrizione degli algoritmi - Notazioni grafiche (parte 1) Il linguaggio dei

Dettagli

La durability. I dati modificati da una transazione che ha fatto il commit non devono mai essere persi. La durability consente di reagire a:

La durability. I dati modificati da una transazione che ha fatto il commit non devono mai essere persi. La durability consente di reagire a: La durability Basi di dati: Architetture e linee di evoluzione - Seconda edizione Capitolo 2 Appunti dalle lezioni Durability (Persistenza) I dati modificati da una transazione che ha fatto il commit non

Dettagli

Capitolo 9. Esercizio 9.1. Esercizio 9.2

Capitolo 9. Esercizio 9.1. Esercizio 9.2 Capitolo 9 Esercizio 9.1 Considerare lo relazione in figura 9.19 e individuare le proprietà della corrispondente applicazione. Individuare inoltre eventuali ridondanze e anomalie nella relazione. Docente

Dettagli