Fondamenti di Informatica, A.A FILA A

Documenti analoghi
Fondamenti di Informatica, A.A FILA A

Fondamenti di Informatica, A.A

Fondamenti di Informatica, A.A

Fondamenti di Informatica, A.A

Nell' Informatica è importante porsi questa domanda: Questo è l'argomento che viene trattato nella Complessità Computazionale, e si articola in due

Programmare con MATLAB c Parte 5 Cicli: for e while

ESERCITAZIONI DI INTRODUZIONE AGLI ALGORITMI (A.A. 08/09)

Rappresentazione degli algoritmi

1. Si scriva una function Matlab che implementa il seguente metodo di punto fisso

Fondamenti di Informatica

Silvia Rossi. Cenni sulla complessità. Informatica. Lezione n. Parole chiave: Corso di Laurea: Insegnamento: Programmazione I

Page Rank. Guerra Stefano. 1. DESCRIZIONE DEL PROBLEMA "Page Rank" 2. DESCRIZIONE DELL ALGORITMO. Pagina 2

Informatica B - A.A. 2018/2019

UNIVERSITA DEGLI STUDI DI ROMA TOR VERGATA

Elementi di Calcolo Scientifico per l Ingegneria A.A

Esame di Calcolo Numerico per Informatica A.A. 2010/11: testo soluzioni Proff. S. De Marchi e M. R. Russo 12 luglio 2011

Fondamenti di Informatica

Strutture di controllo condizionali in Matlab

Loop in Matlab. Informatica B. Daniele Loiacono

Fondamenti di Informatica

COMPLESSITÀ COMPUTAZIONALE DEGLI ALGORITMI

Introduzione al MATLAB c Parte 2

Laboratorio di Matematica e Informatica 1

Fondamenti di Informatica

Analisi asintotica. Astrazione: come il tempo di esecuzione cresce in funzione della taglia dell input asintoticamente.

Studio degli algoritmi

MatLab - Testo pagina 1 di 5 101

Francesca Mazzia Dipartimento Interuniversitario di Matematica Università di Bari. MATLAB: analisi degli errori

Algoritmi stabili e instabili

COMPLESSITÀ COMPUTAZIONALE DEGLI ALGORITMI

Principali strumenti per lo sviluppo di algoritmi in pascal-like. concetti universali presenti in tutti i linguaggi di programmazione

Laboratorio di Python

COMPLESSITÀ COMPUTAZIONALE DEGLI ALGORITMI

RISOLUZIONE DI SISTEMI LINEARI

Un esempio per iniziare. Il controllo del programma in C. Altri cenni su printf() Esercizi (printf) printf( 8!=%d, fatt);

Esercitazioni con GNU Octave

Francesca Mazzia Dipartimento Interuniversitario di Matematica Università di Bari. MATLAB: analisi degli errori

Ad ogni problema computazionale possiamo associare una misura della sua complessità.

Matlab : le basi. Vediamo ora un esercizio di calcolo: Il volume di una sfera è dato da V=4*π*r 3 /3 dove r è il raggio.

Fondamenti di Informatica

Esercizi sulla complessità di frammenti di pseudo-codice

Introduzione al C. Proprietà degli elementi di un insieme. Claudio Ciccotelli

Laboratorio di Programmazione Laurea in Ingegneria Civile e Ambientale

Laboratorio di Python

int a[10][15] for (i=0; i <N;i++) { for (j=0;j<m;j++) cout <<Matrice[i] [j]; cout <<endl; }

Laboratorio di Calcolo Numerico Laboratorio 8: Vettori e Matrici

Algoritmi di ricerca. Per ricerca si intende qui il procedimento di localizzare una particolare informazione in un elenco di dati.

Dati e Algoritmi I (Pietracaprina) Esercizi sulle Nozioni di Base

TEST per prova comune classe TERZA INFORMATICA

Laboratorio di Programmazione Laurea in Ingegneria Civile e Ambientale

A.S Classe III H Informatica. Programma didattico finale e indicazioni per il recupero estivo relativi all'insegnamento di Informatica

Fondamenti di Informatica A.A. 2016/17

Fondamenti di Informatica

Vettori e Matrici. Corso di Calcolo Numerico. 24 Aprile 2018

METODI ITERATIVI DI JACOBI E GAUSS-SEIDEL

Puntatori e array. Violetta Lonati

Introduzione allo Scilab Parte 5: funzioni su matrici; intervalli, grafici.

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

19 FEBBRAIO SECONDA PARTE

Laboratorio di Calcolo Numerico Laboratorio 3: Algoritmi stabili e instabili, Bisezione

Esercizi di MatLab. Sommario Esercizi di introduzione a MatLab per il corso di Calcolo Numerico e Laboratorio, A.A

Algoritmi di ordinamento

FONDAMENTI DI INFORMATICA

Algoritmi e Strutture Dati. Capitolo 4 Ordinamento: Selection e Insertion Sort

Linguaggio C++ 8. Matrici

Esercitazione 1 Conversione di base

osservazione: 1 MCD(m,n) min(m,n) = si provano i numeri compresi tra 1 e min(m,n) conviene iniziare da min(m,n) e scendere verso 1

05. Determinare una base ortonormale per ognuno dei seguenti spazi vettoriali.

3+4 2 (3+1) 4. Variabili a = 3 b = 4 c = a + b who, whos MATrixLABoratory Un numero è una matrice 1 1.

Esame di Calcolo Numerico per Informatica A.A. 2010/11 Proff. S. De Marchi e M. R. Russo 20 giugno 2011

Fondamenti di Informatica e Programmazione

Fondamenti di Informatica

clear clc v=input(['digitare V']); for i=1:length(v); for j=1:length(v); if i==j; m(i,j)=v(i); else; m(i,j)=0; end; end; end; disp(m)

Esercizi per il corso di Algoritmi, anno accademico 2011/12

FONDAMENTI DI INFORMATICA. Prof. Alfredo Accattatis Tutor: prof. Venturino Taggi

1 Esercizi di Matlab. L operatore : permette di estrarre sottomatrici da una matrice assegnata. Vediamo alcuni esempi.

Algoritmi di ordinamento

Tempo e spazio di calcolo

Programmare con MatLab IV

FONDAMENTI DI INFORMATICA

Complementi di Matematica e Calcolo Numerico A.A Laboratorio 6 Metodi iterativi per sistemi lineari

Istruzioni iterative (o cicliche)

INTRODUZIONE A MATLAB

Array Tipi di dato semplici e strutturati strutturati array elementi omogenei numero d ordine indice lunghezza dimensione

COMPLESSITA COMPUTAZIONALE. Esercitazioni Tutor: Francesca Piersigilli

Calcolare x n = x x x (n volte)

1. Calcolo dell indice di condizionamento di una matrice

Laboratorio di Programmazione 1. Docente: dr. Damiano Macedonio Lezione 8 14/11/2013

Daniela Lera A.A

liceo B. Russell PROGRAMMAZIONE INDIRIZZO: SCIENTIFICO SCIENZE APPLICATE BIENNIO: SECONDA DISCIPLINA: INFORMATICA

Matlab 5. Funzioni. Slide basate sul corso di C. Blundo. A.A. 2010/ GPersiano. Laboratorio di Informatica per Fisici 1

Operatori in Java. Il Costrutto Condizionale if

Informatica B

Introduzione alla programmazione Esercizi risolti

Pseudo codice. Paolo Bison. Fondamenti di Informatica 1 A.A. 2003/04 Università di Padova. Pseudo codice, Paolo Bison, A.A , p.

ESERCIZIO N 14 (2010) 1 PUNTO. Si consideri il seguente frammento di pseudocodice:

Transcript:

Fondamenti di Informatica, A.A. 2013-2014 - FILA A 28/07/2014 Esercizio 1 È dato il frammento di codice Matlab a = [ 1 6 32 64 128 256 512 1024 2 0 4 8 ] ; b = [ 8 16 24 32 40 48 56 6 4 ] ; x = find ( a >100); y = b ( : 2 : 1 ) ; r e s = [ a ( 2 : length ( a) 2) y x ( 1 : 1 ) ] ; n = length ( r e s ) disp ( r e s ( 1 : n 1)) Si chiede cosa viene visualizzato dall interprete Matlab. Ricordando che find(a>100) restituisce gli indici per i quali l espressione è vera, in questo caso 4 5 6 7 8, il risultato stampato è octave :7> disp ( r e s ( 1 : n 1)) 32 64 128 256 512 64 48 32 16 4 5 6 Esercizio 2 Dato il seguente algoritmo se ne stimi la complessità. function v = myfunction ( v ) for i =2: length ( v ) x=v ( i ) ; for j =1: i i f i f j < i for v ( j )>x break ; v ( j )=x ; l=i 1: 1: j v ( l +1)=v ( l ) ;

Il codice propone una variante dell algoritmo di Insertion Sort. Il ciclo più esterno contiene due cicli; il primo ciclo interno viene eseguito un numero di volte j che non è prevedibile a priori (in quanto a seconda dei valori in v viene eseguita l istruzione break), ma nel caso peggiore vale j=i. Il secondo ciclo interno viene eseguito un numero di volte pari a i-j. Se non contiamo le operazioni di spostamento dati nel secondo ciclo interno, allora nel caso peggiore il costo complessivo vale ( n n ) i = i 1 = i=2 i=1 n(n + 1) 2 1 = O(n 2 ) Se invece consideriamo nel conteggio le operazioni di spostamento dati, allora possiamo valutare che si abbia sempre (e non solo nel caso peggiore) ( n n n ) n(n + 1) j + (i j) = i = i 1 = 1 = O(n 2 ) 2 Esercizio 3 i=2 i=2 i=1 Il seguente codice viene proposto per effettuare la ricerca binaria di un elemento in un vettore. Si identifichi l errore contenuto e si proponga una soluzione adeguata. function pos=bseach ( key, v ) n=length ( v ) ; l =1; u=n pos= 1; while ( l<=u ) m = floor ( ( u+l ) / 2 ) ; i f ( key==v (m) ) pos=m; return ; i f ( key <v (m) ) u=m; l=m; Il problema sta nel fatto che negli aggiornamenti degli estremi non viene eliminato l elemento nella posizione m. Questo può dar luogo alla non terminazione dell algoritmo; infatti se abbiamo u = l + 1 il punto medio vale m = l per via dell arrotondamento all intero più basso tramite la funzione floor, e se vale v(l) < key < v(u), i valori di l e u non vengono mai più aggiornati. La soluzione consiste nel porrre

i f ( key <v (m) ) u=m 1; l=m+1; Esercizio 4 È data la seguente funzione Matlab/Octave function [ x n]= simple ( a, n ) for i =1:n d = min( a ) ; d = d. 2 ; a = a+ sum( a d ) ; Si stimi il numero di operazioni aritmetiche eseguite, assumo che a sia una matrice n n e che n sia un intero positivo. Il ciclo principale della funzione si compone di tre parti che non dipono direttamente dal indice i. La prima istruzione Matlab/Octave calcola il minimo della matrice per colonne, produco un vettore riga; per calcolare il minimo vengono eseguiti n 2 confronti. Nella seconda istruzione il vettore riga viene elevato al quadrato elemento per elemento,per altre n operazioni. Infine, nella terza istruzione, viene effettuato un prodotto della matrice a per il trasposto del vettore d, al costo di 2n 2 operazioni, seguito dalla somma del vettore risultante con n operazioni e la somma dello scalare risultante con la matrice a per altre n 2 addizioni. Considerando che il ciclo viene eseguito n volte, in totale avremo Esercizio 5 opcnt = n(n 2 + n + 2n 2 + n + n 2 ) = n(4n 2 + 2n) = O(n 3 ) È dato il frammento di codice Matlab s e l = input ( Write f t to convert meters to f e e t or mt to convert f e e t to meter d i s t = input ( I n s e r t the value \n ) ; i f strcmp( s e l, f t ) strcmp( s e l, FT ) d i s t = d i s t 3. 2 8 0 8 ; s t r = [ num2str( d i s t ) f t ] ; e l s e i f strcmp( s e l, mt ) strcmp( s e l, MT ) d i s t = d i s t / 3. 2 8 0 8 ; s t r = [ num2str( d i s t ) m ] ;

Riscrivere il codice faco uso del costrutto switch. s e l = input ( Write f t to convert meters to f e e t or mt to convert f e e t to meter d i s t = input ( I n s e r t the value \n ) ; switch ( s e l ) case { f t, FT } d i s t = d i s t 3. 2 8 0 8 ; s t r = [ num2str( d i s t ) f t ] ; case { mt, MT } d i s t = d i s t / 3. 2 8 0 8 ; s t r = [ num2str( d i s t ) m ] ; o t h e r w i s e

Fondamenti di Informatica, A.A. 2013-2014 - FILA B 28/07/2014 Esercizio 1 È dato il frammento di codice Matlab v = [ 1 2 3 4 ] ; for x=v v = [sum( v ) x ] ; k = max( size ( v )) 1; v ( k ) = v ( 1 ) ; v = v ( 2 : ) ; disp ( v ) Si chiede cosa viene visualizzato dall interprete Matlab. L unica difficoltà nella soluzione del quesito sta nel ricordare che la semantica di Matlab/Octave per il ciclo for fa assumere in successione alla variabile x i valori 1, 2, 3, 4 che il vettore v conteneva all inizio, anche se il vettore stesso viene alterato durante il ciclo. In particolare, dopo la prima istruzione v = [sum(v) x]; il vettore v contiene solo due elementi, specificamente v=[10, 1], e dopo v=v(2:) ne rimane solo uno v=[1]; alla iterazione successiva il vettore diventa prima v=[1,2] e poi v=[2] e così via. Al termine della esecuzione l interprete stampa octave :13> disp ( v ) 4 Esercizio 2 Si dia la definizione di complessità computazionale, dando almeno un esempio di un algoritmo avente complessità n log(n). Per complessità computazionale si inte il numero di operazioni necessario affinché un algoritmo produca la soluzione ad una istanza di un determinato problema, in funzione della dimensione dei dati del problema stesso. La complessità viene solitamente intesa in senso asintotico, a meno di una costante moltiplicativa; pertanto dire che un algoritmo è O(f(n)) vuol dire che per n abbastanza grande si ha T (n) Cf(n) per una qualche costante C. Due esempi di algoritmi di complessità O(n log(n)) sono la trasformata rapida di Fourier (FFT) e l algoritmo di merge-sort.

Esercizio 3 Viene proposto il seguente codice per il calcolo del valore di un polinomio in un punto x dati i valori dei suoi coefficienti in un array cf. Si identifichi l errore e si proponga una correzione adeguata. function y=p o l y e v a l ( cf, x ) n=length ( c f ) ; y=0; v=x ; for i =1:n y=y+c f ( i ). v ; v=v. x ; Il codice si propone di costruire iterativamente le potenze della variabile x, per poi moltiplicarle per l opportuno coefficiente contenuto nel vettore cf. L errore sta nel fatto che le potenze vengono fatte partire da x 1 invece che da x 0 = 1, per cui il codice proposto valuta in effetti y = x p(x). È sufficiente correggere la inizializzazione v=1 al posto di v=x. Esercizio 4 È data la seguente funzione Matlab function [ x]= mistery (m, y, k ) for i =1:k y=y+sum(min(m) ) m = m min(m) + diag (m) ; Si stimi il numero di operazioni aritmetiche eseguito dal codice, considerando che m sia una matrice quadrata n n, che y sia uno scalare positivo. Il codice contiene un ciclo che dovrebbe essere eseguito k volte; le istruzioni nel ciclo non dipono direttamente dall indice i. Nella prima istruzione si calcola il vettore che contiene i minimi nelle colonne di m al costo di n 2 confronti, e poi se ne sommano gli elementi con n addizioni; infine la somma con lo scalare y comporta una ulteriore addizione. La matrice viene poi moltiplicata per lo stesso vettore di min(m) al costo di 2n 2 operazioni, e gli viene aggiuta la diagonale, risultando in un vettore al costo di altre n operazioni. Alla iterazione successiva, la seconda operazione darà errore di conformità in quanto avremo m*min(m) che darà un vettore, e diag(m) che darà una matrice. In definitiva verranno eseguite solo 3n 2 + 2n operazioni.

Esercizio 5 s e l = input ( Write hour to convert days to hours or day to convert hours to da val = input ( I n s e r t the value \n ) ; i f strcmp( s e l, day ) strcmp( s e l, DAY ) val = val /24; s t r = [ num2str( val ) days ] ; e l s e i f strcmp( s e l, hours ) strcmp( s e l, HOURS ) val = val 24; s t r = [ num2str( val ) hours ] ; Riscrivere il codice faco uso di uno del costrutto switch. s e l = input ( Write hour to convert days to hours or day to convert hours to da val = input ( I n s e r t the value \n ) ; swicth ( s e l ) case { day, DAY } val = val /24; s t r = [ num2str( val ) days ] ; case { hours, HOURS } val = val 24; s t r = [ num2str( val ) hours ] ; o t h e r w i s e