Il 0% ha trovato utile questo documento (0 voti)
6 visualizzazioni16 pagine

07 ProblemSolving

Il documento tratta il problem solving come disciplina per la risoluzione di problemi attraverso la definizione di algoritmi. Esplora i ruoli dell'istruttore e dell'esecutore, i metodi risolutivi e i diversi approcci per progettare algoritmi, come il top-down e il bottom-up. Viene inoltre discusso il processo di formalizzazione degli algoritmi in linguaggi di programmazione.

Caricato da

francesca
Copyright
© © All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Il 0% ha trovato utile questo documento (0 voti)
6 visualizzazioni16 pagine

07 ProblemSolving

Il documento tratta il problem solving come disciplina per la risoluzione di problemi attraverso la definizione di algoritmi. Esplora i ruoli dell'istruttore e dell'esecutore, i metodi risolutivi e i diversi approcci per progettare algoritmi, come il top-down e il bottom-up. Viene inoltre discusso il processo di formalizzazione degli algoritmi in linguaggi di programmazione.

Caricato da

francesca
Copyright
© © All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Sei sulla pagina 1/ 16

11/03/2025

F O N DA M E N T I
D I I N F O R M AT I C A
E B A S I D I DAT I
I N G EG N E R I A
GESTIONALE
PROF. ROBERTO GENNA
A.A. 2024-2025

PROBLEM
SOLVING
COME DISCIPLINA

1
11/03/2025

IL PROBLEM SOLVING

• Con il termine problem solving si identifica la


disciplina che si occupa di trovare procedimenti
generali per risolvere problemi.
• Quando si fa riferimento all’informatica, si occupa
di trovare algoritmi risolutivi e di descriverli in
modo adeguato mediante un agente di computo
(esecutore)

IL PROBLEM SOLVING

• Si possono identificare due ruoli fondamentali:


• Istruttore (soggetto umano):
– Analizza il problema, ne trova un metodo risolutivo che traduce
in un algoritmo
• Esecutore:
– Attua e realizza l’algoritmo, una volta che è stato (in
programma) in modo da essere interpretato opportunamente,
sulla base delle descrizione fornita dall’istruttore

2
11/03/2025

IL PROBLEM SOLVING

Problema istruttore

Metodo
ANALISI
risolutivo

esecutore
DESCRIZIONE ALGORITMO

Descrizione
INTERPRETAZIONE interpretata
(codice)

ESECUZIONE Soluzione

METODO RISOLUTIVO

• Il modello di soluzione del problema è definito ad un alto livello


di astrazione. E’ composto da:
– Descrizione dell’insieme dei possibili input ammissibili
• Quali sono gli input?
• Quali valori devono assumere?
– Descrizione dell’output (soluzione) atteso
• Qual è l’output?
• Qual è la soluzione, dato un certo input?

– Inoltre occorre identificare le relazioni che intercorrono tra input e


output
• Come modificare e agire sull’input per ottenere l’output?

3
11/03/2025

COME “RISOLVERE” UN
PROBLEMA?
• Analizzare il problema
– Identificare gli input
• Individuare gli obiettivi da raggiungere
– Descrivere le relazioni tra gli input e l’output
– Identificare altri “elementi” intermedi per ottenere dall’input l’output
• Descrivere
– le regole da rispettare
– i vincoli e le relazioni tra i dati i dati espliciti ed impliciti
– Eliminare i dettagli inutili ed ambigui
– Descrivere i passi da realizzare

ALGORITMO
7

ESECUTORE
• Ogni calcolatore è un esecutore.
– L’algoritmo è tradotto in un linguaggio comprensibile
dall’esecutore --> programma
– L’esecutore esegue una successione di azioni elementari
associate alle istruzioni (in un tempo finito e in modo
deterministico)
Metodo Risolutivo
(algoritmo)

ESECUTORE
DATI RISULTATI

4
11/03/2025

PROBLEM
SOLVING
GLI APPROCCI

APPROCCI AL PROBLEM
SOLVING
• La metodologia e le tecniche per arrivare alla
descrizione di procedimenti risolutivi di problemi
complessi varia a seconda dell’approccio
considerato.
Nota. Si suppone che i problemi primitivi siano quelli
più semplici, direttamente risolvibili dall’esecutore (e
dall’istruttore)

10

5
11/03/2025

APPROCCI AL PROBLEM
SOLVING
• Ci sono due approcci fondamentali per progettare
algoritmi:
– top-down
– bottom-up
• Sono logicamente opposti...
• ...ma in pratica si combinano insieme (anche nella
programmazione):
– ibrido o misto

11

APPROCCI AL PROBLEM
SOLVING
• Approccio top-down
– parte dai requisiti della specifica
– li decompone in sotto-requisiti
– procede per decomposizione, in modo gerarchico
– termina quando tutti i sotto-requisiti sono compiti elementari
• Approccio bottom-up
– parte dai compiti elementari (che si sanno già svolgere)
– li combina per crearne di (più) complessi
– … ottenendo strumenti generici, librerie, utility, soluzioni riutilizzabili
– assembla strumenti, utility, ecc. e compiti costruendo una soluzione ad
un compito più complesso
– termina quando il compito risolto coincide con la specifica

12

6
11/03/2025

APPROCCIO TOP-DOWN
• Il metodo top down consiste nello scomporre il problema iniziale in due o
più problemi più semplici, risolti i quali (ipotesi) sappiamo ottenere la
soluzione al problema dato.
• Questo processo si dice scomposizione del problema (iniziale) in
sottoproblemi.
• I sottoproblemi individuati possono a loro volta essere ridotti a problemi
più semplici: il processo di scomposizione viene iterato, fino a
raggiungere problemi primitivi (la cui soluzione è nota all’esecutore)
• I problemi primitivi sono anche detti problemi elementari.
• Il programma è rappresentato dalla descrizione finale delle
scomposizioni.

• test (verifica)

13

APPROCCIO BOTTOM-UP
• Il metodo bottom up consiste nel partire dalla conoscenza
dei problemi primitivi che l’esecutore sa risolvere e
identificare composizioni e/o sequenze di tali soluzioni per
ottenere un problema risolvibile che va verso la soluzione
del problema dato.
• test (verifica) della soluzione al problema risolvibile.
• Se ciò non è sufficiente si deve trovare (per aggregazioni e
giustapposizioni successive) una sequenza appropriata di
problemi primitivi e problemi risolvibili, la cui soluzione
equivale alla soluzione del problema dato.
• test (verifica) della soluzione al problema dato.
• il programma finale sarà rappresentato dalla descrizione
della sequenza di problemi primitivi da risolvere.

14

7
11/03/2025

ESEMPIO: AREA DI UNA


CAMPANA (TOP-DOWN)
Scomposizione del problema in
tre sottoproblemi Sottoproblema 1
Problema
r soluzione elementare:
s = ½ π r2

Sottoproblema 2
h2 soluzione elementare:
b
s = b h2

Sottoproblema 3
soluzione elementare:
s = ?? soluzione elementare:
s = ??

15

ESEMPIO: AREA DI UNA


CAMPANA (TOP-DOWN)
Scomposizione del sottoproblema 3 in tre
b ulteriori sottoproblemi

h1
B

Sottoproblema 3
h1
soluzione effettiva: h1 h1
b
s = ½ (½(B–b) h1) +
b h1 + ½ (B–b) ½ (B–b)
Sottoproblema 3.3
½ (½(B–b) h1) Sottoproblema 3.1 Sottoproblema 3.2
soluzione elementare: soluzione elementare:
soluzione elementare:
s = b h1 s =½ (½(B–b) h1)
s =½ (½(B–b) h1)

Composizione delle soluzioni dei tre


sottoproblemi 3.1, 3.2 e 3.3 per risolvere il
sottoproblema 3

16

8
11/03/2025

ESEMPIO: AREA DI UNA


CAMPANA (TOP-DOWN)
Sottoproblema 1
Problema r soluzione elementare:
s = ½ π r2
r=b/2 Composizione delle
soluzioni dei tre
sottoproblemi 1, 2 e 3 Sottoproblema 2
h2 per risolvere il problema
b h2 soluzione elementare:
originario b
s = b h2
h1
B

soluzione effettiva: Sottoproblema 3


h1
soluzione effettiva:
s = ½ π r2 + B
b h2 + s = ½ (½(B–b) h1) +
½ (½(B–b) h1) + b h1 +
b h1 + ½ (½(B–b) h1)
½ (½(B–b) h1)

17

ESEMPIO: RICONOSCERE UN
NUMERO PRIMO (BOTTOM-UP)
Un numero n è primo se e solo se:
n è divisibile solo per sé stesso e per il numero 1

OPERAZIONE ELEMENTARE:
• divisione (resto)

CONCETTO NECESSARIO:
• divisibilità

18

9
11/03/2025

ESEMPIO: RICONOSCERE UN
NUMERO PRIMO (BOTTOM-UP)
COMPITO:
• Un numero n è divisibile per un numero d se e
solo se il resto della divisione n/d è ZERO
OPERAZIONE (nuova funzione/funzionalità):
• F ( n , d ) = divisibile ( n , d )
• input: n,d numeri naturali
• output: VERO o FALSO (tipo logico)
• algoritmo: SE resto di n/d vale 0
ALLORA risultato è VERO
ALTRIMENTI risultato è FALSO
19

ESEMPIO: RICONOSCERE UN
NUMERO PRIMO (BOTTOM-UP)
Un numero n è primo se e solo se:
n è divisibile solo per sé stesso e per il numero 1

A partire dalla (soluzione della) nuova operazione:


• divisibile(n,d)
riscrivo il problema iniziale:
• non esiste un numero d’ tale che
divisibile(n,d’) valga VERO

20

10
11/03/2025

ESEMPIO: RICONOSCERE UN
NUMERO PRIMO (BOTTOM-UP)
Un numero n è primo se e solo se:
• non esiste un numero d’ tale che divisibile(n,d’)=VERO

Riformulo il problema:
• per ogni numero d diverso da n e da 1, risulta
divisibile(n,d) = FALSO

Ma allora non esiste un algoritmo?!


• «per ogni» significa provare tutti i numeri
naturali d diversi da n e da 1 (infiniti casi)

21

ESEMPIO: RICONOSCERE UN
NUMERO PRIMO (BOTTOM-UP)
CONOSCENZA (dalla matematica):
• Per ogni numero d’ > n divisibile(n,d’)=FALSO
Riformulo il problema:
• per ogni numero d’ < n diverso da n e da 1, …
• ∀ numero naturale d’ ∈ [ 2 ; n [, risulta
divisibile(n,d’) = FALSO

Ma allora esiste un algoritmo!


• verifico i numeri da 2 a n-1 (numero finito di casi)
22

11
11/03/2025

ESEMPIO: RICONOSCERE UN
NUMERO PRIMO (BOTTOM-UP)

Algoritmo (idea):
• verifico i numeri d da 2 a n-1;
• se risulta divisibile(n,d) = VERO
allora termino (output: n non è un numero primo)
• quando ho finito tutte le verifiche da 2 a n-1
allora termino (output: n è un numero primo)

23

ESEMPIO: RICONOSCERE UN
NUMERO PRIMO (BOTTOM-UP)
ALGORITMO (bozza):
1. provo d = 2
2. calcolo divisibile(n,d)
3. se risulta divisibile(n,d) = VERO
3.1 allora termino
(output: n non è un numero primo)
3.2 altrimenti provo d successivo e vado al
passo 2
4. (se sono arrivato qui…) termino
(output: n è un numero primo)

24

12
11/03/2025

FO R M A LI ZZA ZI O NE
D I A LG O R I T M I
D A L L’ A L G O R I T M O A L P R O G R A M M A

25

RAPPRESENTAZIONE DEGLI
ALGORITMI
algoritmo

• Linguaggio naturale
• Diagramma a blocchi
• Pseudo codice
• Linguaggio di programmazione

programma

26

13
11/03/2025

LINGUAGGIO NATURALE

• Nella risoluzione di un problema, il primo passo verso la modellazione


di un algoritmo è cercare di descrivere le azioni da fare in linguaggio
naturale
• Es. Trovare il massimo tra due numeri
• Passi:
– Prendo i due numeri
– Faccio la differenza
– Se il risultato è maggiore di 0 allora il primo numero è il massimo
– …

27

DIAGRAMMA A BLOCCHI
(FLOW-CHART)
• Consente la modellazione grafica Inizio

di un algoritmo
Leggi
• A volta fornisce una alternativa allo xey P1 e P2

pseudo-codice.
d←x–y
P3
• E’ molto immediato: esso consente di
descrivere un algoritmo concentrandosi Sì No
d>0?
principalmente sulla sequenza delle P4

operazioni di cui si compone. Scrivi Scrivi


“max è x” “max è y”
P5 P6

Fine
P7

28

14
11/03/2025

PSEUDO-CODICE
• La rappresentazione dell’algoritmo in forma testuale.
• Spesso i costrutti di controllo sono descritti con la forma
e le parole chiave corrispondenti a quelle dei linguaggi di
programmazione, mentre le operazioni possono essere
descritte in modo informale e sintetico.
• La somiglianza strutturale con i
programmi definitivi rende le
leggi alfa, beta
descrizioni degli algoritmi con prod = 0
pseudo-codice molto adatte while alfa ≠ 0
prod = prod + beta;
alle fasi di sviluppo dei programmi alfa = alfa – 1;
stessi. stampa prod;

29

INFINE..
IL LINGUAGGIO DI
PROGRAMMAZIONE
• Passare dallo pseudocodice al • Si tratta di convertire le
linguaggio di programmazione istruzioni (in pseudocodice) in
desiderato, diventa immediato effettive istruzioni secondo la
sintassi del linguaggio di
from math import sqrt programmazione
x = float(input("x: "))
y = float(input("y: "))
segment1L = float(input("Length of 1st segment: "))
segment1Sp = float(input("Speed along 1st segment: "))
segment2Sp = float(input("Speed along 2nd segment: "))

segment1T = segment1L / segment1Sp


segment2L = sqrt((x - segment1L) ** 2 + y ** 2)
segment2T = segment2L / segment2Sp

print("Total travel time: ")


print(segment1T + segment2T)

30

15
11/03/2025

DIAGRAMMA RIASSUNTIVO
Linguaggio:
Sequenza statica metodo per descrivere
un algoritmo
Algoritmo:
sequenza di passi
per la realizzazione
di un compito Esecutore:
Sequenza dinamica entità che comprende
il linguaggio ed
esegue i passi

Specifica: Casi di test:


Dati di ingresso esempi concreti di
descrizione di un problema
dati di ingresso e e dati di uscita dati di ingresso e
dati di uscita corrispondenti uscite attese

31

16

Potrebbero piacerti anche