análise de algoritmos slides de paulo feofiloffcris/aulas/08_1_338/slides/aula9.pdf · consumo de...

40
Análise de Algoritmos Slides de Paulo Feofiloff [com erros do coelho e agora também da cris] Algoritmos – p.

Upload: others

Post on 22-Aug-2020

6 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Análise de Algoritmos Slides de Paulo Feofiloffcris/aulas/08_1_338/slides/aula9.pdf · Consumo de tempo esperado Suponha A[p..r] permutação de 1..n. Xab = número de comparações

Análise de Algoritmos

Slides de Paulo Feofiloff[com erros do coelho e agora também da cris]

Algoritmos – p.

Page 2: Análise de Algoritmos Slides de Paulo Feofiloffcris/aulas/08_1_338/slides/aula9.pdf · Consumo de tempo esperado Suponha A[p..r] permutação de 1..n. Xab = número de comparações

Quicksort aleatorizado

CLRS 7.4

Algoritmos – p.

Page 3: Análise de Algoritmos Slides de Paulo Feofiloffcris/aulas/08_1_338/slides/aula9.pdf · Consumo de tempo esperado Suponha A[p..r] permutação de 1..n. Xab = número de comparações

Quicksort aleatorizadoPARTICIONE-ALEA(A, p, d)1 i← RANDOM (p, d)2 A[i]↔ A[d]3 devolva PARTICIONE (A, p, d)

QUICKSORT-ALE (A, p, d)1 se p < d2 então q ← PARTICIONE-ALEA (A, p, d)3 QUICKSORT-ALE (A, p, q − 1)4 QUICKSORT-ALE (A, q + 1, d)

Análise do consumo medio?Basta contar o número esperado de comparações nalinha 4 do PARTICIONE

Algoritmos – p.

Page 4: Análise de Algoritmos Slides de Paulo Feofiloffcris/aulas/08_1_338/slides/aula9.pdf · Consumo de tempo esperado Suponha A[p..r] permutação de 1..n. Xab = número de comparações

ParticioneRearranja A[p . . d] de modo que p ≤ q ≤ d eA[p . . q−1] ≤ A[q] < A[q+1 . . d]

PARTICIONE (A, p, d)1 x← A[d] � x é o “pivô”2 i← p−13 para j ← p até d− 1 faça4 se A[j] ≤ x5 então i← i + 16 A[i]↔ A[j]7 A[i+1]↔ A[d]8 devolva i + 1

Invariantes: no começo de cada iteração de 3–6,(i0) A[p . . i] ≤ x (i1) A[i+1 . . j−1] > x (i2) A[d] = x

Algoritmos – p.

Page 5: Análise de Algoritmos Slides de Paulo Feofiloffcris/aulas/08_1_338/slides/aula9.pdf · Consumo de tempo esperado Suponha A[p..r] permutação de 1..n. Xab = número de comparações

Consumo de tempo esperado

Suponha A[p . . r] permutação de 1 . . n.

Xab = número de comparações entre a e b

na linha 4 de PARTICIONE

Queremos calcular

X = total de comparações “A[j] ≤ x”

=

n−1∑

a=1

n∑

b=a+1

Xab

Algoritmos – p.

Page 6: Análise de Algoritmos Slides de Paulo Feofiloffcris/aulas/08_1_338/slides/aula9.pdf · Consumo de tempo esperado Suponha A[p..r] permutação de 1..n. Xab = número de comparações

Consumo de tempo esperadoSupondo a < b,

Xab =

{

1 se primeiro pivô em {a, . . . , b} é a ou b

0 caso contrário

Qual a probabilidade de Xab valer 1?

Algoritmos – p.

Page 7: Análise de Algoritmos Slides de Paulo Feofiloffcris/aulas/08_1_338/slides/aula9.pdf · Consumo de tempo esperado Suponha A[p..r] permutação de 1..n. Xab = número de comparações

Consumo de tempo esperadoSupondo a < b,

Xab =

{

1 se primeiro pivô em {a, . . . , b} é a ou b

0 caso contrário

Qual a probabilidade de Xab valer 1?

Pr {Xab=1} =1

b− a + 1+

1

b− a + 1= E[Xab]

Algoritmos – p.

Page 8: Análise de Algoritmos Slides de Paulo Feofiloffcris/aulas/08_1_338/slides/aula9.pdf · Consumo de tempo esperado Suponha A[p..r] permutação de 1..n. Xab = número de comparações

Consumo de tempo esperadoSupondo a < b,

Xab =

{

1 se primeiro pivô em {a, . . . , b} é a ou b

0 caso contrário

Qual a probabilidade de Xab valer 1?

Pr {Xab=1} =1

b− a + 1+

1

b− a + 1= E[Xab]

X =n−1∑

a=1

n∑

b=a+1

Xab

E[X] = ????

Algoritmos – p.

Page 9: Análise de Algoritmos Slides de Paulo Feofiloffcris/aulas/08_1_338/slides/aula9.pdf · Consumo de tempo esperado Suponha A[p..r] permutação de 1..n. Xab = número de comparações

Consumo de tempo esperado

E[X] =n−1∑

a=1

n∑

b=a+1

E[Xab]

=n−1∑

a=1

n∑

b=a+1

Pr {Xab=1}

=n−1∑

a=1

n∑

b=a+1

2

b− a + 1

=n−1∑

a=1

n−a∑

k=1

2

k + 1

<

n−1∑

a=1

2(

1

1+ 1

2+ · · · + 1

n

)

< 2n(

1

1+ 1

2+ · · · + 1

n

)

< 2n (1 + ln n) CLRS (A.7), p.1060

Algoritmos – p.

Page 10: Análise de Algoritmos Slides de Paulo Feofiloffcris/aulas/08_1_338/slides/aula9.pdf · Consumo de tempo esperado Suponha A[p..r] permutação de 1..n. Xab = número de comparações

Conclusões

O consumo de tempo esperado do algoritmoQUICKSORT-ALE é O(n log n).

Do exercício 7.4-4 do CLRS temos que

O consumo de tempo esperado do algoritmoQUICKSORT-ALE é Θ(n log n).

Algoritmos – p.

Page 11: Análise de Algoritmos Slides de Paulo Feofiloffcris/aulas/08_1_338/slides/aula9.pdf · Consumo de tempo esperado Suponha A[p..r] permutação de 1..n. Xab = número de comparações

Heap

Um vetor A[1 . . . m] é um (max-)heap se

A[⌊i/2⌋] ≥ A[i]

para todo i = 2, 3, . . . ,m.

De uma forma mais geral, A[j . . . m] é um heap se

A[⌊i/2⌋] ≥ A[i]

para todo i = 2j, 2j + 1, 4j, . . . , 4j + 3, 8j, . . . , 8j + 7, . . ..Neste caso também diremos que a subárvore com raiz j éum heap.

Algoritmos – p.

Page 12: Análise de Algoritmos Slides de Paulo Feofiloffcris/aulas/08_1_338/slides/aula9.pdf · Consumo de tempo esperado Suponha A[p..r] permutação de 1..n. Xab = número de comparações

Exemplo

Interferência!

1

1

2

2

3

3

4

4

5

5

6

6

7

7

8

8

9

9 10

10

11

11

12

12

nível

0

1

2

3

51

51

46

46

17

17

34

34

41

41

15

15

14

14

23

23

30

30

21

21 10

10 12

12

Algoritmos – p. 10

Page 13: Análise de Algoritmos Slides de Paulo Feofiloffcris/aulas/08_1_338/slides/aula9.pdf · Consumo de tempo esperado Suponha A[p..r] permutação de 1..n. Xab = número de comparações

Desce-HeapRecebe A[1 . .m] e i ≥ 1 tais que subárvores com raiz 2i e2i + 1 são heaps e rearranja A de modo que subárvore comraiz i seja heap.

DESCE-HEAP (A,m, i)1 e← 2i2 d← 2i + 13 se e ≤ m e A[e] > A[i]4 então maior ← e5 senão maior ← i6 se d ≤ m e A[d] > A[maior ]7 então maior ← d8 se maior 6= i9 então A[i]↔ A[maior ]

10 DESCE-HEAP (A,m,maior )

Algoritmos – p. 11

Page 14: Análise de Algoritmos Slides de Paulo Feofiloffcris/aulas/08_1_338/slides/aula9.pdf · Consumo de tempo esperado Suponha A[p..r] permutação de 1..n. Xab = número de comparações

Simulação

1

1

2

2

3

3

4

4

5

5

6

6

7

7

8

8

9

9 10

10

11

11

12

12

nível

0

1

2

3

13

13

46

46

17

17

34

34

41

41

15

15

14

14

23

23

30

30

21

21 10

10 12

12

Algoritmos – p. 12

Page 15: Análise de Algoritmos Slides de Paulo Feofiloffcris/aulas/08_1_338/slides/aula9.pdf · Consumo de tempo esperado Suponha A[p..r] permutação de 1..n. Xab = número de comparações

Simulação

1

1

2

2

3

3

4

4

5

5

6

6

7

7

8

8

9

9 10

10

11

11

12

12

nível

0

1

2

3

46

46

13

13

17

17

34

34

41

41

15

15

14

14

23

23

30

30

21

21 10

10 12

12

Algoritmos – p. 13

Page 16: Análise de Algoritmos Slides de Paulo Feofiloffcris/aulas/08_1_338/slides/aula9.pdf · Consumo de tempo esperado Suponha A[p..r] permutação de 1..n. Xab = número de comparações

Simulação

1

1

2

2

3

3

4

4

5

5

6

6

7

7

8

8

9

9 10

10

11

11

12

12

nível

0

1

2

3

46

46

41

41

17

17

34

34

13

13

15

15

14

14

23

23

30

30

21

21 10

10 12

12

Algoritmos – p. 14

Page 17: Análise de Algoritmos Slides de Paulo Feofiloffcris/aulas/08_1_338/slides/aula9.pdf · Consumo de tempo esperado Suponha A[p..r] permutação de 1..n. Xab = número de comparações

Simulação

1

1

2

2

3

3

4

4

5

5

6

6

7

7

8

8

9

9 10

10

11

11

12

12

nível

0

1

2

3

46

46

41

41

17

17

34

34

21

21

15

15

14

14

23

23

30

30

13

13 10

10 12

12

Algoritmos – p. 15

Page 18: Análise de Algoritmos Slides de Paulo Feofiloffcris/aulas/08_1_338/slides/aula9.pdf · Consumo de tempo esperado Suponha A[p..r] permutação de 1..n. Xab = número de comparações

Simulação

1

1

2

2

3

3

4

4

5

5

6

6

7

7

8

8

9

9 10

10

11

11

12

12

nível

0

1

2

3

46

46

41

41

17

17

34

34

21

21

15

15

14

14

23

23

30

30

13

13 10

10 12

12

Algoritmos – p. 16

Page 19: Análise de Algoritmos Slides de Paulo Feofiloffcris/aulas/08_1_338/slides/aula9.pdf · Consumo de tempo esperado Suponha A[p..r] permutação de 1..n. Xab = número de comparações

Consumo de tempoh := altura de i = ⌊lg m+1

i+1⌋

T (h) := consumo de tempo no pior caso

linha todas as execuções da linha1-3 = 3 Θ(1)

4-5 = 2 O(1)

6 = Θ(1)

7 = O(1)

8 = Θ(1)

9 = O(1)

10 ≤ T (h− 1)

total ≤ T (h− 1) + Θ(5) + O(2)

Algoritmos – p. 17

Page 20: Análise de Algoritmos Slides de Paulo Feofiloffcris/aulas/08_1_338/slides/aula9.pdf · Consumo de tempo esperado Suponha A[p..r] permutação de 1..n. Xab = número de comparações

Consumo de tempoh := altura de i = ⌊lg m+1

i+1⌋

T (h) := consumo de tempo no pior caso

Recorrência associada:

T (h) ≤ T (h− 1) + Θ(1),

pois altura de maior é h− 1.

Algoritmos – p. 18

Page 21: Análise de Algoritmos Slides de Paulo Feofiloffcris/aulas/08_1_338/slides/aula9.pdf · Consumo de tempo esperado Suponha A[p..r] permutação de 1..n. Xab = número de comparações

Consumo de tempoh := altura de i = ⌊lg m+1

i+1⌋

T (h) := consumo de tempo no pior caso

Recorrência associada:

T (h) ≤ T (h− 1) + Θ(1),

pois altura de maior é h− 1.

Solução assintótica: T (n) é ???.

Algoritmos – p. 18

Page 22: Análise de Algoritmos Slides de Paulo Feofiloffcris/aulas/08_1_338/slides/aula9.pdf · Consumo de tempo esperado Suponha A[p..r] permutação de 1..n. Xab = número de comparações

Consumo de tempoh := altura de i = ⌊lg m+1

i+1⌋

T (h) := consumo de tempo no pior caso

Recorrência associada:

T (h) ≤ T (h− 1) + Θ(1),

pois altura de maior é h− 1.

Solução assintótica: T (n) é O(h).

Como h ≤ lg m, podemos dizer que:

O consumo de tempo do algoritmo DESCE-HEAP éO(lg m) (ou melhor ainda, O(lg m+1

i+1)).

Algoritmos – p. 18

Page 23: Análise de Algoritmos Slides de Paulo Feofiloffcris/aulas/08_1_338/slides/aula9.pdf · Consumo de tempo esperado Suponha A[p..r] permutação de 1..n. Xab = número de comparações

Construção de um heap

1

1

2

2

3

3

4

4

5

5

6

6

7

7

8

8

9

9 10

10

11

11

12

12

nível

0

1

2

3

14

14

13

13

34

34

17

17

15

15

10

10

46

46

23

23

12

12

41

41 30

30 21

21

Algoritmos – p. 19

Page 24: Análise de Algoritmos Slides de Paulo Feofiloffcris/aulas/08_1_338/slides/aula9.pdf · Consumo de tempo esperado Suponha A[p..r] permutação de 1..n. Xab = número de comparações

Construção de um heap

1

1

2

2

3

3

4

4

5

5

6

6

7

7

8

8

9

9 10

10

11

11

12

12

nível

0

1

2

3

14

14

13

13

34

34

17

17

15

15

10

10

46

46

23

23

12

12

41

41 30

30 21

21

Algoritmos – p. 20

Page 25: Análise de Algoritmos Slides de Paulo Feofiloffcris/aulas/08_1_338/slides/aula9.pdf · Consumo de tempo esperado Suponha A[p..r] permutação de 1..n. Xab = número de comparações

Construção de um heap

1

1

2

2

3

3

4

4

5

5

6

6

7

7

8

8

9

9 10

10

11

11

12

12

nível

0

1

2

3

14

14

13

13

34

34

17

17

15

15

21

21

46

46

23

23

12

12

41

41 30

30 10

10

Algoritmos – p. 21

Page 26: Análise de Algoritmos Slides de Paulo Feofiloffcris/aulas/08_1_338/slides/aula9.pdf · Consumo de tempo esperado Suponha A[p..r] permutação de 1..n. Xab = número de comparações

Construção de um heap

1

1

2

2

3

3

4

4

5

5

6

6

7

7

8

8

9

9 10

10

11

11

12

12

nível

0

1

2

3

14

14

13

13

34

34

17

17

15

15

21

21

46

46

23

23

12

12

41

41 30

30 10

10

Algoritmos – p. 22

Page 27: Análise de Algoritmos Slides de Paulo Feofiloffcris/aulas/08_1_338/slides/aula9.pdf · Consumo de tempo esperado Suponha A[p..r] permutação de 1..n. Xab = número de comparações

Construção de um heap

1

1

2

2

3

3

4

4

5

5

6

6

7

7

8

8

9

9 10

10

11

11

12

12

nível

0

1

2

3

14

14

13

13

34

34

17

17

41

41

21

21

46

46

23

23

12

12

15

15 30

30 10

10

Algoritmos – p. 23

Page 28: Análise de Algoritmos Slides de Paulo Feofiloffcris/aulas/08_1_338/slides/aula9.pdf · Consumo de tempo esperado Suponha A[p..r] permutação de 1..n. Xab = número de comparações

Construção de um heap

1

1

2

2

3

3

4

4

5

5

6

6

7

7

8

8

9

9 10

10

11

11

12

12

nível

0

1

2

3

14

14

13

13

34

34

17

17

41

41

21

21

46

46

23

23

12

12

15

15 30

30 10

10

Algoritmos – p. 24

Page 29: Análise de Algoritmos Slides de Paulo Feofiloffcris/aulas/08_1_338/slides/aula9.pdf · Consumo de tempo esperado Suponha A[p..r] permutação de 1..n. Xab = número de comparações

Construção de um heap

1

1

2

2

3

3

4

4

5

5

6

6

7

7

8

8

9

9 10

10

11

11

12

12

nível

0

1

2

3

14

14

13

13

34

34

23

23

41

41

21

21

46

46

17

17

12

12

15

15 30

30 10

10

Algoritmos – p. 25

Page 30: Análise de Algoritmos Slides de Paulo Feofiloffcris/aulas/08_1_338/slides/aula9.pdf · Consumo de tempo esperado Suponha A[p..r] permutação de 1..n. Xab = número de comparações

Construção de um heap

1

1

2

2

3

3

4

4

5

5

6

6

7

7

8

8

9

9 10

10

11

11

12

12

nível

0

1

2

3

14

14

13

13

34

34

23

23

41

41

21

21

46

46

17

17

12

12

15

15 30

30 10

10

Algoritmos – p. 26

Page 31: Análise de Algoritmos Slides de Paulo Feofiloffcris/aulas/08_1_338/slides/aula9.pdf · Consumo de tempo esperado Suponha A[p..r] permutação de 1..n. Xab = número de comparações

Construção de um heap

1

1

2

2

3

3

4

4

5

5

6

6

7

7

8

8

9

9 10

10

11

11

12

12

nível

0

1

2

3

14

14

13

13

46

46

23

23

41

41

21

21

34

34

17

17

12

12

15

15 30

30 10

10

Algoritmos – p. 27

Page 32: Análise de Algoritmos Slides de Paulo Feofiloffcris/aulas/08_1_338/slides/aula9.pdf · Consumo de tempo esperado Suponha A[p..r] permutação de 1..n. Xab = número de comparações

Construção de um heap

1

1

2

2

3

3

4

4

5

5

6

6

7

7

8

8

9

9 10

10

11

11

12

12

nível

0

1

2

3

14

14

13

13

46

46

23

23

41

41

21

21

34

34

17

17

12

12

15

15 30

30 10

10

Algoritmos – p. 28

Page 33: Análise de Algoritmos Slides de Paulo Feofiloffcris/aulas/08_1_338/slides/aula9.pdf · Consumo de tempo esperado Suponha A[p..r] permutação de 1..n. Xab = número de comparações

Construção de um heap

1

1

2

2

3

3

4

4

5

5

6

6

7

7

8

8

9

9 10

10

11

11

12

12

nível

0

1

2

3

14

14

41

41

46

46

23

23

13

13

21

21

34

34

17

17

12

12

15

15 30

30 10

10

Algoritmos – p. 29

Page 34: Análise de Algoritmos Slides de Paulo Feofiloffcris/aulas/08_1_338/slides/aula9.pdf · Consumo de tempo esperado Suponha A[p..r] permutação de 1..n. Xab = número de comparações

Construção de um heap

1

1

2

2

3

3

4

4

5

5

6

6

7

7

8

8

9

9 10

10

11

11

12

12

nível

0

1

2

3

14

14

41

41

46

46

23

23

30

30

21

21

34

34

17

17

12

12

15

15 13

13 10

10

Algoritmos – p. 30

Page 35: Análise de Algoritmos Slides de Paulo Feofiloffcris/aulas/08_1_338/slides/aula9.pdf · Consumo de tempo esperado Suponha A[p..r] permutação de 1..n. Xab = número de comparações

Construção de um heap

1

1

2

2

3

3

4

4

5

5

6

6

7

7

8

8

9

9 10

10

11

11

12

12

nível

0

1

2

3

14

14

41

41

46

46

23

23

30

30

21

21

34

34

17

17

12

12

15

15 13

13 10

10

Algoritmos – p. 31

Page 36: Análise de Algoritmos Slides de Paulo Feofiloffcris/aulas/08_1_338/slides/aula9.pdf · Consumo de tempo esperado Suponha A[p..r] permutação de 1..n. Xab = número de comparações

Construção de um heap

1

1

2

2

3

3

4

4

5

5

6

6

7

7

8

8

9

9 10

10

11

11

12

12

nível

0

1

2

3

46

46

41

41

14

14

23

23

30

30

21

21

34

34

17

17

12

12

15

15 13

13 10

10

Algoritmos – p. 32

Page 37: Análise de Algoritmos Slides de Paulo Feofiloffcris/aulas/08_1_338/slides/aula9.pdf · Consumo de tempo esperado Suponha A[p..r] permutação de 1..n. Xab = número de comparações

Construção de um heap

1

1

2

2

3

3

4

4

5

5

6

6

7

7

8

8

9

9 10

10

11

11

12

12

nível

0

1

2

3

46

46

41

41

34

34

23

23

30

30

21

21

14

14

17

17

12

12

15

15 13

13 10

10

Algoritmos – p. 33

Page 38: Análise de Algoritmos Slides de Paulo Feofiloffcris/aulas/08_1_338/slides/aula9.pdf · Consumo de tempo esperado Suponha A[p..r] permutação de 1..n. Xab = número de comparações

Construção de um heap

1

1

2

2

3

3

4

4

5

5

6

6

7

7

8

8

9

9 10

10

11

11

12

12

nível

0

1

2

3

46

46

41

41

34

34

23

23

30

30

21

21

14

14

17

17

12

12

15

15 13

13 10

10

Algoritmos – p. 34

Page 39: Análise de Algoritmos Slides de Paulo Feofiloffcris/aulas/08_1_338/slides/aula9.pdf · Consumo de tempo esperado Suponha A[p..r] permutação de 1..n. Xab = número de comparações

Construção de um heapRecebe um vetor A[1 . . n] e rearranja A para que seja heap.

CONSTRÓI-HEAP (A, n)2 para i← ⌊n/2⌋ decrescendo até 1 faça3 DESCE-HEAP (A, n, i)

Relação invariante:

(i0) no início de cada iteração, i + 1, . . . , n são raízes deheaps.

T (n) := consumo de tempo no pior caso

Algoritmos – p. 35

Page 40: Análise de Algoritmos Slides de Paulo Feofiloffcris/aulas/08_1_338/slides/aula9.pdf · Consumo de tempo esperado Suponha A[p..r] permutação de 1..n. Xab = número de comparações

Construção de um heapRecebe um vetor A[1 . . n] e rearranja A para que seja heap.

CONSTRÓI-HEAP (A, n)2 para i← ⌊n/2⌋ decrescendo até 1 faça3 DESCE-HEAP (A, n, i)

Relação invariante:

(i0) no início de cada iteração, i + 1, . . . , n são raízes deheaps.

T (n) := consumo de tempo no pior caso

Análise grosseira: T (n) é n

2O(lg n) = O(n lg n).

Análise mais cuidadosa: T (n) é ????.

Algoritmos – p. 35