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