Il “che cosa” ed il “come”

26  Download (0)

Full text

(1)

Problemi e algoritmi

Il “che cosa” e il “come”

(2)

Il “che cosa” ed il “come”

• Problema: descrive “che cosa” si deve calcolare

• Specifica (di un algoritmo): descrive “che cosa” calcola un algoritmo

• Algoritmo: descrive “come” effettuare un calcolo

NOTA: in pratica, quando si deve realizzare

un’applicazione software puo’ essere non

banale identificare quali sono i problemi.

(3)

Il “che cosa” ed il “come”

Problema:

1. dati x, y, z, … così e così

istanza

(4)

Il “che cosa” ed il “come”

Problema:

1. dati x, y, z, … così e così 2. trovare u, v, w .. tali che …

criterio per

riconoscere

la risposta

(5)

Il “che cosa” ed il “come”

Esempio (Massimo comun divisore: MCD).

Dati due interi positivi non entrambi nulli

n ed m, determinare un intero positivo k tale che:

1. k divide sia n che m;

2. per ogni divisore comune h di n ed m, h divide k.

istanza

criterio per riconoscere

la risposta

(6)

Multipli e Divisori

Sugli interi sono definite le relazioni:

n è multiplo di m se esiste k 1 tale che

m divide n se n è multiplo di m: m|n

Proprieta’. m|n e n|m implica n = m.

Dim.

mk n =

| 1

| ⇒ = ⇒ = =

 

=

=

n nhk h k

nh m

m n

mk n

n

m

(7)

Il “che cosa” ed il “come”

Esempio (Ordinamento: Sorting)

Dato un intero positivo n ed una sequenza

di n elementi di un insieme A linearmente ordinato, trovare una permutazione π di ordine n tale che:

A a

a 1 ,..., n

) ( )

2 ( )

1

(

a a

n

a ππ ≤ L ≤ π istanza

criterio per

riconoscere

la risposta

(8)

Ordini lineari e non-lineari

• Un ordine parziale su un insieme A è una relazione binaria riflessiva, simmetrica e transitiva.

{ } a, b

{ } a { } b { } { } { } { } a b, b a

< L

<

< 1 2 0

Esempio di ordine lineare:

elementi tutti confrontabili

Esempio di ordine non lineare:

esistono elementi non

confrontabili

(9)

Il “che cosa” ed il “come”

Esempio (Cammino minimo)

Date una mappa stradale che riporti località, strade e lunghezze dei percorsi,

ed una coppia di località raggiungibili l’una dall’altra,

trovare un percorso che renda minima la lunghezza.

criterio per riconoscere la risposta

istanza

(10)

Il “che cosa” ed il “come”

Quindi un problema è una relazione (binaria) R, ossia una collezione di coppie

Le cui istanze sono in

R risposta

istanza,

R è sempre univoca?

{ x x y R y }

R

dom ( ) = : , ∈ per qualche

(11)

Univocità

• è univoca (o funzionale) se per ogni

B A

R ⊆ ×

B b

b A

a ∈ , 1 , 2

2 1

2 1 , ,

, b a b R b b

a ∈ ⇒ =

R

a b

c

(12)

La relazione R è:

• MCD: univoca, perché se k | h e h | k, allora h = k.

• Sorting: univoca solo se non ci sono ripetizioni. Ci sono due risposte per l’istanza

7, 5, 22, 5:

{ 1 a 3 , 2 a 1 , 3 a 4 , 4 a 2 } { e 1 a 3 , 2 a 2 , 3 a 4 , 4 a 1 }

• Cammini minimi: in generale non univoca. Ci possono essere più percorsi di lunghezza minima.

anche se producono lo stesso 5, 5, 7, 22.

(13)

Il “che cosa” ed il “come”

• Algoritmo: è una descrizione che illustra

passo passo, ovvero in modo da poter essere (e)seguita meccanicamente, “come”

ottenere un risultato (output) date certe

informazioni di partenza (input).

(14)

Il “che cosa” ed il “come”

• Un algoritmo è deterministico: se eseguito più volte sullo stesso input, fornisce sempre lo stesso output.

Dunque ad ogni algoritmo possiamo associare una funzione di input-output:

output input

F ( ) =

(15)

Il “che cosa” ed il “come”

• Un algoritmo risolve un problema R se la sua funzione di input-output F associa una risposta ad ogni istanza di R:

F sceglie una risposta per ogni istanza (ma le risposte possono essere più d’una se R

non è univoca).

) ( ogni

per

) (

, F x R x dom R

x ∈ ∈

(16)

La codifica di un algoritmo

• Un algoritmo e’ descrivibile in piu’ modi:

1. In una lingua naturale: “dati n ed m, siano a = max (n, m) e b = min (n, m); dividi

progressivamente a per b, e se il resto è nullo ritorna b, altrimenti poni a = b, b = a mod b e calcola il nuovo resto.”

Pro: per capire mi basta conoscere l’italiano

Contro: potenzialmente

ambiguo, non mostra

la sua struttura

(17)

La codifica di un algoritmo

Un algoritmo e’ descrivibile in piu’ modi:

2. Con diagrammi di flusso: Pro: intuitivo e preciso

Contro: non strutturato, non adatto per la ricursione

a ← max (n, m), b ← min (n, m)

b = 0

r = 0 r ← a mod b

a ← b, b ← r

return a

return b

+ +

Si usava

un tempo

(18)

La codifica di un algoritmo

• Un algoritmo e’ descrivibile in piu’ modi:

3. Usando un linguaggio di programmazione:

int MCD (int n, int m) { int a, b, r;

if (n > m) {a = n, b = m;};

else {a = m, b = n;}

if (b == 0) return a;

r = a % b;

while (r != 0)

{ a = b; b = r; r = a % b;}

return b;

}

Contro: criptico; molti dettagli oscurano la

struttura dell’algoritmo;

dipende dalla scelta del linguaggio

Pro: lo posso

provare su un

computer

(19)

La codifica di un algoritmo

• Un algoritmo e’ descrivibile in piu’ modi:

4. Con uno pseudocodice:

MCD (n, m) a ← max (n, m) b ← min (n, m)

if b = 0 then return a else r ← a mod b

while r ≠ 0 do a ← b b ← r

r ← a mod b return b

Pro: informale ma preciso, posso usare notazioni

matematiche, evitando la

definizione di strutture dati

Contro: può essere lontano

dalla realizzazione

(20)

Che cosa calcola un algoritmo?

Che cosa calcola un algoritmo?

La risposta è una specifica dell’algoritmo.

Vorrei calcolare valori con la

proprietà ψ

Posso farlo purché i dati soddisfino ϕ

Pre-condizione Post-condizione

Sig. Utente Sig. Algoritmo

(21)

Specifica di un algoritmo

Pre-condizioni: ipotesi sull’ingresso

Post-condizioni: proprietà dell’uscita

Esempio:

MCD (n, m)

Pre: n, m interi positivi non entrambi nulli Post: ritorna k che divide sia n che m e t.c. per

ogni divisore comune h di n ed m, h divide k.

(22)

Dal problema alla specifica

Pre-condizioni: ipotesi sull’ingresso

Post-condizioni: proprietà dell’uscita

ψ ϕ sodd.

sodd.

, y P x y

x ∈ ⇔ ∧

Una pre-condizione ϕ ed una post-condizione ψ definiscono una relazione:

Se R è un problema ed R ⊆ P, allora ogni algortimo che

soddisfi la specifica Pre. ϕ , Post. ψ , risolve R.

(23)

La correttezza

Fissato un certo algoritmo siano:

1. F la funzione di input-output

2. ϕ pre-condizione, ψ post-condizione

ψ ϕ ( ) soddisfa soddisfa F x

x

F(x) è sempre definita?

(24)

La correttezza

Fissato un certo algoritmo siano:

1. F la funzione di input-output

2. ϕ pre-condizione, ψ post-condizione

ψ ϕ ( ) soddisfa soddisfa F x

x

F(x) non è definita se

l’algoritmo non termina in x!

(25)

La correttezza

Correttezza totale. Un algoritmo si dice totalmente corretto rispetto ϕ e ψ , se

ψ ϕ & ( ) è definita ( ) soddisfa

soddisfa F x F x

x

ψ ϕ ( ) è definita & ( ) soddisfa

soddisfa F x F x

x

Correttezza parziale. Un algoritmo si dice

parzialmente corretto rispetto ϕ e ψ , se

(26)

Riassumendo

• Problema e algoritmo (il “che cosa” ed il

“come”)

• Specifica: pre e post-condizioni

• Correttezza parziale e totale

Figure

Updating...

References

Related subjects :