PROGRAMMAZIONE. Fusione Partizionamento Algoritmi avanzati di ordinamento. Prof.ssa Lanza - AA DIB 1/66
|
|
- Guglielmo Puglisi
- 6 anni fa
- Visualizzazioni
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 1 Ricerca in una sequenza di elementi Data una sequenza di elementi, occorre verificare se un elemento fa parte della sequenza oppure l elemento
DettagliHeap 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
DettagliDivide 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
DettagliAlberi 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
Dettagli2.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,
DettagliLaboratorio 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:
DettagliEsercitazione 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
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
DettagliCorso 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
DettagliCorso 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
DettagliADT 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
DettagliLaboratorio 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
DettagliAlgoritmi 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
DettagliLinguaggio 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
DettagliUnità 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
DettagliStrutture 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
DettagliProcedura 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
DettagliFILE 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
DettagliCorso di Tecniche di Programmazione
Corso di Tecniche di Programmazione Corsi di Laurea in Ingegneria Informatica ed Automatica Anno Accedemico 003/004 Proff. Giuseppe De Giacomo, Luca Iocchi, Domenico Lembo Dispensa : Algoritmi di Ordinamento
DettagliDiagrammi 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
DettagliEsempi 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
DettagliMini-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
DettagliElezioni 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
DettagliAppunti 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:
DettagliCorso 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
DettagliEsercitazione 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
DettagliSistemi 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
DettagliSommario. 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
DettagliPROGRAMMAZIONE STRUTTURATA
PROGRAMMAZIONE STRUTTURATA Programmazione strutturata 2 La programmazione strutturata nasce come proposta per regolamentare e standardizzare le metodologie di programmazione (Dijkstra, 1965) Obiettivo:
DettagliPro 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
DettagliNumeri 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
DettagliINDICE. 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.
DettagliCodice 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.
DettagliProgrammazione. 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
DettagliStrutture 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));
DettagliUNIVERSITÀ 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
Dettagli7 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
DettagliSomma 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
DettagliInformatica/ 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
DettagliAlgoritmi. 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
DettagliStatistica 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:
DettagliLa 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
DettagliDue 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
DettagliIntroduzione 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
DettagliSOMMARIO 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,
DettagliMatematica 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,
DettagliDESCRIZIONE 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
DettagliUNIVERSITA 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
Dettagli7 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
DettagliLEZIONE 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.
DettagliProgrammazione. 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
DettagliProgettazione 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
DettagliDisequazioni 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
DettagliPON 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
DettagliMacchine 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
DettagliCodice 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
Dettagli11.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)
DettagliIn 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ù
DettagliEsercizio 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
DettagliLaboratorio 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
DettagliSUI 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
DettagliRappresentazioni 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)
DettagliMetodi 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
DettagliGrafici. 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
Dettagli4 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
Dettagli1 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
DettagliCluster 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
DettagliStrutturare 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
DettagliSistemi 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
DettagliAppunti 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)
DettagliCorso 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
DettagliVALORIZZAZIONE 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
DettagliEsercizio. 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
DettagliIntroduzione 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
DettagliManutenzione 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...
DettagliBOLLETTINO 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
DettagliProgettazione 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
DettagliCompilazione 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
DettagliDefinizione: 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
DettagliAA 2006-07 LA RICORSIONE
PROGRAMMAZIONE AA 2006-07 LA RICORSIONE AA 2006-07 Prof.ssa A. Lanza - DIB 1/18 LA RICORSIONE Il concetto di ricorsione nasce dalla matematica Una funzione matematica è definita ricorsivamente quando nella
DettagliLinguaggio 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
DettagliIl 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,
DettagliEsercizi per il corso di Algoritmi e Strutture Dati
1 Esercizi per il corso di Algoritmi e Strutture Dati Esercizi sulla Tecnica Divide et Impera N.B. Tutti gli algoritmi vanno scritti in pseudocodice (non in Java, né in C++, etc. ). Di tutti gli algoritmi
DettagliArchitettura 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
DettagliPowerDIP 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
DettagliTraduzione 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
DettagliCampionamento 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:
DettagliManuale 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
DettagliFiles 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)
DettagliIl 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
DettagliSOTTOSPAZI 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,
DettagliPROCESSI 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
DettagliAPPUNTI 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
DettagliTEOREMA 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
DettagliAlgoritmi 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
DettagliI 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
DettagliDefinizione 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
DettagliDISPENSE 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
DettagliLa 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
DettagliCapitolo 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