• Nenhum resultado encontrado

An´alise de algoritmos Heapsort Prof. Fl´avio Rog´erio Uber Autor: Prof. Marco Aur´elio Lopes Barbosa (UEM/DIN)

N/A
N/A
Protected

Academic year: 2022

Share "An´alise de algoritmos Heapsort Prof. Fl´avio Rog´erio Uber Autor: Prof. Marco Aur´elio Lopes Barbosa (UEM/DIN)"

Copied!
41
0
0

Texto

(1)

An´ alise de algoritmos

Heapsort

Prof. Fl´avio Rog´erio Uber

Autor: Prof. Marco Aur´ elio Lopes Barbosa (UEM/DIN)

(2)

Conte´ udo

Introduc¸˜ao

A estrutura de dados heap

Definic ¸˜ ao

Manutenc ¸˜ ao da propriedade de heap A construc ¸˜ ao de um heap

O algoritmo heapsort Exerc´ıcios

Referˆencias

(3)

Introduc¸˜ ao

I

Heapsort (ordenac ¸˜ ao por monte) ´ e um algoritmo de ordenac ¸˜ ao

I

Caracter´ısticas

I O tempo de execuc¸˜ao ´eO(nlgn)(como a ordenac¸˜ao por intercalac¸˜ao)

I Ordenac¸˜ao local (como a ordenac¸˜ao por inserc¸˜ao)

I Usa uma estrutura de dados chamada heap

(4)

A estrutura de dados heap

I

A estrutura de dados

heap

(bin´ ario) ´ e um array que pode ser visto como uma ´ arvore bin´ aria praticamente completa

I Cada n´o da ´arvore corresponde ao elemento do array que armazena o valor do n´o

I A ´arvore est´a preenchida em todos os n´ıveis, exceto talvez no n´ıvel mais baixo, que ´e preenchido a partir da esquerda

I

Um array A que representa um heap tem dois atributos

I A.comprimentoque ´e o n´umero de elementos do array

I A.tamanho-do-heapque ´e o n´umero de elementos no heap armazenado emA(A.tamanho-do-heap ≤A.comprimento)

I

A raiz da ´ arvore ´ e A[1]

I

Dado o ´ındice

i

de um n´ o, os ´ındice de seu pai, do filho a esquerda e do filho a direita podem ser calculados da forma

I parent(i) = bi/2c

I left(i) = 2i

I right(i) = 2i + 1

Autor: Prof. Marco Aur´elio Lopes Barbosa (UEM/DIN) 4 / 24

(5)

A estrutura de dados heap

I

A estrutura de dados

heap

(bin´ ario) ´ e um array que pode ser visto como uma ´ arvore bin´ aria praticamente completa

I Cada n´o da ´arvore corresponde ao elemento do array que armazena o valor do n´o

I A ´arvore est´a preenchida em todos os n´ıveis, exceto talvez no n´ıvel mais baixo, que ´e preenchido a partir da esquerda

I

Um array A que representa um heap tem dois atributos

I A.comprimentoque ´e o n´umero de elementos do array

I A.tamanho-do-heapque ´e o n´umero de elementos no heap armazenado emA(A.tamanho-do-heap ≤A.comprimento)

I

A raiz da ´ arvore ´ e A[1]

I

Dado o ´ındice

i

de um n´ o, os ´ındice de seu pai, do filho a esquerda e do filho a direita podem ser calculados da forma

I parent(i) = bi/2c

I left(i) = 2i

I right(i) = 2i + 1

(6)

A estrutura de dados heap

I

A estrutura de dados

heap

(bin´ ario) ´ e um array que pode ser visto como uma ´ arvore bin´ aria praticamente completa

I Cada n´o da ´arvore corresponde ao elemento do array que armazena o valor do n´o

I A ´arvore est´a preenchida em todos os n´ıveis, exceto talvez no n´ıvel mais baixo, que ´e preenchido a partir da esquerda

I

Um array A que representa um heap tem dois atributos

I A.comprimentoque ´e o n´umero de elementos do array

I A.tamanho-do-heapque ´e o n´umero de elementos no heap armazenado emA(A.tamanho-do-heap ≤A.comprimento)

I

A raiz da ´ arvore ´ e A[1]

I

Dado o ´ındice

i

de um n´ o, os ´ındice de seu pai, do filho a esquerda e do filho a direita podem ser calculados da forma

I parent(i) = bi/2c

I left(i) = 2i

I right(i) = 2i + 1

Autor: Prof. Marco Aur´elio Lopes Barbosa (UEM/DIN) 4 / 24

(7)

A estrutura de dados heap

I

A estrutura de dados

heap

(bin´ ario) ´ e um array que pode ser visto como uma ´ arvore bin´ aria praticamente completa

I Cada n´o da ´arvore corresponde ao elemento do array que armazena o valor do n´o

I A ´arvore est´a preenchida em todos os n´ıveis, exceto talvez no n´ıvel mais baixo, que ´e preenchido a partir da esquerda

I

Um array A que representa um heap tem dois atributos

I A.comprimentoque ´e o n´umero de elementos do array

I A.tamanho-do-heapque ´e o n´umero de elementos no heap armazenado emA(A.tamanho-do-heap ≤A.comprimento)

I

A raiz da ´ arvore ´ e A[1]

I

Dado o ´ındice

i

de um n´ o, os ´ındice de seu pai, do filho a esquerda e do filho a direita podem ser calculados da forma

I parent(i) = bi/2c

I left(i) = 2i

I right(i) = 2i + 1

(8)

Exemplo

Autor: Prof. Marco Aur´elio Lopes Barbosa (UEM/DIN) 5 / 24

(9)

A estrutura de dados heap

I

Existem dois tipos de heap

I heap m´aximo

I heap m´ınimo

I

Em ambos os tipos, os valores nos n´ os satisfazem uma

propriedade de heap

I Em um heap m´aximo, apropriedade de heap m´aximo´e que, para todo n´oi diferente da raiz A[parent(i)] ≥ A[i]

I Em um heap m´ınimo, apropriedade de heap m´ınimo´e que, para todo n´oi diferente da raiz A[parent(i)] ≤ A[i]

I

Visualizando o heap como uma ´ arvore, definimos

I aaltura de um n´o como o n´umero de arestas no caminho descendente simples mais longo deste o o n´o at´e uma folha

I aaltura do heapcomo a altura de sua raiz

I a altura de um heap ´eΘ(lgn)

(10)

A estrutura de dados heap

I

Existem dois tipos de heap

I heap m´aximo

I heap m´ınimo

I

Em ambos os tipos, os valores nos n´ os satisfazem uma

propriedade de heap

I Em um heap m´aximo, apropriedade de heap m´aximo´e que, para todo n´oi diferente da raiz A[parent(i)] ≥ A[i]

I Em um heap m´ınimo, apropriedade de heap m´ınimo´e que, para todo n´oi diferente da raiz A[parent(i)] ≤ A[i]

I

Visualizando o heap como uma ´ arvore, definimos

I aaltura de um n´o como o n´umero de arestas no caminho descendente simples mais longo deste o o n´o at´e uma folha

I aaltura do heapcomo a altura de sua raiz

I a altura de um heap ´eΘ(lgn)

Autor: Prof. Marco Aur´elio Lopes Barbosa (UEM/DIN) 6 / 24

(11)

A estrutura de dados heap

I

Existem dois tipos de heap

I heap m´aximo

I heap m´ınimo

I

Em ambos os tipos, os valores nos n´ os satisfazem uma

propriedade de heap

I Em um heap m´aximo, apropriedade de heap m´aximo´e que, para todo n´oi diferente da raiz A[parent(i)] ≥ A[i]

I Em um heap m´ınimo, apropriedade de heap m´ınimo´e que, para todo n´oi diferente da raiz A[parent(i)] ≤ A[i]

I

Visualizando o heap como uma ´ arvore, definimos

I aaltura de um n´o como o n´umero de arestas no caminho descendente simples mais longo deste o o n´o at´e uma folha

I aaltura do heapcomo a altura de sua raiz

I a altura de um heap ´eΘ(lgn)

(12)

A estrutura de dados heap

I

Existem dois tipos de heap

I heap m´aximo

I heap m´ınimo

I

Em ambos os tipos, os valores nos n´ os satisfazem uma

propriedade de heap

I Em um heap m´aximo, apropriedade de heap m´aximo´e que, para todo n´oi diferente da raiz A[parent(i)] ≥ A[i]

I Em um heap m´ınimo, apropriedade de heap m´ınimo´e que, para todo n´oi diferente da raiz A[parent(i)] ≤ A[i]

I

Visualizando o heap como uma ´ arvore, definimos

I aaltura de um n´o como o n´umero de arestas no caminho descendente simples mais longo deste o o n´o at´e uma folha

I aaltura do heapcomo a altura de sua raiz

I a altura de um heap ´eΘ(lgn)

Autor: Prof. Marco Aur´elio Lopes Barbosa (UEM/DIN) 6 / 24

(13)

A estrutura de dados heap

I

Existem dois tipos de heap

I heap m´aximo

I heap m´ınimo

I

Em ambos os tipos, os valores nos n´ os satisfazem uma

propriedade de heap

I Em um heap m´aximo, apropriedade de heap m´aximo´e que, para todo n´oi diferente da raiz A[parent(i)] ≥ A[i]

I Em um heap m´ınimo, apropriedade de heap m´ınimo´e que, para todo n´oi diferente da raiz A[parent(i)] ≤ A[i]

I

Visualizando o heap como uma ´ arvore, definimos

I aaltura de um n´o como o n´umero de arestas no caminho descendente simples mais longo deste o o n´o at´e uma folha

I aaltura do heapcomo a altura de sua raiz

I a altura de um heap ´eΘ(lgn)

(14)

Operac¸˜ oes sobre heap

I

Algumas operac ¸˜ oes sobre heap

I max-heapify, executado no tempoO(lgn), ´e a chave para manter a propriedade de heap m´aximo

I build-max-heap, executado em tempo linear, produz um heap a partir de um array de entrada n˜ao ordenado

I heapsort, executado no tempoO(nlgn), ordena um array localmente

Autor: Prof. Marco Aur´elio Lopes Barbosa (UEM/DIN) 7 / 24

(15)

Manutenc¸˜ ao da propriedade de heap

I

A func¸˜ ao max-heapify recebe como parˆ ametro um array A e um ´ındice i, e requer que

I As ´arvores bin´arias com ra´ızes emleft(i)eright(i)sejam heaps m´aximos

I

A[i] pode ser menor que seus filhos

I

A func ¸˜ ao max-heapify deixa que o valor A[i] “flutue para

baixo”, de maneira que a sub´ arvore com raiz no ´ındice i se

torne um heap

(16)

Exemplo

Autor: Prof. Marco Aur´elio Lopes Barbosa (UEM/DIN) 9 / 24

(17)

O algoritmo max-heapify

max-heapify(A, i) 1 l = left(i) 2 r = rigth(i)

3 if l <= A.tamanho-do-heap e A[l] > A[i] then 4 maior = l

5 else

6 maior = i

7 if r <= A.tamanho-do-heap e A[r] > A[maior] then 8 maior = r

9 if maior != i then

10 troca(A[i], A[maior])

11 max-heapify(A, maior)

(18)

An´ alise do tempo de execuc¸˜ ao do max-heapify

I

Tempo

Θ(1)

para corrigir os relacionamentos entre os elementos A[i], A[left[i]] e A[right(i)]

I

Tempo para executar max-heapify em uma sub´ arvore com raiz em dos filhos do n´ o i

I

As sub´ arvores de cada filho tˆ em tamanho m´ aximo igual a 2n/3 - ocorre quando o ´ ultimo n´ıvel da ´ arvore est´ a metade cheia

I

Portanto, o tempo total de execuc ¸˜ ao pode ser descrito pela recorrˆ encia

T(n)≤T(2n/3) + Θ(1)

I

Pelo caso 2 do teorema mestre

T(n) =O(lgn)

I

Tamb´ em podemos expressar o tempo de execuc ¸˜ ao de max-heapify em um n´ o de altura

h

como

O(h)

Autor: Prof. Marco Aur´elio Lopes Barbosa (UEM/DIN) 11 / 24

(19)

An´ alise do tempo de execuc¸˜ ao do max-heapify

I

Tempo

Θ(1)

para corrigir os relacionamentos entre os elementos A[i], A[left[i]] e A[right(i)]

I

Tempo para executar max-heapify em uma sub´ arvore com raiz em dos filhos do n´ o i

I

As sub´ arvores de cada filho tˆ em tamanho m´ aximo igual a 2n/3 - ocorre quando o ´ ultimo n´ıvel da ´ arvore est´ a metade cheia

I

Portanto, o tempo total de execuc ¸˜ ao pode ser descrito pela recorrˆ encia

T(n)≤T(2n/3) + Θ(1)

I

Pelo caso 2 do teorema mestre

T(n) =O(lgn)

I

Tamb´ em podemos expressar o tempo de execuc ¸˜ ao de

max-heapify em um n´ o de altura

h

como

O(h)

(20)

An´ alise do tempo de execuc¸˜ ao do max-heapify

I

Tempo

Θ(1)

para corrigir os relacionamentos entre os elementos A[i], A[left[i]] e A[right(i)]

I

Tempo para executar max-heapify em uma sub´ arvore com raiz em dos filhos do n´ o i

I

As sub´ arvores de cada filho tˆ em tamanho m´ aximo igual a 2n/3 - ocorre quando o ´ ultimo n´ıvel da ´ arvore est´ a metade cheia

I

Portanto, o tempo total de execuc ¸˜ ao pode ser descrito pela recorrˆ encia

T(n)≤T(2n/3) + Θ(1)

I

Pelo caso 2 do teorema mestre

T(n) =O(lgn)

I

Tamb´ em podemos expressar o tempo de execuc ¸˜ ao de max-heapify em um n´ o de altura

h

como

O(h)

Autor: Prof. Marco Aur´elio Lopes Barbosa (UEM/DIN) 11 / 24

(21)

An´ alise do tempo de execuc¸˜ ao do max-heapify

I

Tempo

Θ(1)

para corrigir os relacionamentos entre os elementos A[i], A[left[i]] e A[right(i)]

I

Tempo para executar max-heapify em uma sub´ arvore com raiz em dos filhos do n´ o i

I

As sub´ arvores de cada filho tˆ em tamanho m´ aximo igual a 2n/3 - ocorre quando o ´ ultimo n´ıvel da ´ arvore est´ a metade cheia

I

Portanto, o tempo total de execuc ¸˜ ao pode ser descrito pela recorrˆ encia

T(n)≤T(2n/3) + Θ(1)

I

Pelo caso 2 do teorema mestre

T(n) =O(lgn)

I

Tamb´ em podemos expressar o tempo de execuc ¸˜ ao de

max-heapify em um n´ o de altura

h

como

O(h)

(22)

A construc¸˜ ao de um heap

I

O procedimento max-heapify pode ser usado de baixo para cima para converter um array A[1..n] em um heap m´ aximo

I

Os elementos no subarray A[(bn/2c

+

1)..n] s˜ ao folhas, e cada um ´ e um heap m´ aximo

I

O procedimento build-max-heap percorre os n´ os restantes da ´ arvore e executa max-heapify sobre cada um

Autor: Prof. Marco Aur´elio Lopes Barbosa (UEM/DIN) 12 / 24

(23)

Exemplo do funcionamento do build-max-heap

(24)

A construc¸˜ ao de um heap

build-max-heap(A)

1 A.tamanho-do-heap = A.comprimento

2 for i = piso(A.comprimento / 2) downto 1 3 max-heapify(A, i)

Autor: Prof. Marco Aur´elio Lopes Barbosa (UEM/DIN) 14 / 24

(25)

Corretude do build-max-heap

I

build-max-heap mant´ em o seguinte invariante de lac ¸o

I No comec¸o de cada iterac¸˜ao do lac¸o das linhas 2 e 3, cada n´o i+1,i+2, . . . ,n´e a ra´ız de um heap m´aximo

I

Vamos mostrar que esta invariante ´ e verdadeira e como consequˆ encia vamos concluir que build-max-heap ´ e correto

I Inicializa¸c˜ao: antes da primeira linha i=bn/2ce cada n´o bn/2c+1,bn/2c+2, . . . ,n´e uma folha, e portanto ´e a raiz de um heap m´aximo

I Manuten¸c˜ao: os filhos dei tem um n´umero maior quei e pelo invariante s˜ao ra´ızes de heaps m´aximos. Esta ´e a condic¸˜ao exigida para que a chamadamax-hepify(A, i) tornei a raiz de um heap m´aximo. Decrementari restabelece a invariante para a pr´oxima iterac¸˜ao

I T´ermino: i=0, pela invariante de lac¸o 1,2, . . . ,ns˜ao raizes de um heap m´aximo, particularmente o n´o 1 ´e uma ra´ız

(26)

Corretude do build-max-heap

I

build-max-heap mant´ em o seguinte invariante de lac ¸o

I No comec¸o de cada iterac¸˜ao do lac¸o das linhas 2 e 3, cada n´o i+1,i+2, . . . ,n´e a ra´ız de um heap m´aximo

I

Vamos mostrar que esta invariante ´ e verdadeira e como consequˆ encia vamos concluir que build-max-heap ´ e correto

I Inicializa¸c˜ao: antes da primeira linha i=bn/2ce cada n´o bn/2c+1,bn/2c+2, . . . ,n´e uma folha, e portanto ´e a raiz de um heap m´aximo

I Manuten¸c˜ao: os filhos dei tem um n´umero maior quei e pelo invariante s˜ao ra´ızes de heaps m´aximos. Esta ´e a condic¸˜ao exigida para que a chamadamax-hepify(A, i) tornei a raiz de um heap m´aximo. Decrementari restabelece a invariante para a pr´oxima iterac¸˜ao

I T´ermino: i=0, pela invariante de lac¸o 1,2, . . . ,ns˜ao raizes de um heap m´aximo, particularmente o n´o 1 ´e uma ra´ız

Autor: Prof. Marco Aur´elio Lopes Barbosa (UEM/DIN) 15 / 24

(27)

Corretude do build-max-heap

I

build-max-heap mant´ em o seguinte invariante de lac ¸o

I No comec¸o de cada iterac¸˜ao do lac¸o das linhas 2 e 3, cada n´o i+1,i+2, . . . ,n´e a ra´ız de um heap m´aximo

I

Vamos mostrar que esta invariante ´ e verdadeira e como consequˆ encia vamos concluir que build-max-heap ´ e correto

I Inicializa¸c˜ao: antes da primeira linhai =bn/2ce cada n´o bn/2c+1,bn/2c+2, . . . ,n´e uma folha, e portanto ´e a raiz de um heap m´aximo

I Manuten¸c˜ao: os filhos dei tem um n´umero maior quei e pelo invariante s˜ao ra´ızes de heaps m´aximos. Esta ´e a condic¸˜ao exigida para que a chamadamax-hepify(A, i) tornei a raiz de um heap m´aximo. Decrementari restabelece a invariante para a pr´oxima iterac¸˜ao

I T´ermino: i=0, pela invariante de lac¸o 1,2, . . . ,ns˜ao raizes de um heap m´aximo, particularmente o n´o 1 ´e uma ra´ız

(28)

Corretude do build-max-heap

I

build-max-heap mant´ em o seguinte invariante de lac ¸o

I No comec¸o de cada iterac¸˜ao do lac¸o das linhas 2 e 3, cada n´o i+1,i+2, . . . ,n´e a ra´ız de um heap m´aximo

I

Vamos mostrar que esta invariante ´ e verdadeira e como consequˆ encia vamos concluir que build-max-heap ´ e correto

I Inicializa¸c˜ao: antes da primeira linhai =bn/2ce cada n´o bn/2c+1,bn/2c+2, . . . ,n´e uma folha, e portanto ´e a raiz de um heap m´aximo

I Manuten¸c˜ao: os filhos dei tem um n´umero maior quei e pelo invariante s˜ao ra´ızes de heaps m´aximos. Esta ´e a condic¸˜ao exigida para que a chamadamax-hepify(A, i) tornei a raiz de um heap m´aximo. Decrementari restabelece a invariante para a pr´oxima iterac¸˜ao

I T´ermino: i=0, pela invariante de lac¸o 1,2, . . . ,ns˜ao raizes de um heap m´aximo, particularmente o n´o 1 ´e uma ra´ız

Autor: Prof. Marco Aur´elio Lopes Barbosa (UEM/DIN) 15 / 24

(29)

Corretude do build-max-heap

I

build-max-heap mant´ em o seguinte invariante de lac ¸o

I No comec¸o de cada iterac¸˜ao do lac¸o das linhas 2 e 3, cada n´o i+1,i+2, . . . ,n´e a ra´ız de um heap m´aximo

I

Vamos mostrar que esta invariante ´ e verdadeira e como consequˆ encia vamos concluir que build-max-heap ´ e correto

I Inicializa¸c˜ao: antes da primeira linhai =bn/2ce cada n´o bn/2c+1,bn/2c+2, . . . ,n´e uma folha, e portanto ´e a raiz de um heap m´aximo

I Manuten¸c˜ao: os filhos dei tem um n´umero maior quei e pelo invariante s˜ao ra´ızes de heaps m´aximos. Esta ´e a condic¸˜ao exigida para que a chamadamax-hepify(A, i) tornei a raiz de um heap m´aximo. Decrementari restabelece a invariante para a pr´oxima iterac¸˜ao

I T´ermino: i=0, pela invariante de lac¸o 1,2, . . . ,ns˜ao raizes de um heap m´aximo, particularmente o n´o 1 ´e uma ra´ız

(30)

An´ alise do build-max-heap

I

Limite superior simples

I Cada chamada demax-heapify custaO(lgn)e existem O(n) chamadas, portanto, o tempo de execuc¸˜ao ´eO(nlgn).

Autor: Prof. Marco Aur´elio Lopes Barbosa (UEM/DIN) 16 / 24

(31)

An´ alise do build-max-heap

I

Limite restrito

I O tempo de execuc¸˜ao demax-heapifyvaria com a altura da

´

arvore, a altura da maioria dos n´os ´e pequena

I Um heap denelementos tem alturablgnce no m´aximo dn/2h+1en´os de alturah

I Logo, podemos expressar o tempo de execuc¸˜ao do build-max-heapcomo

T(n) =

blgnc

X

h=0

l n 2h+1

m O(h)

=O





 n 2

blgnc

X

h=0

h 2h







=O





n

X

h=0

h 1

2 h





(32)

An´ alise do build-max-heap

I

Limite restrito

I O tempo de execuc¸˜ao demax-heapifyvaria com a altura da

´

arvore, a altura da maioria dos n´os ´e pequena

I Um heap denelementos tem alturablgnce no m´aximo dn/2h+1en´os de alturah

I Logo, podemos expressar o tempo de execuc¸˜ao do build-max-heapcomo

T(n) =

blgnc

X

h=0

l n 2h+1

m O(h)

=O





 n 2

blgnc

X

h=0

h 2h







=O





n

X

h=0

h 1

2 h





Autor: Prof. Marco Aur´elio Lopes Barbosa (UEM/DIN) 17 / 24

(33)

An´ alise do build-max-heap

I

Limite restrito

I Obtemos que

T(n) =O





n

X

h=0

h 1

2 h





I Usando a f´ormula

X

k=1

kxk = x

(1−x)2 comx =1

2, obtemos

X

h=0

h 1

2 h

= 1/2

(1−1/2)2 =2

I Portanto, o tempo de execuc¸˜ao debuild-max-heap´e T(n) =O(n.2) =O(n)

(34)

An´ alise do build-max-heap

I

Limite restrito

I Obtemos que

T(n) =O





n

X

h=0

h 1

2 h





I Usando a f´ormula

X

k=1

kxk = x

(1−x)2 comx =1

2, obtemos

X

h=0

h 1

2 h

= 1/2

(1−1/2)2 =2

I Portanto, o tempo de execuc¸˜ao debuild-max-heap´e T(n) =O(n.2) =O(n)

Autor: Prof. Marco Aur´elio Lopes Barbosa (UEM/DIN) 18 / 24

(35)

An´ alise do build-max-heap

I

Limite restrito

I Obtemos que

T(n) =O





n

X

h=0

h 1

2 h





I Usando a f´ormula

X

k=1

kxk = x

(1−x)2 comx =1

2, obtemos

X

h=0

h 1

2 h

= 1/2

(1−1/2)2 =2

I Portanto, o tempo de execuc¸˜ao debuild-max-heap´e T(n) =O(n.2) =O(n)

(36)

O algoritmo heapsort

I

Construir um heap, usando a func ¸˜ ao build-max-heap

I

Trocar o elemento A[1] com A[n], e atualiza o tamanho do heap para

n

1

I

Corrigir o heap com a func ¸˜ ao max-heapify e repetir o processo

Autor: Prof. Marco Aur´elio Lopes Barbosa (UEM/DIN) 19 / 24

(37)

Exemplo do funcionamento do heapsort

(38)

O algoritmo heapsort

heapsort(A)

1 build-max-heap(A)

2 for i = A.comprimento downto 2 3 troca(A[1], A[i])

4 A.tamanho-do-heap = A.tamanho-do-heap - 1 5 max-heapify(A, 1)

Autor: Prof. Marco Aur´elio Lopes Barbosa (UEM/DIN) 21 / 24

(39)

An´ alise do heapsort

I

A chamada a build-max-heap demora

O(n)

I

O procedimento max-heapify demora

O(lgn)

e ´ e chamado

n

1

I

Portanto, o tempo de execuc¸˜ ao do heapsort ´ e

O(n

lg

n)

(40)

Exerc´ıcios

I

Exerc´ıcios 6.1-1 a 6.1-7

I

Exerc´ıcios 6.2-1 a 6.2-6

I

Exerc´ıcios 6.3-1 a 6.3-3

I

Exerc´ıcios 6.4-1 a 6.4-3

Autor: Prof. Marco Aur´elio Lopes Barbosa (UEM/DIN) 23 / 24

(41)

Referˆ encias

I

Thomas H. Cormen et al. Introduc ¸˜ ao a Algoritmos. 2

a

edic ¸˜ ao

em portuguˆ es. Cap´ıtulo 6.

Referências

Documentos relacionados

Qual o menor profundidade (= menor nível) que uma folha pode ter em uma árvore de decisão que descreve um algoritmo de ordenação baseado em comparações. Exercício 16.C

iv. Desenvolvimento de soluções de big data aplicadas à gestão preditiva dos fluxos de movimentação portuária de mercadorias e passageiros. d) Robótica oceânica: criação

Clorofila é indicativo de redução de qualidade em sementes de soja e, diferentes porcentagens de sementes esverdeadas interferem em maior ou menor intensidade

Determinar a relação entre adolescentes brancos e negros e o primeiro acesso aos serviços de saúde bucal do Sistema Único de Saúde; Verificar a relação do tempo da última visita

Para o controle do peso, os fatores comportamentais como hábitos alimentares saudáveis e a prática de atividade física devem ser estimulados desde a infância uma vez que

Besides expanding virus abundance counts in water and sediments from Brazilian aquatic ecosystems, future virus ecology studies could use metagenomic approaches to enhance

O presente regulamento é elaborado ao abrigo do disposto nos arti- gos 112.º e 241.º da Constituição da Republica Portuguesa, artigo 117.º e 118.º do Código do

1 – A adjudicação da concessão de lojas ou lugares de venda é feita ao autor do lanço mais elevado oferecido acima da base de licitação. 2 – No caso de desistência ou