16
Algoritmi e Strutture Dati Laurea in Informatica Calendario: 28 Febbraio – 1 Giugno Aula: LuM250 Orario: 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

Algoritmi e Strutture Dati Laurea in Informaticabaldan/Algoritmi/Slide/01-IntroInsertionSort.pdf · Testo: Introduzione agli Algoritmi e Strutture Dati (3 ... degli algoritmi V.Strutture

  • Upload
    lydieu

  • View
    233

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Algoritmi e Strutture Dati Laurea in Informaticabaldan/Algoritmi/Slide/01-IntroInsertionSort.pdf · Testo: Introduzione agli Algoritmi e Strutture Dati (3 ... degli algoritmi V.Strutture

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

Page 2: Algoritmi e Strutture Dati Laurea in Informaticabaldan/Algoritmi/Slide/01-IntroInsertionSort.pdf · Testo: Introduzione agli Algoritmi e Strutture Dati (3 ... degli algoritmi V.Strutture

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

Page 3: Algoritmi e Strutture Dati Laurea in Informaticabaldan/Algoritmi/Slide/01-IntroInsertionSort.pdf · Testo: Introduzione agli Algoritmi e Strutture Dati (3 ... degli algoritmi V.Strutture

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

Page 4: Algoritmi e Strutture Dati Laurea in Informaticabaldan/Algoritmi/Slide/01-IntroInsertionSort.pdf · Testo: Introduzione agli Algoritmi e Strutture Dati (3 ... degli algoritmi V.Strutture

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

Page 5: Algoritmi e Strutture Dati Laurea in Informaticabaldan/Algoritmi/Slide/01-IntroInsertionSort.pdf · Testo: Introduzione agli Algoritmi e Strutture Dati (3 ... degli algoritmi V.Strutture

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

Page 6: Algoritmi e Strutture Dati Laurea in Informaticabaldan/Algoritmi/Slide/01-IntroInsertionSort.pdf · Testo: Introduzione agli Algoritmi e Strutture Dati (3 ... degli algoritmi V.Strutture

TECNICA INCREMENTALE

Page 7: Algoritmi e Strutture Dati Laurea in Informaticabaldan/Algoritmi/Slide/01-IntroInsertionSort.pdf · Testo: Introduzione agli Algoritmi e Strutture Dati (3 ... degli algoritmi V.Strutture

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

Page 8: Algoritmi e Strutture Dati Laurea in Informaticabaldan/Algoritmi/Slide/01-IntroInsertionSort.pdf · Testo: Introduzione agli Algoritmi e Strutture Dati (3 ... degli algoritmi V.Strutture

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

Page 9: Algoritmi e Strutture Dati Laurea in Informaticabaldan/Algoritmi/Slide/01-IntroInsertionSort.pdf · Testo: Introduzione agli Algoritmi e Strutture Dati (3 ... degli algoritmi V.Strutture

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;}

}

Page 10: Algoritmi e Strutture Dati Laurea in Informaticabaldan/Algoritmi/Slide/01-IntroInsertionSort.pdf · Testo: Introduzione agli Algoritmi e Strutture Dati (3 ... degli algoritmi V.Strutture

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

Page 11: Algoritmi e Strutture Dati Laurea in Informaticabaldan/Algoritmi/Slide/01-IntroInsertionSort.pdf · Testo: Introduzione agli Algoritmi e Strutture Dati (3 ... degli algoritmi V.Strutture

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

Page 12: Algoritmi e Strutture Dati Laurea in Informaticabaldan/Algoritmi/Slide/01-IntroInsertionSort.pdf · Testo: Introduzione agli Algoritmi e Strutture Dati (3 ... degli algoritmi V.Strutture

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

Page 13: Algoritmi e Strutture Dati Laurea in Informaticabaldan/Algoritmi/Slide/01-IntroInsertionSort.pdf · Testo: Introduzione agli Algoritmi e Strutture Dati (3 ... degli algoritmi V.Strutture

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)(()(

Page 14: Algoritmi e Strutture Dati Laurea in Informaticabaldan/Algoritmi/Slide/01-IntroInsertionSort.pdf · Testo: Introduzione agli Algoritmi e Strutture Dati (3 ... degli algoritmi V.Strutture

caso migliore:

åå ==+++

-+++++=n

j

n

j

IS

ccc

ncccncccnT

27625

843210min

0)(1

)1)(()(

0=jt jt j <£0

abnccccccncccccnT IS

+=----++++++= )()()( 85431085432min

Page 15: Algoritmi e Strutture Dati Laurea in Informaticabaldan/Algoritmi/Slide/01-IntroInsertionSort.pdf · Testo: Introduzione agli Algoritmi e Strutture Dati (3 ... degli algoritmi V.Strutture

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)(()(

Page 16: Algoritmi e Strutture Dati Laurea in Informaticabaldan/Algoritmi/Slide/01-IntroInsertionSort.pdf · Testo: Introduzione agli Algoritmi e Strutture Dati (3 ... degli algoritmi V.Strutture

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