2001/02 Lezione N. 9 Elementi di un algoritmo 1. Leggi A 2. Leggi B

2001/02
Lezione N. 9
Elementi di un algoritmo
Inizio e fine. Sono i punti d’ingresso e d’uscita del flusso di esecuzione, rappresentati con ellissi nel diagramma di
flusso e impliciti nella rappresentazione mediante pseudolinguaggi.
Ingresso. Istruzione di acquisizione dei dati d’ingresso. I dati d’ingresso sono quelli che caratterizzano l’istanza del
problema e si intendono forniti dall’utente che lancia l’esecuzione dell’algoritmo. Le operazioni di acquisizione di
dati sono generalmente indicate come operazioni di lettura poiché si intende (con riferimento implicito ai calcolatori
elettronici) che i dati vengano letti dai dispositivi di input o dalla memoria di massa. I valori acquisiti (letti) vengono
assegnati a variabili.
Uscita. Istruzione di presentazione dei risultati d’uscita. I risultati prodotti devono essere prodotti in uscita per
essere fruibili. Le operazioni di produzione dei dati d’uscita sono indicate come operazioni di scrittura poiché si
intende che i valori ottenuti vengano scritti su dispositivi di output o su dispositivi di memoria di massa. I valori
scritti solo i valori correnti delle variabili specificate.
Assegnamento. Le istruzioni di assegnamento hanno la forma variabile = espressione ed indicano che il valore
corrente dell’espressione deve essere assegnato alla variabile. L’esecuzione di un’istruzione di assegnamento
avviene in due fasi: la valutazione dell’espressione (utilizzando i valori correnti delle eventuali variabili che in essa
compaiono) e l’aggiornamento del valore della variabile a sinistra del segno di uguaglianza.
Es. Se a=3, l’istruzione b=a+2 lascia invariato il valore di a e assegna a b il valore 3+2, cioè 5. L’istruzione a=a+6
aggiorna il valore di a incrementandolo di 6 (il valore di a dopo l’esecuzione è 9).
Salto. Deviazione del flusso di esecuzione rispetto all’ordine sequenziale delle istruzioni che compongono
l’algoritmo.
Diramazione di flusso condizionata. Biforcazione del flusso in due
percorsi alternativi (mutuamente esclusivi) la cui esecuzione è
condizionata al verificarsi di una condizione. L’esecuzione di
un’istruzione condizionale comporta innanzitutto la valutazione della
condizione, e quindi l’esecuzione delle istruzioni che compongono uno
dei due cammini.
Iterazione o ciclo. Esecuzione ripetuta di una o più istruzioni. La
ripetizione dipende dall’esito di un controllo. È fondamentale che l’esito
del controllo dipenda da variabili il cui valore può essere modificato
dall’esecuzione delle istruzioni del ciclo. In caso contrario il ciclo
verrebbe eseguito o mai (risultando inutile) o all’infinito (violando la
definizione di algoritmo). Le variabili da cui dipende il controllo sono
dette variabili di controllo del ciclo. Ogni ciclo è composto da 4
elementi: l’inizializzazione delle variabili di controllo, il controllo della
condizione da cui dipende l’iterazione, il corpo del ciclo (sequenza delle
istruzioni da eseguire ciclicamente) e l’aggiornamento delle variabili di
controllo.
falso
cond.
ramo 1
ramo 2
inizializz.
falso
cond.
corpo
aggiorn..
Es. Il seguente algoritmo contiene un ciclo controllato da una
condizione sulla variabile di controllo A.
1. Leggi A
2. Leggi B
3. Se A=0 vai all’istruzione 7
4. Decrementa A
5. Incrementa B
6. Vai all’istruzione 3
7. Stampa B
vero
⇐ inizializzazione della variabile di controllo
⇐ controllo della condizione
⇐ aggiornamento della variabile di controllo
⇐ corpo del ciclo
vero
Rappresentazione di domini numerici
B
R×R
N×R
B
A
B
N× N
B
R×N
A
B
( A, B ) ∈ R × R | min{A, B}∈ N
N×R ∪R× N
A
B
A
A
Esempio
Algoritmo 1:
1. Leggi A
2. Leggi B
3. P = 0
4. Se B=0 vai all’istruzione 8
5.
Decrementa B
6.
P = P+A
7. Torna all’istruzione 4
8. Stampa P
Dominio di definizione: lo pseudocodice descrive un algoritmo nel dominio RxN (se B non fosse intero positivo o
nullo l’esecuzione non terminerebbe).
Dominio di applicazione al calcolo del prodotto: in tutto il dominio di definizione la funzione svolta dall’algoritmo è il
calcolo di P=A*B.
Complessità: le istruzioni 1. 2. 3. 4. e 8. vengono eseguite indipendentemente dal valore dei dati di ingresso. Ogni
iterazione del ciclo comporta l’esecuzione delle istruzioni 5. 6. 7. e 4. Poichè il ciclo viene eseguito B volte, il
numero totale di passi di esecuzione è Npassi=5+4*B. Eliminando le costanti si può dire che la complessità è O(B).
Algoritmo 2:
1. Leggi A
2. Leggi B
3. P = 0
4. Se B<=0 vai all’istruzione 8
5.
Decrementa B
6.
P = P+A
7. Torna all’istruzione 4
8. Stampa P
Dominio di definizione: RxR (l’esecuzione termina per qualsiasi coppia di valori di A e B)
Dominio di applicazione al calcolo del prodotto: l’algoritmo calcola correttamente il prodotto P=A*B solo nel dominio
RxN (se B è negativo il risultato è sempre 0, se B non è intero il risultato è sbagliato).
Complessità: O(B).
Equivalenza: gli algoritmi 1 e 2 non sono equivalenti poichè hanno domini di definizione diversi.
Equivalenza ristretta a un sottodominio: nel dominio Nel dominio RxN sono equivalenti.
Algoritmo 3:
1. Leggi A
2. Leggi B
3. P = 0
4. Se A<=0 vai all’istruzione 8
5.
Decrementa A
6.
P = P+B
7. Torna all’istruzione 4
8. Stampa P
Dominio di definizione: RxR
Dominio di applicazione al calcolo del prodotto: NxR (poichè questa volta è A ad essere usato come contatore del
ciclo, è il primo ingresso a dover essere intero positivo).
Complessità: O(A)
Equivalenza: gli algoritmi 2 e 3 hanno lo stesso dominio, ma non sono equivalenti perchè esistono punti del
dominio in cui forniscono risultati diversi (es: per A=2 B=-1 l’algoritmo 2 fornisce risultato 0, l’algoritmo 3 risultato –
2)
Equivalenza ristretta a un sottodominio: i due algoritmi sono equivalenti nel dominio NxN.
Algoritmo 4:
Leggi A
Leggi B
P=0
A>B
A<0
P = P+B
A = A-1
B<0
Stampa P
P = P+A
B = B-1
Dominio: RxR.
Dominio di applicazione al calcolo del prodotto: tutte le coppie di numeri tali che il minore dei due sia un numero
naturale. In simboli: (A,B) appartenente a RxR tale che min{A,B} appartenga ad N.
Complessità: O(min{A,B})
Equivalenza: l’algoritmo non è equivalente ai due precedenti perchè ha un dominio di applicazione al calcolo del
prodotto diverso.
Equivalenza ristretta ad un sottodominio: nel sottodominio NxN tutti i tre algoritmi sono equivalenti.
Esercizi
1. Si osservi il seguente pseudocodice e si risponda ai quesiti sottostanti:
1. Leggi A
2. Leggi B
3. Se A≥B vai all’istruzione 7
4.
C = A
5.
A = B
6.
B = C
7. R = 0
8. Se B≤0 vai all’istruzione 12
9.
B = B-1
10. R = R+A
11. Torna all’istruzione 8
12. Stampa R
a.
b.
c.
d.
e.
f.
g.
h.
i.
Disegnare il diagramma di flusso equivalente allo pseudocodice.
Tracciare l’esecuzione per i dati d’ingresso A=2, B=3.
Tracciare l’esecuzione per i dati d’ingresso A=3, B=2.
Determinare (se possibile) il valore finale di R (risultato dell’esecuzione) quando A=3.5, B=2.
Determinare (se possibile) il valore finale di R (risultato dell’esecuzione) quando A=2.5, B=3.
Stabilire in quanti passi termina l’esecuzione nei casi d. ed e.
Stabilire il dominio di definizione dell’algoritmo.
Determinare la complessità dell’algoritmo nel suo dominio di definizione.
Indicare in quale dei seguenti domini l’algoritmo è definito e fornisce il prodotto di A e B (nelle risposte R
indica il campo dei numeri reali, N il campo dei numeri naturali, interi positivi compreso lo 0, Z il campo dei
numeri interi con segno, il simbolo x indica il prodotto cartesiano tra due insiemi)?
RxR
NxR
RxN
ZxZ
NxN