95
Algoritmos e Estruturas de Dados II HeapSort Prof. Tiago Eugenio de Melo [email protected] www.tiagodemelo.info

HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

Algoritmos e Estruturas de Dados II

HeapSortProf. Tiago Eugenio de Melo

[email protected]

www.tiagodemelo.info

Page 2: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

2/95

Observações

● As palavras com a fonte Courier indicam as palavras-reservadas da linguagem de programação.

Page 3: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

3/95

Referências

● Algorithms in a Nutshell. George T. Heineman, Gary Pollice, Stanley Selkow. O’Reilly Media, 2009.

● Projetos de Algoritmos – com implementações em Pascal e C. Nivio Ziviani. 2a edição. Thomson, 2005.

Page 4: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

4/95

HeapSort

Page 5: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

5/95

HeapSort

Page 6: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

6/95

HeapSort

● Utiliza o mesmo princípio de ordenação por seleção

Page 7: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

7/95

HeapSort

● Utiliza o mesmo princípio de ordenação por seleção– Selecione o menor item da lista.

Page 8: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

8/95

HeapSort

● Utiliza o mesmo princípio de ordenação por seleção– Selecione o menor item da lista.– Troque com o elemento da primeira posição.

Page 9: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

9/95

HeapSort

● Utiliza o mesmo princípio de ordenação por seleção– Selecione o menor item da lista.– Troque com o elemento da primeira posição.– Repita as duas primeiras operações com os n-1

elementos restantes.

Page 10: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

10/95

HeapSort

● Utiliza o mesmo princípio de ordenação por seleção– Selecione o menor item da lista.– Troque com o elemento da primeira posição.– Repita as duas primeiras operações com os n-1

elementos restantes.● Qual é o custo para encontrar o maior (ou

menor) item?

Page 11: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

11/95

HeapSort

● Utiliza o mesmo princípio de ordenação por seleção– Selecione o menor item da lista.– Troque com o elemento da primeira posição.– Repita as duas primeiras operações com os n-1

elementos restantes.● Qual é o custo para encontrar o maior (ou menor)

item?– Custa n-1 comparações.

Page 12: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

12/95

HeapSort

● Utiliza o mesmo princípio de ordenação por seleção– Selecione o menor item da lista.– Troque com o elemento da primeira posição.– Repita as duas primeiras operações com os n-1

elementos restantes.● Qual é o custo para encontrar o maior (ou menor)

item?– Custa n-1 comparações.– Como reduzir esse custo?

Page 13: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

13/95

HeapSort

● Utiliza o mesmo princípio de ordenação por seleção– Selecione o menor item da lista.– Troque com o elemento da primeira posição.– Repita as duas primeiras operações com os n-1 elementos

restantes.● Qual é o custo para encontrar o maior (ou menor) item?

– Custa n-1 comparações.– Como reduzir esse custo?

● Fila de prioridades.

Page 14: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

14/95

Fila de Prioridades

Page 15: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

15/95

Fila de Prioridades

Page 16: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

16/95

Fila de Prioridades

● É uma fila onde cada elemento possui uma prioridade.

Page 17: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

17/95

Fila de Prioridades

● É uma fila onde cada elemento possui uma prioridade.

● Essa prioridade determina a posição de um elemento na fila.

Page 18: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

18/95

Fila de Prioridades

● É uma fila onde cada elemento possui uma prioridade.

● Essa prioridade determina a posição de um elemento na fila.

● Numa fila comum, o elemento do início sempre é removido (FIFO – First In, First Out).

Page 19: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

19/95

Fila de Prioridades

● É uma fila onde cada elemento possui uma prioridade.

● Essa prioridade determina a posição de um elemento na fila.

● Numa fila comum, o elemento do início sempre é removido (FIFO – First In, First Out).

● Na fila com prioridades, o elemento removido é determinado pela prioridade.

Page 20: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

20/95

Fila de Prioridades

● É uma fila onde cada elemento possui uma prioridade.● Essa prioridade determina a posição de um elemento

na fila.● Numa fila comum, o elemento do início sempre é

removido (FIFO – First In, First Out).● Na fila com prioridades, o elemento removido é

determinado pela prioridade.● A fila de prioridades possui o critério de ordenação de

acordo com a prioridade.

Page 21: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

21/95

Fila de Prioridades

Page 22: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

22/95

Fila de Prioridades

● Aplicações:

Page 23: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

23/95

Fila de Prioridades

● Aplicações:– Fila de pacientes que aguardam por algum órgão.

Page 24: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

24/95

Fila de Prioridades

● Aplicações:– Fila de pacientes que aguardam por algum órgão.– Caminhos mínimos (algoritmo de Dijkstra).

Page 25: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

25/95

Fila de Prioridades

● Aplicações:– Fila de pacientes que aguardam por algum órgão.– Caminhos mínimos (algoritmo de Dijkstra).– Escalonamento de processos (SO).

Page 26: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

26/95

Fila de Prioridades

Page 27: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

27/95

Fila de Prioridades

● Existem vários tipos de implementação:

Page 28: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

28/95

Fila de Prioridades

● Existem vários tipos de implementação:– Lista encadeada.

Page 29: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

29/95

Fila de Prioridades

● Existem vários tipos de implementação:– Lista encadeada.– Heap.

Page 30: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

30/95

Fila de Prioridades

● Existem vários tipos de implementação:– Lista encadeada.– Heap.– Lista desordenada.

Page 31: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

31/95

Fila de Prioridades

● Existem vários tipos de implementação:– Lista encadeada.– Heap.– Lista desordenada.– Lista ordenada.

Page 32: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

32/95

Fila de Prioridades

● Existem vários tipos de implementação:– Lista encadeada.– Heap.– Lista desordenada.– Lista ordenada.

● A escolha do tipo de implementação depende da aplicação.

Page 33: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

33/95

Heap

Page 34: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

34/95

HeapSort

Page 35: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

35/95

HeapSort

● Fila de prioridades

Page 36: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

36/95

HeapSort

● Fila de prioridades– Representação inicial

Page 37: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

37/95

HeapSort

● Fila de prioridades– Representação inicial

● Lista linear ordenada.

Page 38: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

38/95

HeapSort

● Fila de prioridades– Representação inicial

● Lista linear ordenada.– Construir: O(n log n)

Page 39: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

39/95

HeapSort

● Fila de prioridades– Representação inicial

● Lista linear ordenada.– Construir: O(n log n)– Inserir: O(n)

Page 40: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

40/95

HeapSort

● Fila de prioridades– Representação inicial

● Lista linear ordenada.– Construir: O(n log n)– Inserir: O(n)– Retirar: O(1)

Page 41: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

41/95

HeapSort

● Fila de prioridades– Representação inicial

● Lista linear ordenada.– Construir: O(n log n)– Inserir: O(n)– Retirar: O(1)

● Lista linear não-ordenada

Page 42: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

42/95

HeapSort

● Fila de prioridades– Representação inicial

● Lista linear ordenada.– Construir: O(n log n)– Inserir: O(n)– Retirar: O(1)

● Lista linear não-ordenada– Construir: O(n)

Page 43: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

43/95

HeapSort

● Fila de prioridades– Representação inicial

● Lista linear ordenada.– Construir: O(n log n)– Inserir: O(n)– Retirar: O(1)

● Lista linear não-ordenada– Construir: O(n)– Inserir: O(1)

Page 44: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

44/95

HeapSort

● Fila de prioridades– Representação inicial

● Lista linear ordenada.– Construir: O(n log n)– Inserir: O(n)– Retirar: O(1)

● Lista linear não-ordenada– Construir: O(n)– Inserir: O(1)– Retirar: O(n)

Page 45: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

45/95

HeapSort

● Fila de prioridades– Representação inicial

● Lista linear ordenada.– Construir: O(n log n)– Inserir: O(n)– Retirar: O(1)

● Lista linear não-ordenada– Construir: O(n)– Inserir: O(1)– Retirar: O(n)

● Outra alternativa: heaps

Page 46: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

46/95

HeapSort

Page 47: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

47/95

HeapSort

● Algoritmo criado em 1964 por John Williams.

Page 48: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

48/95

HeapSort

● Algoritmo criado em 1964 por John Williams.● Definição de heap:

Page 49: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

49/95

HeapSort

● Algoritmo criado em 1964 por John Williams.● Definição de heap:

– Sequência de elementos com chaves

Page 50: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

50/95

HeapSort

● Algoritmo criado em 1964 por John Williams.● Definição de heap:

– Sequência de elementos com chaves

c[1], c[2], …, c[n]

Page 51: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

51/95

HeapSort

● Algoritmo criado em 1964 por John Williams.● Definição de heap:

– Sequência de elementos com chaves

c[1], c[2], …, c[n]

tal que

Page 52: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

52/95

HeapSort

● Algoritmo criado em 1964 por John Williams.● Definição de heap:

– Sequência de elementos com chaves

c[1], c[2], …, c[n]

tal que

c[i] >= c[2.i],

Page 53: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

53/95

HeapSort

● Algoritmo criado em 1964 por John Williams.● Definição de heap:

– Sequência de elementos com chaves

c[1], c[2], …, c[n]

tal que

c[i] >= c[2.i],

c[i] >= c[2.i + 1],

Page 54: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

54/95

HeapSort

● Algoritmo criado em 1964 por John Williams.● Definição de heap:

– Sequência de elementos com chaves

c[1], c[2], …, c[n]

tal que

c[i] >= c[2.i],

c[i] >= c[2.i + 1],

para todo i = 1, 2, …, n/2.

Page 55: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

55/95

HeapSort

● Exemplo:

50 4050 30 20 25 10 15

1 2 3 4 5 6 7

Page 56: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

56/95

HeapSort

● Exemplo:

50 4050 30 20 25 10 15

50 4050 30 20 25 10 15

1 2 3 4 5 6 7

Page 57: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

57/95

HeapSort

● Exemplo:

50 4050 30 20 25 10 15

50 4050 30 20 25 10 15

1 2 3 4 5 6 7

Page 58: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

58/95

HeapSort

● Exemplo:

50 4050 30 20 25 10 15

50 4050 30 20 25 10 15

1 2 3 4 5 6 7

Page 59: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

59/95

HeapSort

● Exemplo:

50 4050 30 20 25 10 15

50 4050 30 20 25 10 15

1 2 3 4 5 6 7

Page 60: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

60/95

HeapSort

● Exemplo:

50 4050 30 20 25 10 15

50 4050 30 20 25 10 15

1 2 3 4 5 6 7

Page 61: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

61/95

HeapSort

● Exemplo:

50 4050 30 20 25 10 15

50 4050 30 20 25 10 15

1 2 3 4 5 6 7

Page 62: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

62/95

HeapSort

● Exemplo:

50 4050 30 20 25 10 15

50 4050 30 20 25 10 15

1 2 3 4 5 6 7

Page 63: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

63/95

HeapSort

● Essa ordenação pode ser visualizada como uma árvore binária completa:

Page 64: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

64/95

HeapSort

● Essa ordenação pode ser visualizada como uma árvore binária completa:

50

30

10

40

20 25 15

Page 65: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

65/95

HeapSort

Page 66: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

66/95

HeapSort

● Portanto, um heap é uma árvore binária completa na qual cada nó satisfaz a condição do heap apresentada na sua definição.

Page 67: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

67/95

HeapSort

● Portanto, um heap é uma árvore binária completa na qual cada nó satisfaz a condição do heap apresentada na sua definição.

● Os elementos no heap não estão perfeitamente ordenados.

Page 68: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

68/95

HeapSort

● Portanto, um heap é uma árvore binária completa na qual cada nó satisfaz a condição do heap apresentada na sua definição.

● Os elementos no heap não estão perfeitamente ordenados.

● Sabe-se apenas que o maior elemento está no nó raiz e que, para cada nó, todos os seus descendentes não são maiores que o elemento raiz.

Page 69: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

69/95

HeapSort

Page 70: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

70/95

HeapSort

● Tenta-se evitar a utilização real de uma árvore.

Page 71: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

71/95

HeapSort

● Tenta-se evitar a utilização real de uma árvore.● A ideia é utilizar a abordagem de heap

representando uma árvore como uma lista.

Page 72: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

72/95

HeapSort

● Tenta-se evitar a utilização real de uma árvore.● A ideia é utilizar a abordagem de heap

representando uma árvore como uma lista.

Page 73: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

73/95

HeapSort

Page 74: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

74/95

HeapSort

● Por que usar um heap é importante?

Page 75: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

75/95

HeapSort

● Por que usar um heap é importante?– Descobrir quem é o maior elemento é O(1).

Page 76: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

76/95

HeapSort

● Por que usar um heap é importante?– Descobrir quem é o maior elemento é O(1).– Se o valor da raiz for alterado, o heap pode ser

refeito rapidamente O(log n).

Page 77: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

77/95

HeapSort

Page 78: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

78/95

HeapSort

● Algoritmo

Page 79: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

79/95

HeapSort

● Algoritmo– Transformar uma lista L em um heap H.

Page 80: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

80/95

HeapSort

● Algoritmo– Transformar uma lista L em um heap H.– Pegar o maior elemento de H e trocar com a

posição L[máx].

Page 81: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

81/95

HeapSort

● Algoritmo– Transformar uma lista L em um heap H.– Pegar o maior elemento de H e trocar com a

posição L[máx].– Repetir os passos anteriores com os demais

elementos.

Page 82: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

82/95

HeapSort

Page 83: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

83/95

HeapSort

● Análise:

Page 84: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

84/95

HeapSort

● Análise:– O algoritmo aparenta não ser eficiente.

Page 85: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

85/95

HeapSort

● Análise:– O algoritmo aparenta não ser eficiente.– Porém, refazer o heap gasta cerca de log n

operações (pior caso).

Page 86: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

86/95

HeapSort

● Análise:– O algoritmo aparenta não ser eficiente.– Porém, refazer o heap gasta cerca de log n

operações (pior caso).– Portanto, heapsort é proporcional a n log n no

pior caso.

Page 87: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

87/95

HeapSort

● Análise:– O algoritmo aparenta não ser eficiente.– Porém, refazer o heap gasta cerca de log n

operações (pior caso).– Portanto, heapsort é proporcional a n log n no

pior caso.– O Quicksort é, em média, cerca de duas vezes

mais rápido que o HeapSort.

Page 88: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

88/95

HeapSort

● Análise:– O algoritmo aparenta não ser eficiente.– Porém, refazer o heap gasta cerca de log n operações

(pior caso).– Portanto, heapsort é proporcional a n log n no pior

caso.– O Quicksort é, em média, cerca de duas vezes mais

rápido que o HeapSort.– HeapSort é melhor que o ShellSort para grandes

arquivos.

Page 89: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

89/95

HeapSort

Page 90: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

90/95

HeapSort

● Pontos positivos

Page 91: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

91/95

HeapSort

● Pontos positivos– O(n log n) qualquer que seja a entrada.

Page 92: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

92/95

HeapSort

● Pontos positivos– O(n log n) qualquer que seja a entrada.

● Pontos negativos

Page 93: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

93/95

HeapSort

● Pontos positivos– O(n log n) qualquer que seja a entrada.

● Pontos negativos– Método não estável.

Page 94: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

94/95

Exercícios

● Qual é a diferença entre heap máximo e heap mínimo? Existe diferença de eficiência entre eles?

● Implemente em Python uma função para reconstruir o heap, de tal maneira que as suas propriedades sejam mantidas.

Page 95: HeapSort - Tiago de Melotiagodemelo.info/wp-content/uploads/2019/08/heap-sort.pdf · 2019. 8. 27. · HeapSort Análise: – O algoritmo aparenta não ser eficiente. – Porém, refazer

95/95

Exercícios

● Dado o seguinte conjunto de elementos X={8, 6, 7, 4, 5, 3, 2, 1}, desenhe o heap (árvore).