• Non ci sono risultati.

Chapter 5

N/A
N/A
Protected

Academic year: 2021

Condividi "Chapter 5"

Copied!
189
0
0

Testo completo

(1)

1

Chapter 5

Divide and Conquer

2

Divide-and-Conquer

Divide-and-conquer.

 

Dividere il problema in diverse parti.

 

Risolvere ogni parte ricorsivamente.

 

Combinare le soluzioni dei sottoproblemi in soluzioni globali.

Uso più comune.

 

Dividere il problema di tagli n in due parti uguali di taglia n/2.

 

Risolvere ogni parte ricorsivamente.

 

Combinare le soluzioni dei sottoproblemi in soluzioni globali in tempo lineare.

Efficienza.

 

Brute force: O(n

2

).

 

Divide-and-conquer: O(n log n).

Divide et impera.

Veni, vidi, vici.

- Giulio Cesare

Divide and Conquer

Algoritmi che vedremo:

 

Mergesort

 

Quicksort

 

Counting Inversions

 

Closest Pair of Points

 

Integer Multiplication

 

Matrix Multiplication

3

5.1 Mergesort

(2)

1

Chapter 5

Divide and Conquer

2

Divide-and-Conquer

Divide-and-conquer.

 

Dividere il problema in diverse parti.

 

Risolvere ogni parte ricorsivamente.

 

Combinare le soluzioni dei sottoproblemi in soluzioni globali.

Uso più comune.

 

Dividere il problema di tagli n in due parti uguali di taglia n/2.

 

Risolvere ogni parte ricorsivamente.

 

Combinare le soluzioni dei sottoproblemi in soluzioni globali in tempo lineare.

Efficienza.

 

Brute force: O(n

2

).

 

Divide-and-conquer: O(n log n).

Divide et impera.

Veni, vidi, vici.

- Giulio Cesare

Divide and Conquer

Algoritmi che vedremo:

 

Mergesort

 

Quicksort

 

Counting Inversions

 

Closest Pair of Points

 

Integer Multiplication

 

Matrix Multiplication

3

5.1 Mergesort

(3)

1

Chapter 5

Divide and Conquer

2

Divide-and-Conquer

Divide-and-conquer.

 

Dividere il problema in diverse parti.

 

Risolvere ogni parte ricorsivamente.

 

Combinare le soluzioni dei sottoproblemi in soluzioni globali.

Uso più comune.

 

Dividere il problema di tagli n in due parti uguali di taglia n/2.

 

Risolvere ogni parte ricorsivamente.

 

Combinare le soluzioni dei sottoproblemi in soluzioni globali in tempo lineare.

Efficienza.

 

Brute force: O(n

2

).

 

Divide-and-conquer: O(n log n).

Divide et impera.

Veni, vidi, vici.

- Giulio Cesare

Divide and Conquer

Algoritmi che vedremo:

 

Mergesort

 

Quicksort

 

Counting Inversions

 

Closest Pair of Points

 

Integer Multiplication

 

Matrix Multiplication

3

5.1 Mergesort

(4)

1

Chapter 5

Divide and Conquer

2

Divide-and-Conquer

Divide-and-conquer.

 

Dividere il problema in diverse parti.

 

Risolvere ogni parte ricorsivamente.

 

Combinare le soluzioni dei sottoproblemi in soluzioni globali.

Uso più comune.

 

Dividere il problema di tagli n in due parti uguali di taglia n/2.

 

Risolvere ogni parte ricorsivamente.

 

Combinare le soluzioni dei sottoproblemi in soluzioni globali in tempo lineare.

Efficienza.

 

Brute force: O(n

2

).

 

Divide-and-conquer: O(n log n).

Divide et impera.

Veni, vidi, vici.

- Giulio Cesare

Divide and Conquer

Algoritmi che vedremo:

 

Mergesort

 

Quicksort

 

Counting Inversions

 

Closest Pair of Points

 

Integer Multiplication

 

Matrix Multiplication

3

5.1 Mergesort

(5)

5

Applicazioni ovvie:

List files in a directory.

Organize an MP3 library.

List names in a phone book.

Display Google PageRank results.

Problemi più semplici dopo ordinamento.

Find the median.

Find the closest pair.

Binary search in a database.

Identify statistical outliers.

Find duplicates in a mailing list.

Applicazioni non-ovvie:

Data compression.

Computer graphics.

Interval scheduling.

Computational biology.

Minimum spanning tree.

Supply chain management.

Simulate a system of particles.

Book recommendations on Amazon.

Load balancing on a parallel computer.

. . . Ordinamento

Ordinamento. Dati n elementi, disporli in ordine crescente.

6

Mergesort

Mergesort.

 

Dividere array in due metà.

 

Ricorsivamente ordina ogni metà.

 

Merge due metà per ottenere tutta la sequenza ordinata.

A L G O R I T H M S

A L G O R I T H M S

A G L O R H I M S T

A G H I L M O R S T

Jon von Neumann (1945)

7

MergeSort (esempio) - 1

8

MergeSort (esempio) - 2

(6)

5

Applicazioni ovvie:

List files in a directory.

Organize an MP3 library.

List names in a phone book.

Display Google PageRank results.

Problemi più semplici dopo ordinamento.

Find the median.

Find the closest pair.

Binary search in a database.

Identify statistical outliers.

Find duplicates in a mailing list.

Applicazioni non-ovvie:

Data compression.

Computer graphics.

Interval scheduling.

Computational biology.

Minimum spanning tree.

Supply chain management.

Simulate a system of particles.

Book recommendations on Amazon.

Load balancing on a parallel computer.

. . . Ordinamento

Ordinamento. Dati n elementi, disporli in ordine crescente.

6

Mergesort

Mergesort.

 

Dividere array in due metà.

 

Ricorsivamente ordina ogni metà.

 

Merge due metà per ottenere tutta la sequenza ordinata.

A L G O R I T H M S

A L G O R I T H M S

A G L O R H I M S T

A G H I L M O R S T

Jon von Neumann (1945)

7

MergeSort (esempio) - 1

8

MergeSort (esempio) - 2

(7)

5

Applicazioni ovvie:

List files in a directory.

Organize an MP3 library.

List names in a phone book.

Display Google PageRank results.

Problemi più semplici dopo ordinamento.

Find the median.

Find the closest pair.

Binary search in a database.

Identify statistical outliers.

Find duplicates in a mailing list.

Applicazioni non-ovvie:

Data compression.

Computer graphics.

Interval scheduling.

Computational biology.

Minimum spanning tree.

Supply chain management.

Simulate a system of particles.

Book recommendations on Amazon.

Load balancing on a parallel computer.

. . . Ordinamento

Ordinamento. Dati n elementi, disporli in ordine crescente.

6

Mergesort

Mergesort.

 

Dividere array in due metà.

 

Ricorsivamente ordina ogni metà.

 

Merge due metà per ottenere tutta la sequenza ordinata.

A L G O R I T H M S

A L G O R I T H M S

A G L O R H I M S T

A G H I L M O R S T

Jon von Neumann (1945)

7

MergeSort (esempio) - 1

8

MergeSort (esempio) - 2

(8)

5

Applicazioni ovvie:

List files in a directory.

Organize an MP3 library.

List names in a phone book.

Display Google PageRank results.

Problemi più semplici dopo ordinamento.

Find the median.

Find the closest pair.

Binary search in a database.

Identify statistical outliers.

Find duplicates in a mailing list.

Applicazioni non-ovvie:

Data compression.

Computer graphics.

Interval scheduling.

Computational biology.

Minimum spanning tree.

Supply chain management.

Simulate a system of particles.

Book recommendations on Amazon.

Load balancing on a parallel computer.

. . . Ordinamento

Ordinamento. Dati n elementi, disporli in ordine crescente.

6

Mergesort

Mergesort.

 

Dividere array in due metà.

 

Ricorsivamente ordina ogni metà.

 

Merge due metà per ottenere tutta la sequenza ordinata.

A L G O R I T H M S

A L G O R I T H M S

A G L O R H I M S T

A G H I L M O R S T

Jon von Neumann (1945)

7

MergeSort (esempio) - 1

8

MergeSort (esempio) - 2

(9)

9

MergeSort (esempio) - 3

10

MergeSort (esempio) - 4

11

MergeSort (esempio) - 5

12

MergeSort (esempio) - 6

(10)

9

MergeSort (esempio) - 3

10

MergeSort (esempio) - 4

11

MergeSort (esempio) - 5

12

MergeSort (esempio) - 6

(11)

9

MergeSort (esempio) - 3

10

MergeSort (esempio) - 4

11

MergeSort (esempio) - 5

12

MergeSort (esempio) - 6

(12)

9

MergeSort (esempio) - 3

10

MergeSort (esempio) - 4

11

MergeSort (esempio) - 5

12

MergeSort (esempio) - 6

(13)

13

MergeSort (esempio) - 7

14

MergeSort (esempio) - 8

15

MergeSort (esempio) - 9

16

MergeSort (esempio) - 10

(14)

13

MergeSort (esempio) - 7

14

MergeSort (esempio) - 8

15

MergeSort (esempio) - 9

16

MergeSort (esempio) - 10

(15)

13

MergeSort (esempio) - 7

14

MergeSort (esempio) - 8

15

MergeSort (esempio) - 9

16

MergeSort (esempio) - 10

(16)

13

MergeSort (esempio) - 7

14

MergeSort (esempio) - 8

15

MergeSort (esempio) - 9

16

MergeSort (esempio) - 10

(17)

17

MergeSort (esempio) - 11

18

MergeSort (esempio) - 12

19

MergeSort (esempio) - 13

20

MergeSort (esempio) - 14

(18)

17

MergeSort (esempio) - 11

18

MergeSort (esempio) - 12

19

MergeSort (esempio) - 13

20

MergeSort (esempio) - 14

(19)

17

MergeSort (esempio) - 11

18

MergeSort (esempio) - 12

19

MergeSort (esempio) - 13

20

MergeSort (esempio) - 14

(20)

17

MergeSort (esempio) - 11

18

MergeSort (esempio) - 12

19

MergeSort (esempio) - 13

20

MergeSort (esempio) - 14

(21)

21

MergeSort (esempio) - 15

22

MergeSort (esempio) - 16

23

MergeSort (esempio) - 17

24

MergeSort (esempio) - 18

(22)

21

MergeSort (esempio) - 15

22

MergeSort (esempio) - 16

23

MergeSort (esempio) - 17

24

MergeSort (esempio) - 18

(23)

21

MergeSort (esempio) - 15

22

MergeSort (esempio) - 16

23

MergeSort (esempio) - 17

24

MergeSort (esempio) - 18

(24)

21

MergeSort (esempio) - 15

22

MergeSort (esempio) - 16

23

MergeSort (esempio) - 17

24

MergeSort (esempio) - 18

(25)

25

MergeSort (esempio) - 19

26

MergeSort (esempio) - 20

27

MergeSort (esempio) - 21

28

MergeSort (esempio) - 22

(26)

25

MergeSort (esempio) - 19

26

MergeSort (esempio) - 20

27

MergeSort (esempio) - 21

28

MergeSort (esempio) - 22

(27)

25

MergeSort (esempio) - 19

26

MergeSort (esempio) - 20

27

MergeSort (esempio) - 21

28

MergeSort (esempio) - 22

(28)

25

MergeSort (esempio) - 19

26

MergeSort (esempio) - 20

27

MergeSort (esempio) - 21

28

MergeSort (esempio) - 22

(29)

29

Mergesort

Mergesort.

 

Dividere array in due metà.

 

Ricorsivamente ordina ogni metà.

 

Merge due metà per ottenere tutta la sequenza ordinata.

Jon von Neumann (1945)

30

Mergesort

Mergesort.

 

Dividere array in due metà.

 

Ricorsivamente ordina ogni metà.

 

Merge due metà per ottenere tutta la sequenza ordinata.

Jon von Neumann (1945)

31

Merge

Merging. Combina due liste ordinate in un’unica lista ordinata.

Come effettuare il merge efficientemente?

 

Uso di un array temporaneo.

A G L O R H I M S T

A G H I

32

array ausiliario

smallest smallest

A G L O R H I M S T

Merge

Merge.

 

Mantenere traccia dell elemento più piccolo in ogni metà ordinata.

 

Inserire il più piccolo dei due elementi in un array ausiliario.

 

Ripetere fino a terminare gli elementi nelle due metà.

A

(30)

29

Mergesort

Mergesort.

 

Dividere array in due metà.

 

Ricorsivamente ordina ogni metà.

 

Merge due metà per ottenere tutta la sequenza ordinata.

Jon von Neumann (1945)

30

Mergesort

Mergesort.

 

Dividere array in due metà.

 

Ricorsivamente ordina ogni metà.

 

Merge due metà per ottenere tutta la sequenza ordinata.

Jon von Neumann (1945)

31

Merge

Merging. Combina due liste ordinate in un’unica lista ordinata.

Come effettuare il merge efficientemente?

 

Uso di un array temporaneo.

A G L O R H I M S T

A G H I

32

array ausiliario

smallest smallest

A G L O R H I M S T

Merge

Merge.

 

Mantenere traccia dell elemento più piccolo in ogni metà ordinata.

 

Inserire il più piccolo dei due elementi in un array ausiliario.

 

Ripetere fino a terminare gli elementi nelle due metà.

A

(31)

29

Mergesort

Mergesort.

 

Dividere array in due metà.

 

Ricorsivamente ordina ogni metà.

 

Merge due metà per ottenere tutta la sequenza ordinata.

Jon von Neumann (1945)

30

Mergesort

Mergesort.

 

Dividere array in due metà.

 

Ricorsivamente ordina ogni metà.

 

Merge due metà per ottenere tutta la sequenza ordinata.

Jon von Neumann (1945)

31

Merge

Merging. Combina due liste ordinate in un’unica lista ordinata.

Come effettuare il merge efficientemente?

 

Uso di un array temporaneo.

A G L O R H I M S T

A G H I

32

array ausiliario

smallest smallest

A G L O R H I M S T

Merge

Merge.

 

Mantenere traccia dell elemento più piccolo in ogni metà ordinata.

 

Inserire il più piccolo dei due elementi in un array ausiliario.

 

Ripetere fino a terminare gli elementi nelle due metà.

A

(32)

29

Mergesort

Mergesort.

 

Dividere array in due metà.

 

Ricorsivamente ordina ogni metà.

 

Merge due metà per ottenere tutta la sequenza ordinata.

Jon von Neumann (1945)

30

Mergesort

Mergesort.

 

Dividere array in due metà.

 

Ricorsivamente ordina ogni metà.

 

Merge due metà per ottenere tutta la sequenza ordinata.

Jon von Neumann (1945)

31

Merge

Merging. Combina due liste ordinate in un’unica lista ordinata.

Come effettuare il merge efficientemente?

 

Uso di un array temporaneo.

A G L O R H I M S T

A G H I

32

array ausiliario

smallest smallest

A G L O R H I M S T

Merge

Merge.

 

Mantenere traccia dell elemento più piccolo in ogni metà ordinata.

 

Inserire il più piccolo dei due elementi in un array ausiliario.

 

Ripetere fino a terminare gli elementi nelle due metà.

A

(33)

33

smallest smallest

A G L O R H I M S T A

Merge

Merge.

 

Mantenere traccia dell elemento più piccolo in ogni metà ordinata.

 

Inserire il più piccolo dei due elementi in un array ausiliario.

 

Ripetere fino a terminare gli elementi nelle due metà.

G array ausiliario

34

smallest smallest

A G L O R H I M S T A G

Merge

Merge.

 

Mantenere traccia dell elemento più piccolo in ogni metà ordinata.

 

Inserire il più piccolo dei due elementi in un array ausiliario.

 

Ripetere fino a terminare gli elementi nelle due metà.

H array ausiliario

35

smallest smallest

A G L O R H I M S T A G H

Merge

Merge.

 

Mantenere traccia dell elemento più piccolo in ogni metà ordinata.

 

Inserire il più piccolo dei due elementi in un array ausiliario.

 

Ripetere fino a terminare gli elementi nelle due metà.

I array ausiliario

36

smallest smallest

A G L O R H I M S T A G H I

Merge

Merge.

 

Mantenere traccia dell elemento più piccolo in ogni metà ordinata.

 

Inserire il più piccolo dei due elementi in un array ausiliario.

 

Ripetere fino a terminare gli elementi nelle due metà.

L array ausiliario

(34)

33

smallest smallest

A G L O R H I M S T A

Merge

Merge.

 

Mantenere traccia dell elemento più piccolo in ogni metà ordinata.

 

Inserire il più piccolo dei due elementi in un array ausiliario.

 

Ripetere fino a terminare gli elementi nelle due metà.

G array ausiliario

34

smallest smallest

A G L O R H I M S T A G

Merge

Merge.

 

Mantenere traccia dell elemento più piccolo in ogni metà ordinata.

 

Inserire il più piccolo dei due elementi in un array ausiliario.

 

Ripetere fino a terminare gli elementi nelle due metà.

H array ausiliario

35

smallest smallest

A G L O R H I M S T A G H

Merge

Merge.

 

Mantenere traccia dell elemento più piccolo in ogni metà ordinata.

 

Inserire il più piccolo dei due elementi in un array ausiliario.

 

Ripetere fino a terminare gli elementi nelle due metà.

I array ausiliario

36

smallest smallest

A G L O R H I M S T A G H I

Merge

Merge.

 

Mantenere traccia dell elemento più piccolo in ogni metà ordinata.

 

Inserire il più piccolo dei due elementi in un array ausiliario.

 

Ripetere fino a terminare gli elementi nelle due metà.

L array ausiliario

(35)

33

smallest smallest

A G L O R H I M S T A

Merge

Merge.

 

Mantenere traccia dell elemento più piccolo in ogni metà ordinata.

 

Inserire il più piccolo dei due elementi in un array ausiliario.

 

Ripetere fino a terminare gli elementi nelle due metà.

G array ausiliario

34

smallest smallest

A G L O R H I M S T A G

Merge

Merge.

 

Mantenere traccia dell elemento più piccolo in ogni metà ordinata.

 

Inserire il più piccolo dei due elementi in un array ausiliario.

 

Ripetere fino a terminare gli elementi nelle due metà.

H array ausiliario

35

smallest smallest

A G L O R H I M S T A G H

Merge

Merge.

 

Mantenere traccia dell elemento più piccolo in ogni metà ordinata.

 

Inserire il più piccolo dei due elementi in un array ausiliario.

 

Ripetere fino a terminare gli elementi nelle due metà.

I array ausiliario

36

smallest smallest

A G L O R H I M S T A G H I

Merge

Merge.

 

Mantenere traccia dell elemento più piccolo in ogni metà ordinata.

 

Inserire il più piccolo dei due elementi in un array ausiliario.

 

Ripetere fino a terminare gli elementi nelle due metà.

L array ausiliario

(36)

33

smallest smallest

A G L O R H I M S T A

Merge

Merge.

 

Mantenere traccia dell elemento più piccolo in ogni metà ordinata.

 

Inserire il più piccolo dei due elementi in un array ausiliario.

 

Ripetere fino a terminare gli elementi nelle due metà.

G array ausiliario

34

smallest smallest

A G L O R H I M S T A G

Merge

Merge.

 

Mantenere traccia dell elemento più piccolo in ogni metà ordinata.

 

Inserire il più piccolo dei due elementi in un array ausiliario.

 

Ripetere fino a terminare gli elementi nelle due metà.

H array ausiliario

35

smallest smallest

A G L O R H I M S T A G H

Merge

Merge.

 

Mantenere traccia dell elemento più piccolo in ogni metà ordinata.

 

Inserire il più piccolo dei due elementi in un array ausiliario.

 

Ripetere fino a terminare gli elementi nelle due metà.

I array ausiliario

36

smallest smallest

A G L O R H I M S T A G H I

Merge

Merge.

 

Mantenere traccia dell elemento più piccolo in ogni metà ordinata.

 

Inserire il più piccolo dei due elementi in un array ausiliario.

 

Ripetere fino a terminare gli elementi nelle due metà.

L array ausiliario

(37)

37

smallest smallest

A G L O R H I M S T A G H I L

Merge

Merge.

 

Mantenere traccia dell elemento più piccolo in ogni metà ordinata.

 

Inserire il più piccolo dei due elementi in un array ausiliario.

 

Ripetere fino a terminare gli elementi nelle due metà.

M array ausiliario

38

smallest smallest

A G L O R H I M S T A G H I L M

Merge

Merge.

 

Mantenere traccia dell elemento più piccolo in ogni metà ordinata.

 

Inserire il più piccolo dei due elementi in un array ausiliario.

 

Ripetere fino a terminare gli elementi nelle due metà.

O array ausiliario

39

smallest smallest

A G L O R H I M S T A G H I L M O

Merge

Merge.

 

Mantenere traccia dell elemento più piccolo in ogni metà ordinata.

 

Inserire il più piccolo dei due elementi in un array ausiliario.

 

Ripetere fino a terminare gli elementi nelle due metà.

R array ausiliario

40

prima metà

terminata smallest

A G L O R H I M S T A G H I L M O R

Merge

Merge.

 

Mantenere traccia dell elemento più piccolo in ogni metà ordinata.

 

Inserire il più piccolo dei due elementi in un array ausiliario.

 

Ripetere fino a terminare gli elementi nelle due metà.

S array ausiliario

(38)

37

smallest smallest

A G L O R H I M S T A G H I L

Merge

Merge.

 

Mantenere traccia dell elemento più piccolo in ogni metà ordinata.

 

Inserire il più piccolo dei due elementi in un array ausiliario.

 

Ripetere fino a terminare gli elementi nelle due metà.

M array ausiliario

38

smallest smallest

A G L O R H I M S T A G H I L M

Merge

Merge.

 

Mantenere traccia dell elemento più piccolo in ogni metà ordinata.

 

Inserire il più piccolo dei due elementi in un array ausiliario.

 

Ripetere fino a terminare gli elementi nelle due metà.

O array ausiliario

39

smallest smallest

A G L O R H I M S T A G H I L M O

Merge

Merge.

 

Mantenere traccia dell elemento più piccolo in ogni metà ordinata.

 

Inserire il più piccolo dei due elementi in un array ausiliario.

 

Ripetere fino a terminare gli elementi nelle due metà.

R array ausiliario

40

prima metà

terminata smallest

A G L O R H I M S T A G H I L M O R

Merge

Merge.

 

Mantenere traccia dell elemento più piccolo in ogni metà ordinata.

 

Inserire il più piccolo dei due elementi in un array ausiliario.

 

Ripetere fino a terminare gli elementi nelle due metà.

S array ausiliario

(39)

37

smallest smallest

A G L O R H I M S T A G H I L

Merge

Merge.

 

Mantenere traccia dell elemento più piccolo in ogni metà ordinata.

 

Inserire il più piccolo dei due elementi in un array ausiliario.

 

Ripetere fino a terminare gli elementi nelle due metà.

M array ausiliario

38

smallest smallest

A G L O R H I M S T A G H I L M

Merge

Merge.

 

Mantenere traccia dell elemento più piccolo in ogni metà ordinata.

 

Inserire il più piccolo dei due elementi in un array ausiliario.

 

Ripetere fino a terminare gli elementi nelle due metà.

O array ausiliario

39

smallest smallest

A G L O R H I M S T A G H I L M O

Merge

Merge.

 

Mantenere traccia dell elemento più piccolo in ogni metà ordinata.

 

Inserire il più piccolo dei due elementi in un array ausiliario.

 

Ripetere fino a terminare gli elementi nelle due metà.

R array ausiliario

40

prima metà

terminata smallest

A G L O R H I M S T A G H I L M O R

Merge

Merge.

 

Mantenere traccia dell elemento più piccolo in ogni metà ordinata.

 

Inserire il più piccolo dei due elementi in un array ausiliario.

 

Ripetere fino a terminare gli elementi nelle due metà.

S array ausiliario

(40)

37

smallest smallest

A G L O R H I M S T A G H I L

Merge

Merge.

 

Mantenere traccia dell elemento più piccolo in ogni metà ordinata.

 

Inserire il più piccolo dei due elementi in un array ausiliario.

 

Ripetere fino a terminare gli elementi nelle due metà.

M array ausiliario

38

smallest smallest

A G L O R H I M S T A G H I L M

Merge

Merge.

 

Mantenere traccia dell elemento più piccolo in ogni metà ordinata.

 

Inserire il più piccolo dei due elementi in un array ausiliario.

 

Ripetere fino a terminare gli elementi nelle due metà.

O array ausiliario

39

smallest smallest

A G L O R H I M S T A G H I L M O

Merge

Merge.

 

Mantenere traccia dell elemento più piccolo in ogni metà ordinata.

 

Inserire il più piccolo dei due elementi in un array ausiliario.

 

Ripetere fino a terminare gli elementi nelle due metà.

R array ausiliario

40

prima metà

terminata smallest

A G L O R H I M S T A G H I L M O R

Merge

Merge.

 

Mantenere traccia dell elemento più piccolo in ogni metà ordinata.

 

Inserire il più piccolo dei due elementi in un array ausiliario.

 

Ripetere fino a terminare gli elementi nelle due metà.

S array ausiliario

(41)

41

smallest

A G L O R H I M S T A G H I L M O R S

Merge

Merge.

 

Mantenere traccia dell elemento più piccolo in ogni metà ordinata.

 

Inserire il più piccolo dei due elementi in un array ausiliario.

 

Ripetere fino a terminare gli elementi nelle due metà.

T

prima metà terminata

array ausiliario

42

seconda metà terminata

A G L O R H I M S T A G H I L M O R S T

Merge

Merge.

 

Mantenere traccia dell elemento più piccolo in ogni metà ordinata.

 

Inserire il più piccolo dei due elementi in un array ausiliario.

 

Ripetere fino a terminare gli elementi nelle due metà.

prima metà terminata

array ausiliario

43

Merge

Merging. Combina due liste ordinate in un’unica lista ordinata.

Come effettuare il merge efficientemente?

 

Numero lineare di confronti.

 

Uso di un array temporaneo.

A G L O R H I M S T

A G H I

44

Mergesort

Mergesort.

 

Dividere array in due metà.

 

Ricorsivamente ordina ogni metà.

 

Merge due metà per ottenere tutta la sequenza ordinata.

Definizione. T(n) = numero di confronti mergesort per input di n elementi.

merge ordina dividi

A L G O R I T H M S

A L G O R I T H M S

A G L O R H I M S T

A G H I L M O R S T

Jon von Neumann (1945)

O(n)

2T(n/2)

O(1)

(42)

41

smallest

A G L O R H I M S T A G H I L M O R S

Merge

Merge.

 

Mantenere traccia dell elemento più piccolo in ogni metà ordinata.

 

Inserire il più piccolo dei due elementi in un array ausiliario.

 

Ripetere fino a terminare gli elementi nelle due metà.

T

prima metà terminata

array ausiliario

42

seconda metà terminata

A G L O R H I M S T A G H I L M O R S T

Merge

Merge.

 

Mantenere traccia dell elemento più piccolo in ogni metà ordinata.

 

Inserire il più piccolo dei due elementi in un array ausiliario.

 

Ripetere fino a terminare gli elementi nelle due metà.

prima metà terminata

array ausiliario

43

Merge

Merging. Combina due liste ordinate in un’unica lista ordinata.

Come effettuare il merge efficientemente?

 

Numero lineare di confronti.

 

Uso di un array temporaneo.

A G L O R H I M S T

A G H I

44

Mergesort

Mergesort.

 

Dividere array in due metà.

 

Ricorsivamente ordina ogni metà.

 

Merge due metà per ottenere tutta la sequenza ordinata.

Definizione. T(n) = numero di confronti mergesort per input di n elementi.

merge ordina dividi

A L G O R I T H M S

A L G O R I T H M S

A G L O R H I M S T

A G H I L M O R S T

Jon von Neumann (1945)

O(n)

2T(n/2)

O(1)

(43)

41

smallest

A G L O R H I M S T A G H I L M O R S

Merge

Merge.

 

Mantenere traccia dell elemento più piccolo in ogni metà ordinata.

 

Inserire il più piccolo dei due elementi in un array ausiliario.

 

Ripetere fino a terminare gli elementi nelle due metà.

T

prima metà terminata

array ausiliario

42

seconda metà terminata

A G L O R H I M S T A G H I L M O R S T

Merge

Merge.

 

Mantenere traccia dell elemento più piccolo in ogni metà ordinata.

 

Inserire il più piccolo dei due elementi in un array ausiliario.

 

Ripetere fino a terminare gli elementi nelle due metà.

prima metà terminata

array ausiliario

43

Merge

Merging. Combina due liste ordinate in un’unica lista ordinata.

Come effettuare il merge efficientemente?

 

Numero lineare di confronti.

 

Uso di un array temporaneo.

A G L O R H I M S T

A G H I

44

Mergesort

Mergesort.

 

Dividere array in due metà.

 

Ricorsivamente ordina ogni metà.

 

Merge due metà per ottenere tutta la sequenza ordinata.

Definizione. T(n) = numero di confronti mergesort per input di n elementi.

merge ordina dividi

A L G O R I T H M S

A L G O R I T H M S

A G L O R H I M S T

A G H I L M O R S T

Jon von Neumann (1945)

O(n)

2T(n/2)

O(1)

(44)

41

smallest

A G L O R H I M S T A G H I L M O R S

Merge

Merge.

 

Mantenere traccia dell elemento più piccolo in ogni metà ordinata.

 

Inserire il più piccolo dei due elementi in un array ausiliario.

 

Ripetere fino a terminare gli elementi nelle due metà.

T

prima metà terminata

array ausiliario

42

seconda metà terminata

A G L O R H I M S T A G H I L M O R S T

Merge

Merge.

 

Mantenere traccia dell elemento più piccolo in ogni metà ordinata.

 

Inserire il più piccolo dei due elementi in un array ausiliario.

 

Ripetere fino a terminare gli elementi nelle due metà.

prima metà terminata

array ausiliario

43

Merge

Merging. Combina due liste ordinate in un’unica lista ordinata.

Come effettuare il merge efficientemente?

 

Numero lineare di confronti.

 

Uso di un array temporaneo.

A G L O R H I M S T

A G H I

44

Mergesort

Mergesort.

 

Dividere array in due metà.

 

Ricorsivamente ordina ogni metà.

 

Merge due metà per ottenere tutta la sequenza ordinata.

Definizione. T(n) = numero di confronti mergesort per input di n elementi.

merge ordina dividi

A L G O R I T H M S

A L G O R I T H M S

A G L O R H I M S T

A G H I L M O R S T

Jon von Neumann (1945)

O(n)

2T(n/2)

O(1)

(45)

45

Una utile relazione di ricorrenza

Definizione. T(n) = numero di confronti mergesort per input n elementi.

Ricorrenza del Mergesort.

Soluzione. T(n) = O(n log

2

n).

Varie prove. Descriviamo vari modi per risolvere questa ricorrenza.

Iniziamente assumiamo che n è una potenza di 2 e sostituiamo ≤ con =.

!

T(n) "

0 se n =1

T ( # n / 2 $ )

risolvi parte sinistra

! " # # $ + T ( % n / 2 & )

risolvi parte destra

! " # # $ + cn

merge

% altrimenti '

( )

* )

46

Prova con Albero di Ricorsione

cn

T(n/2) T(n/2)

! T(n) "

0 se n =1

T

(

#n / 2$

)

risolvi parte sinistra! " # # $ + T

(

%n / 2&

)

risolvi parte destra! " # # $ + cn

merge

% altrimenti '

( )

* )

T(n)

cn

c n/2 c n/2

T(n/4) T(n/4)

T(n/4) T(n/4)

47

Prova con Albero di Ricorsione

cn

c n/2 c n/2

c n/4 c n/4

c n/4 c n/4

c 2 c 2 c 2 c 2 c 2 c 2 c 2 c 2

cn

c n / 2k

2 c(n/2) 4 c(n/4) 2

k

c(n / 2

k

)

n/2 c(2) . . . . . . h+1

! T(n) "

0 se n =1

T

(

#n / 2$

)

risolvi parte sinistra! " # # $ + T

(

%n / 2&

)

risolvi parte destra! " # # $ + cn

merge

% altrimenti '

( )

* )

Altezza albero h?

cn  (h+1)

48

Prova con Albero di Ricorsione

cn

c n/2 c n/2

c n/4 c n/4

c n/4 c n/4

c 2 c 2 c 2 c 2 c 2 c 2 c 2 c 2

cn

c n / 2k

2 c(n/2) 4 c(n/4) 2

k

c(n / 2

k

)

n/2 c(2) . . . . . . h+1

! T(n) "

0 se n =1

T

(

#n / 2$

)

risolvi parte sinistra! " # # $ + T

(

%n / 2&

)

risolvi parte destra! " # # $ + cn

merge

% altrimenti '

( )

* )

Altezza albero h? n / 2h = 2 cioè h = log2n - 1

cn  (h+1)

(46)

45

Una utile relazione di ricorrenza

Definizione. T(n) = numero di confronti mergesort per input n elementi.

Ricorrenza del Mergesort.

Soluzione. T(n) = O(n log

2

n).

Varie prove. Descriviamo vari modi per risolvere questa ricorrenza.

Iniziamente assumiamo che n è una potenza di 2 e sostituiamo ≤ con =.

!

T(n) "

0 se n =1

T ( # n / 2 $ )

risolvi parte sinistra

! " # # $ + T ( % n / 2 & )

risolvi parte destra

! " # # $ + cn

merge

% altrimenti '

( )

* )

46

Prova con Albero di Ricorsione

cn

T(n/2) T(n/2)

! T(n) "

0 se n =1

T

(

#n / 2$

)

risolvi parte sinistra! " # # $ + T

(

%n / 2&

)

risolvi parte destra! " # # $ + cn

merge

% altrimenti '

( )

* )

T(n)

cn

c n/2 c n/2

T(n/4) T(n/4)

T(n/4) T(n/4)

47

Prova con Albero di Ricorsione

cn

c n/2 c n/2

c n/4 c n/4

c n/4 c n/4

c 2 c 2 c 2 c 2 c 2 c 2 c 2 c 2

cn

c n / 2k

2 c(n/2) 4 c(n/4) 2

k

c(n / 2

k

)

n/2 c(2) . . . . . . h+1

! T(n) "

0 se n =1

T

(

#n / 2$

)

risolvi parte sinistra! " # # $ + T

(

%n / 2&

)

risolvi parte destra! " # # $ + cn

merge

% altrimenti '

( )

* )

Altezza albero h?

cn  (h+1)

48

Prova con Albero di Ricorsione

cn

c n/2 c n/2

c n/4 c n/4

c n/4 c n/4

c 2 c 2 c 2 c 2 c 2 c 2 c 2 c 2

cn

c n / 2k

2 c(n/2) 4 c(n/4) 2

k

c(n / 2

k

)

n/2 c(2) . . . . . . h+1

! T(n) "

0 se n =1

T

(

#n / 2$

)

risolvi parte sinistra! " # # $ + T

(

%n / 2&

)

risolvi parte destra! " # # $ + cn

merge

% altrimenti '

( )

* )

Altezza albero h? n / 2h = 2 cioè h = log2n - 1

cn  (h+1)

(47)

45

Una utile relazione di ricorrenza

Definizione. T(n) = numero di confronti mergesort per input n elementi.

Ricorrenza del Mergesort.

Soluzione. T(n) = O(n log

2

n).

Varie prove. Descriviamo vari modi per risolvere questa ricorrenza.

Iniziamente assumiamo che n è una potenza di 2 e sostituiamo ≤ con =.

!

T(n) "

0 se n =1

T ( # n / 2 $ )

risolvi parte sinistra

! " # # $ + T ( % n / 2 & )

risolvi parte destra

! " # # $ + cn

merge

% altrimenti '

( )

* )

46

Prova con Albero di Ricorsione

cn

T(n/2) T(n/2)

! T(n) "

0 se n =1

T

(

#n / 2$

)

risolvi parte sinistra! " # # $ + T

(

%n / 2&

)

risolvi parte destra! " # # $ + cn

merge

% altrimenti '

( )

* )

T(n)

cn

c n/2 c n/2

T(n/4) T(n/4)

T(n/4) T(n/4)

47

Prova con Albero di Ricorsione

cn

c n/2 c n/2

c n/4 c n/4

c n/4 c n/4

c 2 c 2 c 2 c 2 c 2 c 2 c 2 c 2

cn

c n / 2k

2 c(n/2) 4 c(n/4) 2

k

c(n / 2

k

)

n/2 c(2) . . . . . . h+1

! T(n) "

0 se n =1

T

(

#n / 2$

)

risolvi parte sinistra! " # # $ + T

(

%n / 2&

)

risolvi parte destra! " # # $ + cn

merge

% altrimenti '

( )

* )

Altezza albero h?

cn  (h+1)

48

Prova con Albero di Ricorsione

cn

c n/2 c n/2

c n/4 c n/4

c n/4 c n/4

c 2 c 2 c 2 c 2 c 2 c 2 c 2 c 2

cn

c n / 2k

2 c(n/2) 4 c(n/4) 2

k

c(n / 2

k

)

n/2 c(2) . . . . . . h+1

! T(n) "

0 se n =1

T

(

#n / 2$

)

risolvi parte sinistra! " # # $ + T

(

%n / 2&

)

risolvi parte destra! " # # $ + cn

merge

% altrimenti '

( )

* )

Altezza albero h? n / 2h = 2 cioè h = log2n - 1

cn  (h+1)

(48)

45

Una utile relazione di ricorrenza

Definizione. T(n) = numero di confronti mergesort per input n elementi.

Ricorrenza del Mergesort.

Soluzione. T(n) = O(n log

2

n).

Varie prove. Descriviamo vari modi per risolvere questa ricorrenza.

Iniziamente assumiamo che n è una potenza di 2 e sostituiamo ≤ con =.

!

T(n) "

0 se n =1

T ( # n / 2 $ )

risolvi parte sinistra

! " # # $ + T ( % n / 2 & )

risolvi parte destra

! " # # $ + cn

merge

% altrimenti '

( )

* )

46

Prova con Albero di Ricorsione

cn

T(n/2) T(n/2)

! T(n) "

0 se n =1

T

(

#n / 2$

)

risolvi parte sinistra! " # # $ + T

(

%n / 2&

)

risolvi parte destra! " # # $ + cn

merge

% altrimenti '

( )

* )

T(n)

cn

c n/2 c n/2

T(n/4) T(n/4)

T(n/4) T(n/4)

47

Prova con Albero di Ricorsione

cn

c n/2 c n/2

c n/4 c n/4

c n/4 c n/4

c 2 c 2 c 2 c 2 c 2 c 2 c 2 c 2

cn

c n / 2k

2 c(n/2) 4 c(n/4) 2

k

c(n / 2

k

)

n/2 c(2) . . . . . . h+1

! T(n) "

0 se n =1

T

(

#n / 2$

)

risolvi parte sinistra! " # # $ + T

(

%n / 2&

)

risolvi parte destra! " # # $ + cn

merge

% altrimenti '

( )

* )

Altezza albero h?

cn  (h+1)

48

Prova con Albero di Ricorsione

cn

c n/2 c n/2

c n/4 c n/4

c n/4 c n/4

c 2 c 2 c 2 c 2 c 2 c 2 c 2 c 2

cn

c n / 2k

2 c(n/2) 4 c(n/4) 2

k

c(n / 2

k

)

n/2 c(2) . . . . . . h+1

! T(n) "

0 se n =1

T

(

#n / 2$

)

risolvi parte sinistra! " # # $ + T

(

%n / 2&

)

risolvi parte destra! " # # $ + cn

merge

% altrimenti '

( )

* )

Altezza albero h? n / 2h = 2 cioè h = log2n - 1

cn  (h+1)

(49)

49

Prova con sequenza telescopica Claim. T(n) = c n log

2

n.

Prova. Per n > 1:

!

T (n)

n = 2T (n / 2)

n + c

= T (n / 2)

n / 2 + c

= T (n / 4)

n / 4 + c + c

!

= T (n / n)

n / n + c +!+ c

log2n

" # $ % $

= c log

2

n

(assumiamo n potenza di 2)

! T(n) "

0 se n =1

T

(

#n / 2$

)

risolvi parte sinistra! " # # $ + T

(

%n / 2&

)

risolvi parte destra! " # # $ + cn

merge

% altrimenti '

( )

* )

! T (n / 2)

n / 2 = T (n / 4)

n / 4 + c

50

Prova per induzione Claim. T(n) = n log

2

n.

Prova. (per induzione su n)

 

Caso base: n = 1.

 

Ipotesi induttiva: T(n) = c n log

2

n.

 

Obiettivo: mostrare che T(2n) = c 2n log

2

(2n).

!

T (2n) = 2T (n) + c2n

= c2n log

2n + c2n

= c2n log (

2

(2n) "1 ) + c2n

= c2n log

2

(2n)

!

T(n) "

0 se n =1

T ( # n / 2 $ )

risolvi parte sinistra

! " # # $ + T ( % n / 2 & )

risolvi parte destra

! " # # $ + cn

merge

% altrimenti '

( )

* )

(assumiamo n potenza di 2)

51

Analisi della ricorrenza del Mergesort Claim. T(n) ≤ c n ⎡log n⎤. (logaritmo in base 2, cioè log = log

2

)

Prova. (per induzione su n)

 

Caso base: n = 1.

 

Definiamo n

1

= ⎣n / 2⎦ , n

2

= ⎡n / 2⎤.

 

Passo induzione: assumiamo che sia vero per 1, 2, ... , n–1.

!

T (n) " T (n1

) + T (n

2

) + cn

" cn

1

# log n

1

$ + cn

2

# log n

2

$ + cn

" cn

1

# log n

2

$ + cn

2

# log n

2

$ + cn

= cn log n #

2

$ + cn

" cn( log n # $ %1 ) + cn

= cn log n # $

n2

= !"

n / 2

#$

% ! 2

!"log n#$

/ 2

" #

$

= 2

!"log n#$

/ 2

& log n

2

% log n !" #$ '1

!

T(n) "

0 se n =1

T ( # n / 2 $ )

risolvi parte sinistra

! " # # $ + T ( % n / 2 & )

risolvi parte destra

! " # # $ + cn

merge

% altrimenti '

( )

* )

5.3 Counting Inversions

Riferimenti

Documenti correlati

Le giaciture di due rette sghembe hanno soltanto un punto in comune.. Il prodotto scalare di due versori pu` o

Sessione Estiva — Primo appello Esame scritto del 5

Sappiamo che se la molteplicit`a algebrica di un autovalore ´e uguale a 1 al- lora il corrispondente autospazio ha dimensione 1 (perch´e?), cio`e molteplicit`a algebrica e

NELLA TERZA FINESTRA TROVERAI UN MAGNIFICO UNICORNO BIANCO?. 1° 2° 3°

• prima le addizioni e le sottrazioni dentro le parentesi tonde (una dopo l'altra nell'ordine in cui sono scritte). • poi le addizioni e le sottrazioni dentro le

[r]

[r]

2 punti: risposta corretta, soluzione migliore, buona proprietà di linguaggio, esposizione chiara, leggibile, originale.. 1,8 punti: risposta corretta, soluzione migliore con