• La prima caratteristica di un algoritmo è la correttezza, cioè deve

annuncio pubblicitario
Attributi degli algoritmi: correttezza
• La prima caratteristica di un algoritmo è la
correttezza, cioè deve fornire una soluzione
corretta del problema e terminate.
• Riduco la parte di lista da considerare,
escludendo le prime posizioni già ordinate
DEI - Univ. Padova (Italia)
Attributi degli algoritmi: efficienza
• Tempo e spazio di memoria sono risorse
limitate di un calcolatore, per cui dovendo
scegliere fra due algoritmi corretti, si
preferirà quello che usa meno risorse.
• L’efficienza di un algoritmo indica quanto
parsimoniosamente esso utilizza le risorse
a disposizioene
DEI - Univ. Padova (Italia)
Notazione o(), O(), Θ()
• Per quantificare l’efficienza di un algoritmo al
variare della numerosità dei dati su cui agisce
si usa cercare di esprimere la sua
complessità computazionale in termini di
funzioni della numerosità dei dati n che
fungano da limite inferiore, limite superiore, o
di un andamento asintotico.
DEI - Univ. Padova (Italia)
Limite inferiore: o()
• Si dice che una funzione f(n) è “ o piccolo” di una
funzione g(n), scrivendo f(n)=o(g(n)),se:
∃n0 , ∃M : ∀n > n0 ⇒ M ⋅ g (n) ≤ f (n)
f(n)
g(n)
n0
DEI - Univ. Padova (Italia)
n
Limite superiore: O()
• Si dice che una funzione f(n) è “ o grande” di una
funzione g(n), scrivendo f(n)=O(g(n)),se:
∃n0 , ∃M : ∀n > n0 ⇒ f (n) ≤ M ⋅ g (n)
f(n)
g(n)
n0
DEI - Univ. Padova (Italia)
n
Andamento asintotico: Θ()
• Si dice che una funzione f(n) è “ theta grande” di
una funzione g(n), scrivendo f(n)=Θ(g(n)),se la
funzione f(n) è contemporaneamente o(g(n)) ed
O(g(n)):
f(n)
g(n)
n
n0
DEI - Univ. Padova (Italia)
Selection-sort: efficienza
1) Seleziona l’elemento più piccolo nell’array
2) Scambia l’elemento selezionato con il
primo
3) Ordina la parte restante dell’ array, cioè
riduco la parte di array da considerare,
escludendo le prime posizioni già ordinate
DEI - Univ. Padova (Italia)
Selection-sort: efficienza
1) Per selezionare l’elemento più piccolo di
un array devo analizzare tutti gli elementi
di un array, e quindi è un operazione che
implica n operazioni
DEI - Univ. Padova (Italia)
Selection-sort: efficienza
2) Lo scambio di un elemento con un altro
viene fatto in tempo costante indipendente
dalla dimensione dell’array
DEI - Univ. Padova (Italia)
Selection-sort: efficienza
3) La parte disordinata dell’array si riduce di
un elemento e ripeto la procedura.
DEI - Univ. Padova (Italia)
Selection-sort: efficienza
1) Al primo passo devo trovare il minimo su
un array disordinato di n elementi
2) Al secondo passo devo trovare il minimo
su un array disordinato di n-1 elementi
3) Al terzo passo devo trovare il minimo su
un array disordinato di n-2 elementi
4) ….
DEI - Univ. Padova (Italia)
Selection-sort: efficienza
Per completare l’argomento bisogna sommare la
complessità computazionale di tutti i passi:
n+(n-1)+(n-2)+…+2+1
n(n − 1) n n
2
(
)
n
−
i
=
=
−
=
O
(
n
)
∑
2
2 2
i =1
n
DEI - Univ. Padova (Italia)
2
Bubble-sort: efficienza
• L’idea è di far “galleggiare” il minimo della
lista nelle prima posizione
• Riduco la parte di lista da considerare,
escludendo le prime posizioni già ordinate
DEI - Univ. Padova (Italia)
Bubble-sort: efficienza
• In maniera del tutto analoga a selectio-sort,
la parte disordinata dell’array si riduce di un
solo elemento ad ogni passo, e tutti gli
elementi della parte disordinata devono
essere analizzati
DEI - Univ. Padova (Italia)
Bubble sort: efficienza
Come per selection sort bisogna sommare la
complessità computazionale di tutti i passi:
n+(n-1)+(n-2)+…+2+1
n(n − 1) n n
2
(
)
n
−
i
=
=
−
=
O
(
n
)
∑
2
2 2
i =1
n
DEI - Univ. Padova (Italia)
2
Quick-sort: efficienza
• Nel caso medio ad ogni chiamata ricorsiva si
divide l’array in due parti da ordinare di
lunghezza approssimativamente uguale al
numero di elementi diviso per due
n
Chiamata 1
n/2
Chiamata 2
Chiamata 3
DEI - Univ. Padova (Italia)
n/4
n/2
n/4
n/4
n/4
Quick-sort: efficienza
• Per n elementi si ha che dividendo in maniera binaria
e bilanciata si devono effettuare log(n) chiamate
ricorsive
• Ad ogni chiamata ricorsiva si esaminano tutti gli
elementi dell’array da ordinare
f quicksort (n) = O(n ⋅ log(n))
DEI - Univ. Padova (Italia)
Scarica