Upload
lydieu
View
238
Download
0
Embed Size (px)
Citation preview
Algoritmi e Strutture DatiLaurea in Informatica
Calendario: 28 Febbraio – 1 Giugno Aula: LuM250Orario: Mer 12.30-14.15
Gio, Ven 14.30-16.15
Numero crediti = 9 (~ 72 ore)~ 52 ore di teoria, ~20 ore di esercizi
Docente: Paolo Baldan
a. Prova intermediaper l’assegnazione di un bonus fino a 2 punti (che si somma al voto dell’esame finale)
b. Prova scritta(5 appelli - indispensabile iscriversi nella lista di esame che verrà attivata su UNIWEB)
c. Registrazione, con possibile orale (su base volontaria). Indispensabile per conseguire la lode.
Modalità d’Esame
Testo: Introduzione agli Algoritmi e Strutture Dati (3°ed). T.H.Cormen, C.E.Leiserson, R.L.Rivest, C.Stein. McGraw-Hill.
Pagina del corso: www.math.unipd.it/~baldan/Algoritmi+ Moodle con altro materiale
Trad. di: Introduction to Algorithms and Data Structures(3° ed). T.H.Cormen, C.E.Leiserson, R.L.Rivest, C.Stein. MIT Press.
Materiale didattico
ProgrammaLe prime 5 parti del testo (con qualche omissione):I. Fondamenti: notazione per gli algoritmi e primi
esempi di algoritmi e di analisi degli algoritmiII. Ordinamento e statistiche d’ordineIII. Strutture dati fondamentaliIV. Tecniche avanzate di progettazione ed analisi
degli algoritmiV. Strutture dati avanzate
I problemi computazionali, gli algoritmi che li risolvono e le tecniche per sviluppare tali algoritmi
INTRODUZIONE
Esempio1: problema dell’ordinamentoInput: a1,a2,...,anOutput: a'1,a'2,...,a'n permutazione (riarrangiamento) di a1,a2,...,an tale che a'1 £ a'2 £ ... £ a'n
TECNICA INCREMENTALE
Soluzione1: Algoritmo Insertion-Sort. InsertionSort
1 nA
1 nA
1 njA
key1 nj
Ai
1 njA
j1 nA
j
1 njA
ikey
1 njAi
key
Insertion-Sort(A)n = A.lengthfor j = 2 to nkey = A[j]// inseriamo A[j] nella sequenza// ordinata A[1..j-1]i = j - 1while i > 0 and A[i] > keyA[i+1] = A[i]i = i – 1
A[i+1] = key
Insertion-Sort(A)
n = A.lengthfor j = 2 to n
key = A[j]// inseriamo A[j] nella // sequenza ordinata// A[1..j-1]i = j – 1while i > 0 and A[i] > key
A[i+1] = A[i]i = i – 1
A[i+1] = key
void Insertion-Sort(vector<T> A){int i, j, n = A.size(); T key;for (j = 1; j < n; j++)
{ key = A[j];// inseriamo A[j] nella// sequenza ordinata // A[0..j-1]i = j – 1;while (i >= 0 && A[i] > key)
{A[i+1] = A[i]; i--;
}A[i+1] = key;}
}
Insertion-Sort(A)n = A.lengthfor j = 2 to n
// inserisce A[j] nella// sequenza ordinata // A[1..j-1]key = A[j]i = j – 1while i > 0 and A[i] > keyA[i+1] = A[i]i = i – 1
A[i+1] = key
A5 2 8 4 7 1 3 6
key
5 # 8 4 7 1 3 6 2# 5 8 4 7 1 3 62 5 8 4 7 1 3 62 5 # 4 7 1 3 6 82 5 # 4 7 1 3 62 5 8 4 7 1 3 62 5 8 # 7 1 3 6 42 # 5 8 7 1 3 62 4 5 8 7 1 3 62 4 5 8 # 1 3 6 72 4 5 # 8 1 3 62 4 5 7 8 1 3 6
Insertion-Sort(A)n = A.lenghtfor j = 2 to n
// inserisce A[j] nella// sequenza ordinata // A[1..j-1]key = A[j]i = j – 1while i > 0 and A[i] > keyA[i+1] = A[i]i = i – 1
A[i+1] = key
A2 4 5 7 8 1 3 6
key
2 4 5 7 8 # 3 6 1# 2 4 5 7 8 3 61 2 4 5 7 8 3 61 2 4 5 7 8 # 6 31 2 # 4 5 7 8 61 2 3 4 5 7 8 61 2 3 4 5 7 8 # 61 2 3 4 5 # 7 81 2 3 4 5 6 7 8
Insertion-Sort(A) n = A.lengthfor j = 2 to n
key = A[j]i = j - 1while i > 0 and A[i] > key
A[i+1] = A[i]i = i – 1
A[i+1] = key
Analisi di Insertion-Sort: correttezza
Correttezza InsertionSort
1 njA
i
1 njA
1 njA
i
1 njAi
1 njA
Analisi di Insertion-Sort: complessitàInsertion-Sort(A) //n = A.length //for j = 2 to n //key = A[j] //i = j -1 //while i > 0 and A[i] > key // A[i+1] = A[i] //i = i – 1 //A[i+1] = key //
)1(25 +å =
n
j jtc
0c
nc2)1(3 -nc)1(4 -nc
å =
n
j jtc26
å =
n
j jtc27
)1(8 -nc
jt j <£0
1c
åå ==++++
-+++++=n
j jn
j j
IS
tcctc
ncccncccnT
27625
843210
)()1(
)1)(()(
caso migliore:
åå ==+++
-+++++=n
j
n
j
IS
ccc
ncccncccnT
27625
843210min
0)(1
)1)(()(
0=jt jt j <£0
abnccccccncccccnT IS
+=----++++++= )()()( 85431085432min
caso peggiore: 1-= jt j
'''
)(
) 21
21
21
(
)( 21
)(
2
84310
8765432
2765max
anbncccccc
nccccccc
ncccnT IS
++=
---++
+--++++
++=
jt j <£0
åå ==-+++
-+++++=n
j
n
j
IS
jccjc
ncccncccnT
27625
843210max
)1()(
)1)(()(
caso medio:
åå =-
=+ +++
-+++++=n
jjn
jj
IS
ccc
ncccncccnT
2 21
762 21
5
843210med
)(
)1)(()(21-= j
jt
"""
)(
)41
41
43(
)(41)(
285431
8765432
2765med
anbncccccc
nccccccc
ncccnT IS
++=
----+
+--++++
++=
jt j <£0