Problem solving avanzato: scheda riassuntiva

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