Come risolvere un problema
Prima fase: capire il problema
-
Mettere in evidenza le parti principali del problema.
-
Che cosa bisogna trovare?
-
Quali sono i dati?
-
Quali sono le condizioni?
-
-
Fare un disegno in cui inserire i dati e ciò che si vuole trovare?
-
Se necessario dare deinomiaglioggetti e introdurre una notazione adeguata.
-
È possibile soddisfare le condizioni?
Seconda fase: Elaborare un piano
-
Buone idee sono basate sull’esperienza e su conoscenze precedentemente acquisite.
-
Si può trovare un problema connesso?
-
Pensare a come utilizzare il problema di cui si conosce la soluzione.
-
Hai usato tutti i dati? Hai usato tutte le ipotesi?
Terza fase: eseguire il piano
-
Il piano fornisce uno schema generale, bisogna convincersi che i dettagli concordino con lo schema.
-
Controllare attentamente ogni passo.
-
Convincersi della correttezza di un passo intuitivamente e formalmente.
Quarta fase: riflettere sulla soluzione
-
Serve per consolidare la conoscenza acquisita e per sviluppare abilità per risolvere nuovi problemi.
-
Puoi controllare il risultato?
-
Puoi ottenere il risultato in modo diverso?
-
Pensare a casi in cui è utile usare lo stesso risultato o lo stesso metodo.
Esempio:
Sia v un vettore di n intervalli non vuoti ordinato in senso crescente rispetto al seguente ordinamento:
[x, y] < [z, w] sse x < z ∨ (x = z ∧ y < w)
Definire una funzione che inserisce in un nuovo vettore ris ordinato anch’esso in senso crescente solo gli intervalli che sono disgiunti da tutti gli altri intervalli e restituisce la dimensione del vettore ris.
Si può scorrere il vettore v al più una volta.
Soluzione:
int intervalliDisgiunti(Intervalli v[], int dimV, Intervalli ris[]) { int i, i_ris, maxend; if (dimV == 0) return 0; i_ris = 0; maxend = v[0].start – 1; for (i = 0; i < dimV; i++){ if (maxend < v[i].start && (i == dimV – 1 || v[i].end < v[i+1].start)){ ris[i_ris] = v[i]; i_ris++; } if (maxend < v[i].end) maxend = v[i].end; } return i_ris; }
Esercizio:
Dato un vettore di n intervalli non vuoti scrivere una funzione che restituisce 1 se tutti gli intervalli sono a due a due disgiunti, 0 altrimenti.
Esempio:
Se v = 〈[1,5], [-3,0], [7,9], [6,6], [-7,-5]〉 la funzione restituisce 1.
Se v = 〈[1,5], [-3,0], [3,9], [11, 18]〉 la funzione restituisce 0.

Invia nuovo commento