Programmazione in C Problem solving avanzato: scheda riassuntiva Problem solving avanzato: scheda riassuntiva La scomposizione in sottoproblemi La risoluzione di un problema complesso viene solitamente affrontato mediante scomposizione in sottoproblemi più semplici, basati su partizionamento (e semplificazione) di strutture dati o algoritmi La strategia “divide et impera” Un problema complesso scomposto in sottoproblemi più semplici • • In modo non sempre è univoco, esistono cioè vari modi di scomporre un problema in termini di o Struttura dati o Algoritmo La strategia risolutiva consiste in 3 fasi • • • Divisione in sottoproblemi o Può essere elementare e immediata: basta individuare i sottoproblemi o Può essere complessa e richiedere strutture dati “ad hoc” per i sottoproblemi Soluzione dei sottoproblemi o Possono essere indipendenti (li si può eseguire in qualunque ordine) o Oppure richiedono una determinata successione, in quanto i risultati di un sottoproblema sono dati in ingresso per altri sottoproblemi Ricombinazione dei risultati o Può essere elementare e immediata: la soluzione globale è già disponibile una volta risolti i sottoproblemi o I risultati dei sottoproblemi vanno elaborati per ottenere il risultato finale del problema Scomposizione di strutture dati Può essere effettuata in vari modi • • • Nessuna scomposizione: la scomposizione è unicamente di tipo algoritmico. La struttura dati (unica) del problema, viene manipolata in tutti i sottoproblemi Partizionamento dei dati: la struttura dati viene suddivisa in parti (omogenee) associate a singoli sottoproblemi (es. vettore o matrice scomposti in sezioni) Strutture dati “ad hoc” per singoli sottoproblemi: è lo schema più generale © 2006 Politecnico di Torino 1 Programmazione in C Problem solving avanzato: scheda riassuntiva Scomposizione di algoritmi Un algoritmo può essere considerato scomposto in sezioni, corrispondenti a • • • Costrutti condizionali (Singole iterazioni di) costrutti iterativi (Chiamate a) funzioni Le singole sezioni possono • • Manipolare dati globali Ricevere dati in ingresso e restituire risultati Le sezioni possono essere • • Indipendenti, se operano su dati diversi (es. calcolo del valor medio, per ogni riga di una matrice) o Può essere arbitrario l’ordine di risoluzione dei sottoproblemi o Non sono necessari risultati intermedi tra i sottoproblemi Correlate, se ogni sottoproblema dipende dagli altri o Non è arbitrario l’ordine di risoluzione dei sottoproblemi o È necessario prevedere (a livello di struttura dati) la memorizzazione di risultati intermedi © 2006 Politecnico di Torino 2