Rappresentazione generale del problema e fasi di progettazione

D-003-2015-10-18
MATERIA
DATA
OGGETTO
Informatica
18/10/2015
Progettazione degli algoritmi: strategia top-down
Rappresentazione generale del problema e fasi di progettazione
In generale, la risoluzione di un problema si può intendere come un’operazione di “trasformazione”, che, a
partire da un insieme di dati iniziali, produce un risultato, attraverso una serie di passaggi di elaborazione
intermedi.
Ad esempio Un problema di geometria che richieda di calcolare il volume di un cubo conoscendo la misura
del suo lato è una “trasformazione”, che produce un risultato – il volume del cubo – a fronte di un dato
iniziale – la misura del suo lato. L’elaborazione, in questo caso, corrisponde a un semplice passaggio:
l’operazione matematica volume = lato3 .
In quest’ottica, un generico algoritmo può essere descritto nel seguente schema generale, prescindendo
dalle operazioni che deve effettivamente svolgere per realizzare l’elaborazione.
Stando a questo schema, la progettazione di un algoritmo implica tre fasi:
1) identificare il risultato che l’algoritmo deve produrre;
2) identificare i dati iniziali che l’algoritmo deve sfruttare;
3) definire l’elaborazione che ricavi il risultato dai dati iniziali.
Metodo diretto
Quando un algoritmo corrisponde a un’elaborazione semplice, la traduzione dello schema generale in
istruzioni elementari (i.e. LEGGI, SCRIVI, etc.) è un compito immediato. Si parla, perciò di metodo diretto.
Ad esempio L’algoritmo che determina il quadrato q di un numero reale n può essere descritto con il
metodo diretto in tre semplici istruzioni, dal momento che l’elaborazione (che ricava il risultato q dall’unico
dato iniziale n) corrisponde all’ovvia operazione q = n ⋅ n.
quadrato di un numero n
INIZIO
n
q=n▪n
q
LEGGI n
q=n▪n
SCRIVI q
FINE
Pagina 1 di 5
Strategia top-down
Quando un algoritmo corrisponde, invece, a un’elaborazione complessa, il suo modello generale può essere
considerato come il punto di partenza di una serie di più fasi di progettazione successive, che fa capo a un
metodo di progettazione conveniente detto strategia top-down.
La strategia top-down prevede di individuare, nel problema complessivo, dei sottoproblemi più semplici, che
si possano risolvere, gli uni indipendentemente dagli altri, come fossero algoritmi separati.
Il procedimento viene ripetuto due o più volte, in base alla complessità del problema, cosicché ogni fase di
progettazione corrisponda a una descrizione via via più dettagliata (dall’“altro” verso il “basso”) del problema
stesso, nelle parti in cui risulta utile scomporlo.
Questa strategia ha il vantaggio non indifferente di permettere non solo la risoluzione di algoritmi complessi,
ma anche l’individuazione di sottoproblemi ricorrenti, che si possono ripresentare in algoritmi differenti.
Ad esempio Per calcolare il perimetro di un triangolo rettangolo conoscendo le misure dei suoi due cateti,
occorre il teorema di Pitagora; per calcolare il perimetro di un trapezio isoscele conoscendo le misure delle
sue due basi, serve lo stesso teorema. I due problemi condividono, perciò, un sottoproblema comune, che
può essere risolto una volta soltanto per entrambi.
A scopo di dimostrazione della strategia top-down, si consideri il seguente problema di geometria solida.
Calcolare la misura della superficie totale STOT di un cilindro, conoscendone il volume V e
l’altezza h.
Fase 1: prima rappresentazione del problema
In prima approssimazione, l’algoritmo per risolvere il problema si può progettare nel seguente schema.
INIZIO
LEGGI V, h
Calcola la superficie
totale del cilindro
SCRIVI STOT
FINE
I dati iniziali corrispondono, evidentemente, alle misure del volume (V) e dell’altezza del cilindro (h), mentre
il risultato alla misura della superficie totale dello stesso (STOT ).
Il calcolo della superficie totale del cilindro è un’elaborazione articolata: si tratta, evidentemente, di un
problema generale, che dev’essere risolto in più passaggi, ripartendolo in sottoproblemi progressivamente
più immediati.
Pagina 2 di 5
Fase 2: primo grado di scomposizione del problema
Dal momento che la superficie totale di un cilindro è data dalla somma delle aree delle sue due basi (SB ) e
della superficie laterale (SL ), l’algoritmo può essere perfezionato come segue.
INIZIO
INIZIO
LEGGI V, h
LEGGI V, h
sottoproblema A
Calcola la superficie
totale del cilindro
Calcolo dell’area di
base del cilindro (SB)
sottoproblema B
SCRIVI STOT
Calcolo della
superficie laterale del
cilindro (SL)
FINE
STOT = 2SB + SL
SCRIVI STOT
FINE
L’elaborazione relativa al calcolo della superficie totale del cilindro è ora ripartita in due sottoproblemi
indipendenti, ciascuno dei quali può essere risolto separatamente ed innestato, in un secondo tempo, in un
diagramma complessivo.
 Sottoproblema A: calcolare la misura dell’area di base del cilindro (SB ).
 Sottoproblema B: calcolare la misura della superficie laterale del cilindro (SL ).
Fase 3: secondo grado di scomposizione del problema (sottoproblemi A e B)
Il Sottoproblema A, relativo al calcolo dell’area della base del cilindro, può essere tradotto in istruzioni
elementari, dal momento che la base del cilindro (SB ) risulta direttamente dalla divisione tra volume e
altezza (V⁄h).
sottoproblema A
Calcolo dell’area di
base del cilindro (SB)
SB = V / h
Il Sottoproblema B, ovvero il calcolo della superficie laterale del cilindro, può essere scomposto, invece, nelle
operazioni che permettono di calcolare l’area di un rettangolo dalle sue dimensioni (qui l’altezza del cilindro
h e la misura del perimetro della sua base PB ).
Pagina 3 di 5
sottoproblema B
Calcolo della
superficie laterale del
cilindro (SL)
sottoproblema B1
Calcolo del perimetro
della base del
cilindro (PB)
SL = PB ▪ h
Fase 4: terzo grado di scomposizione del problema (sottoproblema B1)
La scomposizione del Sottoproblema B ha prodotto un nuovo compito più semplice, che deve ulteriormente
essere scomposto.
 Sottoproblema B1: calcolare la misura del perimetro di base del cilindro (PB ).
La risoluzione di quest’ultimo problema richiede ovviamente di ottenere il raggio della base del cilindro (rB )
dalla misura della superficie della stessa (SB ).
La misura dell’area di base si può calcolare come nel Sottoproblema A.
sottoproblema B1
Calcolo del perimetro
della base del
cilindro (PB)
SB = V / h
rB = √ SB / π
PB = 2πrB
Fase 5: rappresentazione complessiva del problema
Dal momento che i sottoproblemi evidenziati nelle precedenti fasi di progettazione sono espressi in istruzioni
elementari, si può ora costruire un diagramma di insieme, che realizzi l’algoritmo in tutte le sue parti.
Le istruzioni ripetute in più sottoproblemi possono ovviamente essere trascritte una volta soltanto, con
l’accorgimento di verificare l’ordine delle istruzioni affinché facciano riferimento a dati calcolati in
precedenza.
Pagina 4 di 5
INIZIO
LEGGI V, h
sottoproblema A
SB = V / h
sottoproblema B1
sottoproblema B
rB = √ SB / π
PB = 2πrB
SL = PB ▪ h
STOT = 2SB + SL
SCRIVI STOT
FINE
Pagina 5 di 5