Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Introduzione
Liliana Lo Presti
A.A. 2018/2019
Outline
• Problema Computazionale vs Algoritmo
• Pseudo-codice
• Introduzione alla valutazione dell’efficienza di un algoritmo
• Introduzione alla valutazione della correttezza di un algoritmo
Definizioni di base
• Problema computazionale: dato un dominio di input ed un dominio
di output, un problema computazionale è una relazione che associa
ad ogni elemento del dominio di input un elemento del dominio di
output (rappresenta una classe di problemi concreti/istanze)
0 0/ ∃ 0 ∈ 1 … 1 ∶ 78 = 3
/012 3, $ = 4
0 :;7:
Problemi Computazionali
• Per trovare il minimo di un insieme, confronta ogni elemento con tutti gli
altri; l’elemento che è minore di tutti è il minimo
• Per trovare il minimo di un insieme, confronta ogni elemento con tutti gli
altri; l’elemento che è minore di tutti è il minimo
Cosa ci serve?
S = sort(S)
• Risorse:
• Tempo
• Spazio
• Banda
Valutazione degli algoritmi - Efficienza
• Complessità di un algoritmo: analisi delle risorse impiegate da un
algoritmo per risolvere un problema in funzione della dimensione e
della tipologia dell’input
• Risorse:
• Tempo cosa misuriamo? Tempo esecuzione? Numero di operazioni
rilevanti? Numero di operazioni elementari?
• Spazio
• Banda
Valutazione degli algoritmi - Efficienza
• Complessità di un algoritmo: analisi delle risorse impiegate da un
algoritmo per risolvere un problema in funzione della dimensione e
della tipologia dell’input
• Risorse:
• Tempo
• Spazio quantità di memoria usata
• Banda quantità di bit inviati (algoritmi distribuiti)
Valutazione in base al tempo di esecuzione
• Scelto un linguaggio di programmazione, possiamo implementare il nostro
algoritmo
• Dipende da:
• Bravura del programmatore;
• Linguaggio di programmazione e compilatore;
• Hardware (processore, tipi di cache)
• Sistema operativo e processi attualmente in esecuzione
Analisi degli algoritmi
• Per selezionare l’alternativa più conveniente conduciamo un’analisi
matematica degli algoritmi in modo da stimare le «prestazioni»
• Es.:
• Calcolo del minimo, numero di confronti (<)
• Ricerca, numero di confronti (==)
Es.: Valutazione algoritmo
min $ = & ⇔ ∃ & ∈ $ ∶ ∀ , ∈ $, & ≤ ,
! =#−1
Algorithm 1 Find the minimum value of n elements in S
1: function min(S, n)
2: for i 1 to n do
3: isMin True
Es.: Valutazione algoritmo
4: for j 1 to n do
5: if i 6= j and S[j] < S[i] then
6: isMin False
7: if isMin = True then " "! ∃ " ∈ 1 … # ∶ /0 = %
!"#$ %, ' = )
8: return S[i] 0 23/2
1 5 13 17 20 23 25
Cerchiamo il numero 21
Ricerca di un elemento…
Se non ho elementi in S da controllare
restituisci 0
Altrimenti, analizza elemento centrale (con indice m)
1. S[m] = v, trovato
2. v<S[m], cerco a sinistra di m
3. v>S[m], cerco a destra
1 5 13 17 20 23 25
Cerchiamo il numero 21
Ricerca di un elemento…
Se non ho elementi in S da controllare
restituisci 0
Altrimenti, analizza elemento centrale (con indice m)
1. S[m] = v, trovato
2. v<S[m], cerco a sinistra di m
3. v>S[m], cerco a destra.
m
1 5 13 17 20 23 25
1 5 13 17 20 23 25
5: if S[m] = v then
6: return m
Ricerca binaria
Algorithm 4 Search the value v among the n ordered elements of S
1: function binarySearch(S, v, first, last)
2: if first > last then m
3: return 0
1 5 13 17 20 23 25
4: m b first+last
2 c
5: if S[m] = v then Algorithm 4 Search the value vlastamong
first
6: return m
7:
8:
else if S[m] > v then1: function binarySearch(S, v, first,
return binarySearch(S, v, first, m 1)
9:
10:
else 2: if first > last then
return binarySearch(S, v, m + 1, last)
3: return 0
Ogni volta dimezzo la dimensione first+last = Intero inferiore
4:
dei dati in cui effettuare la ricerca m b 2 c
5: if S[m] = v then
6: return m
Ricerca binaria Ad un certo punto, avremo un
unico elemento
Algorithm 4 Search the value v among the n ordered elements of S
1: function binarySearch(S, v, first, last)
2: if first > last then m
3: return 0
first+last 1 Algorithm
5 13 4 Search
17 the value
20 23 v 25among the
4: m b 2 c
1: function binarySearch(S, v, first, las
5: if S[m] = v then last
2: if first > last firstthen
6: return m
7: else if S[m] > v then 3: return 0
first+last =first = last = m
8: return binarySearch(S, v, first, m 1) 4: m b 2 c
9: else 5: if S[m] = v then
All’iterazione successiva il
10: return binarySearch(S, v, m + 1, last) 6: return m
primo indice sarà sempre
7: else ifmaggiore
S[m] >del v then
secondo e ci
8: return binarySearch(S,
ritroviamo nel caso base v, first,
9: else
10: return binarySearch(S, v, m +
Valutazione algoritmo: Ricerca binaria
Algorithm 4 Search the value v among the n ordered elements of S
1: function binarySearch(S, v, first, last)
2: if first > last then
3: return 0
4: m b first+last
2 c
5: if S[m] = v then Quanti confronti?
6: return m
7: else if S[m] > v then
8: return binarySearch(S, v, first, m 1)
9: else
10: return binarySearch(S, v, m + 1, last)
Algorithm 4 Search the value v among
1: function binarySearch(S, v, first,
if first > last then
Valutazione algoritmo: Ricerca binaria
2:
3: return 0
4: m b first+last
2 c
Algorithm 4 Search the value v among the n ordered
5: elements
if S[m] of S= v then
1: function binarySearch(S, v, first, last)
2: if first > last then 6: return m
Ogni volta che chiamo la funzione
3: return 0
first+last
7: else if confronto
faccio un S[m] > v then
4: m b c
5:
2
if S[m] = v then
8: return
Richiamo binarySearch(S,
la funzione finchè ho dati v, fi
6: return m 9: else
Ad ogni passo, dimezzo il numero di
7: else if S[m] > v then dati return binarySearch(S, v, m
10:
8: return binarySearch(S, v, first, m 1)
9: else 11: mQuindi blog nc
2
10: return binarySearch(S, v, m + 1, last)
1: function binarySearch(S, v, first,
2: if first > last then
3: return 0
4: m b first+last
2 c
5: if S[m] = v then
Graficamente… 6: return m
7: else if S[m] > v then
n
8: return binarySearch(S, v, fi
9: else
10: return binarySearch(S, v, m
11: m blog2 nc
Valutazione Algoritmo
• Di un algoritmo valutiamo e dimostriamo anche la correttezza,
ovvero la capacità dell’algoritmo di risolvere il problema in modo
corretto
• Distinguiamo 3 fasi:
• Inizializzazione (caso base): condizione vera alla prima iterazione