SlideShare uma empresa Scribd logo
Aula 17 – Heaps e Heapsort
Norton Trevisan Roman
norton@usp.br
18 de outubro de 2018
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 1 / 17
Heaps
Mantendo a Propriedade do Heap
Vimos que, no caso de
alguma mudan¸ca no
heap alterar sua
propriedade:
16
1
4
2
10
3
14
4
7
5
9
6
3
7
2
8
8
9
1
10
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 2 / 17
Heaps
Mantendo a Propriedade do Heap
Vimos que, no caso de
alguma mudan¸ca no
heap alterar sua
propriedade:
Trocamos o elemento
problem´atico de lugar com
o maior filho
16
1
4
2
10
3
14
4
7
5
9
6
3
7
2
8
8
9
1
10
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 2 / 17
Heaps
Mantendo a Propriedade do Heap
Vimos que, no caso de
alguma mudan¸ca no
heap alterar sua
propriedade:
Trocamos o elemento
problem´atico de lugar com
o maior filho
16
1
14
2
10
3
4
4
7
5
9
6
3
7
2
8
8
9
1
10
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 2 / 17
Heaps
Mantendo a Propriedade do Heap
Vimos que, no caso de
alguma mudan¸ca no
heap alterar sua
propriedade:
Trocamos o elemento
problem´atico de lugar com
o maior filho
16
1
14
2
10
3
4
4
7
5
9
6
3
7
2
8
8
9
1
10
E repetimos o procedimento enquanto houver
viola¸c˜ao da propriedade
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 2 / 17
Heaps
Mantendo a Propriedade do Heap
Vimos que, no caso de
alguma mudan¸ca no
heap alterar sua
propriedade:
Trocamos o elemento
problem´atico de lugar com
o maior filho
16
1
14
2
10
3
8
4
7
5
9
6
3
7
2
8
4
9
1
10
E repetimos o procedimento enquanto houver
viola¸c˜ao da propriedade
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 2 / 17
Heaps
Mantendo a Propriedade do Heap
Vimos que, no caso de
alguma mudan¸ca no
heap alterar sua
propriedade:
Trocamos o elemento
problem´atico de lugar com
o maior filho
16
1
14
2
10
3
8
4
7
5
9
6
3
7
2
8
4
9
1
10
E repetimos o procedimento enquanto houver
viola¸c˜ao da propriedade
Empurrando assim o elemento problem´atico para baixo no
heap, at´e seu devido lugar
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 2 / 17
Heaps
Mantendo a Propriedade do Heap
Vimos tamb´em o procedimento
void refazHeapMax(int A[], int i, int
compHeap)
que fazia essa manuten¸c˜ao no heap em O(log n)
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 3 / 17
Heaps
Mantendo a Propriedade do Heap
Vimos tamb´em o procedimento
void refazHeapMax(int A[], int i, int
compHeap)
que fazia essa manuten¸c˜ao no heap em O(log n)
Como ent˜ao constru´ımos um heap?
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 3 / 17
Heaps
Mantendo a Propriedade do Heap
Vimos tamb´em o procedimento
void refazHeapMax(int A[], int i, int
compHeap)
que fazia essa manuten¸c˜ao no heap em O(log n)
Como ent˜ao constru´ımos um heap?
Uma maneira ´e usar nosso refazHeapMax para
converter um arranjo A[1..n] em um heap m´aximo
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 3 / 17
Heaps
Construindo o Heap
Note que, quando representamos o heap com o
arranjo A[1..n], as folhas ficam nos n´os que v˜ao de
n/2 + 1 a n
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 4 / 17
Heaps
Construindo o Heap
Note que, quando representamos o heap com o
arranjo A[1..n], as folhas ficam nos n´os que v˜ao de
n/2 + 1 a n
Ou, alternativamente, nos elementos de ´ındice n/2 a
n − 1, se tomarmos o arranjo como A[0..n − 1]
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 4 / 17
Heaps
Construindo o Heap
Note que, quando representamos o heap com o
arranjo A[1..n], as folhas ficam nos n´os que v˜ao de
n/2 + 1 a n
Ou, alternativamente, nos elementos de ´ındice n/2 a
n − 1, se tomarmos o arranjo como A[0..n − 1]
Mesmo? Suponha o arranjo A[0..n − 1]
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 4 / 17
Heaps
Construindo o Heap
Note que, quando representamos o heap com o
arranjo A[1..n], as folhas ficam nos n´os que v˜ao de
n/2 + 1 a n
Ou, alternativamente, nos elementos de ´ındice n/2 a
n − 1, se tomarmos o arranjo como A[0..n − 1]
Mesmo? Suponha o arranjo A[0..n − 1]
Imagine que A[ n/2 ] . . . A[n − 1] n˜ao contenham apenas
folhas
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 4 / 17
Heaps
Construindo o Heap
Note que, quando representamos o heap com o
arranjo A[1..n], as folhas ficam nos n´os que v˜ao de
n/2 + 1 a n
Ou, alternativamente, nos elementos de ´ındice n/2 a
n − 1, se tomarmos o arranjo como A[0..n − 1]
Mesmo? Suponha o arranjo A[0..n − 1]
Imagine que A[ n/2 ] . . . A[n − 1] n˜ao contenham apenas
folhas
Isso significa que existe (pelo menos) um elemento
A[k], n/2 ≤ k ≤ n − 1 que n˜ao ´e folha
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 4 / 17
Heaps
Construindo o Heap
O que significa que existe um A[k ], n/2 ≤ k ≤ n − 1 no
heap que ´e filho desse elemento A[k]
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 5 / 17
Heaps
Construindo o Heap
O que significa que existe um A[k ], n/2 ≤ k ≤ n − 1 no
heap que ´e filho desse elemento A[k]
Mas, pela regra do heap, um filho de A[k] estaria nas
posi¸c˜oes k = 2k + 1 ou k = 2k + 2
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 5 / 17
Heaps
Construindo o Heap
O que significa que existe um A[k ], n/2 ≤ k ≤ n − 1 no
heap que ´e filho desse elemento A[k]
Mas, pela regra do heap, um filho de A[k] estaria nas
posi¸c˜oes k = 2k + 1 ou k = 2k + 2
Como k ≥ n/2 , ent˜ao esse elemento estaria em
k ≥ 2n/2 + 1 ou em k ≥ 2n/2 + 2
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 5 / 17
Heaps
Construindo o Heap
O que significa que existe um A[k ], n/2 ≤ k ≤ n − 1 no
heap que ´e filho desse elemento A[k]
Mas, pela regra do heap, um filho de A[k] estaria nas
posi¸c˜oes k = 2k + 1 ou k = 2k + 2
Como k ≥ n/2 , ent˜ao esse elemento estaria em
k ≥ 2n/2 + 1 ou em k ≥ 2n/2 + 2
Ou seja, k ≥ n + 1 ou em k ≥ n + 2. Fora, portanto, do
arranjo
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 5 / 17
Heaps
Construindo o Heap
O que significa que existe um A[k ], n/2 ≤ k ≤ n − 1 no
heap que ´e filho desse elemento A[k]
Mas, pela regra do heap, um filho de A[k] estaria nas
posi¸c˜oes k = 2k + 1 ou k = 2k + 2
Como k ≥ n/2 , ent˜ao esse elemento estaria em
k ≥ 2n/2 + 1 ou em k ≥ 2n/2 + 2
Ou seja, k ≥ n + 1 ou em k ≥ n + 2. Fora, portanto, do
arranjo
Ent˜ao sim, as folhas ficam nos n´os que v˜ao de n/2 + 1 a n
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 5 / 17
Heaps
Construindo o Heap
As folhas de um heap podem ser vistas como heaps
de 1 ´unico elemento
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 6 / 17
Heaps
Construindo o Heap
As folhas de um heap podem ser vistas como heaps
de 1 ´unico elemento
Podemos ent˜ao considerar cada elemento A[k],
n/2 ≤ k ≤ n − 1 como um heap
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 6 / 17
Heaps
Construindo o Heap
As folhas de um heap podem ser vistas como heaps
de 1 ´unico elemento
Podemos ent˜ao considerar cada elemento A[k],
n/2 ≤ k ≤ n − 1 como um heap
E a partir desses, construir o resto do heap, numa estrat´egia
bottom-up
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 6 / 17
Heaps
Construindo o Heap
As folhas de um heap podem ser vistas como heaps
de 1 ´unico elemento
Podemos ent˜ao considerar cada elemento A[k],
n/2 ≤ k ≤ n − 1 como um heap
E a partir desses, construir o resto do heap, numa estrat´egia
bottom-up
Como?
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 6 / 17
Heaps
Construindo o Heap
Iniciamos com esses heaps de 1 elemento (A[ n/2 ]
at´e A[n − 1])
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 7 / 17
Heaps
Construindo o Heap
Iniciamos com esses heaps de 1 elemento (A[ n/2 ]
at´e A[n − 1])
Chamamos ent˜ao refazHeapMax a partir da
posi¸c˜ao n/2 − 1 descendo at´e 0
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 7 / 17
Heaps
Construindo o Heap
Iniciamos com esses heaps de 1 elemento (A[ n/2 ]
at´e A[n − 1])
Chamamos ent˜ao refazHeapMax a partir da
posi¸c˜ao n/2 − 1 descendo at´e 0
Como se tiv´essemos adicionado um elemento ao heap, em
seu in´ıcio, e agora tiv´essemos que manter sua propriedade
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 7 / 17
Heaps
Construindo o Heap
Iniciamos com esses heaps de 1 elemento (A[ n/2 ]
at´e A[n − 1])
Chamamos ent˜ao refazHeapMax a partir da
posi¸c˜ao n/2 − 1 descendo at´e 0
Como se tiv´essemos adicionado um elemento ao heap, em
seu in´ıcio, e agora tiv´essemos que manter sua propriedade
Repetimos ent˜ao a partir da posi¸c˜ao n/2 − 2 etc,
at´e a posi¸c˜ao 0
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 7 / 17
Heaps
Construindo o Heap
Iniciamos com esses heaps de 1 elemento (A[ n/2 ]
at´e A[n − 1])
Chamamos ent˜ao refazHeapMax a partir da
posi¸c˜ao n/2 − 1 descendo at´e 0
Como se tiv´essemos adicionado um elemento ao heap, em
seu in´ıcio, e agora tiv´essemos que manter sua propriedade
Repetimos ent˜ao a partir da posi¸c˜ao n/2 − 2 etc,
at´e a posi¸c˜ao 0
Ou seja, um a um adicionamos os demais elementos
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 7 / 17
Heaps
Construindo o Heap
void constroiHeapMax(int[] A) {
int compHeap = A.length;
for(int i = A.length/2 - 1; i >= 0; i--)
refazHeapMax(A, i, compHeap);
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 8 / 17
Heaps
Construindo o Heap
Para cada elemento, da
metade at´e a primeira posi¸c˜ao
void constroiHeapMax(int[] A) {
int compHeap = A.length;
for(int i = A.length/2 - 1; i >= 0; i--)
refazHeapMax(A, i, compHeap);
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 8 / 17
Heaps
Construindo o Heap
Garanto a propriedade do
heap a partir desse elemento
void constroiHeapMax(int[] A) {
int compHeap = A.length;
for(int i = A.length/2 - 1; i >= 0; i--)
refazHeapMax(A, i, compHeap);
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 8 / 17
Heaps
Construindo o Heap
void constroiHeapMax(int[] A) {
int compHeap = A.length;
for(int i = A.length/2 - 1;
i >= 0; i--)
refazHeapMax(A,i,compHeap);
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 9 / 17
Heaps
Construindo o Heap
4
0
1
1
3
2
2
3
16
4
9
5
10
6
14
7
8
8
7
9
4 1 3 2 16 9 10 14 8 7
0 1 2 3 4 5 6 7 8 9
void constroiHeapMax(int[] A) {
int compHeap = A.length;
for(int i = A.length/2 - 1;
i >= 0; i--)
refazHeapMax(A,i,compHeap);
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 9 / 17
Heaps
Construindo o Heap
4
0
1
1
3
2
2
3
16
4
9
5
10
6
14
7
8
8
7
9
4 1 3 2 16 9 10 14 8 7
0 1 2 3 4 5 6 7 8 9
void constroiHeapMax(int[] A) {
int compHeap = A.length;
for(int i = A.length/2 - 1;
i >= 0; i--)
refazHeapMax(A,i,compHeap);
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 9 / 17
Heaps
Construindo o Heap
4
0
1
1
3
2
2
3
16
4
9
5
10
6
14
7
8
8
7
9
4 1 3 2 16 9 10 14 8 7
0 1 2 3 4 5 6 7 8 9
i
void constroiHeapMax(int[] A) {
int compHeap = A.length;
for(int i = A.length/2 - 1;
i >= 0; i--)
refazHeapMax(A,i,compHeap);
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 9 / 17
Heaps
Construindo o Heap
4
0
1
1
3
2
2
3
16
4
9
5
10
6
14
7
8
8
7
9
4 1 3 2 16 9 10 14 8 7
0 1 2 3 4 5 6 7 8 9
i
void constroiHeapMax(int[] A) {
int compHeap = A.length;
for(int i = A.length/2 - 1;
i >= 0; i--)
refazHeapMax(A,i,compHeap);
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 9 / 17
Heaps
Construindo o Heap
4
0
1
1
3
2
2
3
16
4
9
5
10
6
14
7
8
8
7
9
4 1 3 2 16 9 10 14 8 7
0 1 2 3 4 5 6 7 8 9
i
void constroiHeapMax(int[] A) {
int compHeap = A.length;
for(int i = A.length/2 - 1;
i >= 0; i--)
refazHeapMax(A,i,compHeap);
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 9 / 17
Heaps
Construindo o Heap
4
0
1
1
3
2
14
3
16
4
9
5
10
6
2
7
8
8
7
9
4 1 3 14 16 9 10 2 8 7
0 1 2 3 4 5 6 7 8 9
i
void constroiHeapMax(int[] A) {
int compHeap = A.length;
for(int i = A.length/2 - 1;
i >= 0; i--)
refazHeapMax(A,i,compHeap);
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 9 / 17
Heaps
Construindo o Heap
4
0
1
1
3
2
14
3
16
4
9
5
10
6
2
7
8
8
7
9
4 1 3 14 16 9 10 2 8 7
0 1 2 3 4 5 6 7 8 9
i
void constroiHeapMax(int[] A) {
int compHeap = A.length;
for(int i = A.length/2 - 1;
i >= 0; i--)
refazHeapMax(A,i,compHeap);
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 9 / 17
Heaps
Construindo o Heap
4
0
1
1
10
2
14
3
16
4
9
5
3
6
2
7
8
8
7
9
4 1 10 14 16 9 3 2 8 7
0 1 2 3 4 5 6 7 8 9
i
void constroiHeapMax(int[] A) {
int compHeap = A.length;
for(int i = A.length/2 - 1;
i >= 0; i--)
refazHeapMax(A,i,compHeap);
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 9 / 17
Heaps
Construindo o Heap
4
0
1
1
10
2
14
3
16
4
9
5
3
6
2
7
8
8
7
9
4 1 10 14 16 9 3 2 8 7
0 1 2 3 4 5 6 7 8 9
i
void constroiHeapMax(int[] A) {
int compHeap = A.length;
for(int i = A.length/2 - 1;
i >= 0; i--)
refazHeapMax(A,i,compHeap);
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 9 / 17
Heaps
Construindo o Heap
4
0
16
1
10
2
14
3
7
4
9
5
3
6
2
7
8
8
1
9
4 16 10 14 7 9 3 2 8 1
0 1 2 3 4 5 6 7 8 9
i
void constroiHeapMax(int[] A) {
int compHeap = A.length;
for(int i = A.length/2 - 1;
i >= 0; i--)
refazHeapMax(A,i,compHeap);
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 9 / 17
Heaps
Construindo o Heap
4
0
16
1
10
2
14
3
7
4
9
5
3
6
2
7
8
8
1
9
4 16 10 14 7 9 3 2 8 1
0 1 2 3 4 5 6 7 8 9
i
void constroiHeapMax(int[] A) {
int compHeap = A.length;
for(int i = A.length/2 - 1;
i >= 0; i--)
refazHeapMax(A,i,compHeap);
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 9 / 17
Heaps
Construindo o Heap
16
0
14
1
10
2
8
3
7
4
9
5
3
6
2
7
4
8
1
9
16 14 10 8 7 9 3 2 4 1
0 1 2 3 4 5 6 7 8 9
i
void constroiHeapMax(int[] A) {
int compHeap = A.length;
for(int i = A.length/2 - 1;
i >= 0; i--)
refazHeapMax(A,i,compHeap);
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 9 / 17
Heaps
Construindo o Heap
E qual a complexidade
desse c´odigo?
void constroiHeapMax(int[] A) {
int compHeap = A.length;
for(int i = A.length/2 - 1;
i >= 0; i--)
refazHeapMax(A,i,compHeap);
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 10 / 17
Heaps
Construindo o Heap
E qual a complexidade
desse c´odigo?
O(log n)
void constroiHeapMax(int[] A) {
int compHeap = A.length;
for(int i = A.length/2 - 1;
i >= 0; i--)
refazHeapMax(A,i,compHeap);
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 10 / 17
Heaps
Construindo o Heap
E qual a complexidade
desse c´odigo?
O(log n)×O(n)
void constroiHeapMax(int[] A) {
int compHeap = A.length;
for(int i = A.length/2 - 1;
i >= 0; i--)
refazHeapMax(A,i,compHeap);
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 10 / 17
Heaps
Construindo o Heap
E qual a complexidade
desse c´odigo?
O(log n)×O(n)
Portanto, O(n log n)
void constroiHeapMax(int[] A) {
int compHeap = A.length;
for(int i = A.length/2 - 1;
i >= 0; i--)
refazHeapMax(A,i,compHeap);
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 10 / 17
Heaps
Construindo o Heap
E qual a complexidade
desse c´odigo?
O(log n)×O(n)
Portanto, O(n log n)
void constroiHeapMax(int[] A) {
int compHeap = A.length;
for(int i = A.length/2 - 1;
i >= 0; i--)
refazHeapMax(A,i,compHeap);
}
Mas isso pode melhorar...
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 10 / 17
Heaps
Construindo o Heap
E qual a complexidade
desse c´odigo?
O(log n)×O(n)
Portanto, O(n log n)
void constroiHeapMax(int[] A) {
int compHeap = A.length;
for(int i = A.length/2 - 1;
i >= 0; i--)
refazHeapMax(A,i,compHeap);
}
Mas isso pode melhorar...
De fato, pode-se demonstrar que um limite mais
apertado seria O(n)
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 10 / 17
Heaps
Construindo o Heap
E qual a complexidade
desse c´odigo?
O(log n)×O(n)
Portanto, O(n log n)
void constroiHeapMax(int[] A) {
int compHeap = A.length;
for(int i = A.length/2 - 1;
i >= 0; i--)
refazHeapMax(A,i,compHeap);
}
Mas isso pode melhorar...
De fato, pode-se demonstrar que um limite mais
apertado seria O(n)
Ver em Cormen et al. “Introduction to Algorithms”. 2a ed.
MIT Press, 2001. Pp. 133-135.
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 10 / 17
HeapSort
HeapSort
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 11 / 17
Projeto por Indu¸c˜ao Fraca
Quarta Alternativa
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 12 / 17
Projeto por Indu¸c˜ao Fraca
Quarta Alternativa
Base: n = 1. Um ´unico elemento est´a ordenado
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 12 / 17
Projeto por Indu¸c˜ao Fraca
Quarta Alternativa
Base: n = 1. Um ´unico elemento est´a ordenado
H.I.: Sei ordenar um conjunto de n − 1 ≥ 1 valores
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 12 / 17
Projeto por Indu¸c˜ao Fraca
Quarta Alternativa
Base: n = 1. Um ´unico elemento est´a ordenado
H.I.: Sei ordenar um conjunto de n − 1 ≥ 1 valores
Passo:
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 12 / 17
Projeto por Indu¸c˜ao Fraca
Quarta Alternativa
Base: n = 1. Um ´unico elemento est´a ordenado
H.I.: Sei ordenar um conjunto de n − 1 ≥ 1 valores
Passo:
Seja S um conjunto de n ≥ 2 valores, organizados na forma
de um heap m´aximo
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 12 / 17
Projeto por Indu¸c˜ao Fraca
Quarta Alternativa
Base: n = 1. Um ´unico elemento est´a ordenado
H.I.: Sei ordenar um conjunto de n − 1 ≥ 1 valores
Passo:
Seja S um conjunto de n ≥ 2 valores, organizados na forma
de um heap m´aximo
Sendo S um heap m´aximo, o maior elemento est´a em S1.
Trocamos esse elemento por Sn, restaurando o heap em
S − Sn. Por hip´otese de indu¸c˜ao, sei ordenar a sequˆencia
S − Sn, e assim obtemos S ordenado
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 12 / 17
Projeto por Indu¸c˜ao Fraca
Quarta Alternativa
Base: n = 1. Um ´unico elemento est´a ordenado
H.I.: Sei ordenar um conjunto de n − 1 ≥ 1 valores
Passo:
Seja S um conjunto de n ≥ 2 valores, organizados na forma
de um heap m´aximo
Sendo S um heap m´aximo, o maior elemento est´a em S1.
Trocamos esse elemento por Sn, restaurando o heap em
S − Sn. Por hip´otese de indu¸c˜ao, sei ordenar a sequˆencia
S − Sn, e assim obtemos S ordenado
(HeapSort)
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 12 / 17
HeapSort
Projeto
O projeto do Heapsort ´e essencialmente o mesmo da
ordena¸c˜ao por Sele¸c˜ao
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 13 / 17
HeapSort
Projeto
O projeto do Heapsort ´e essencialmente o mesmo da
ordena¸c˜ao por Sele¸c˜ao
Selecionamos e posicionamos o maior (ou menor) elemento
do conjunto
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 13 / 17
HeapSort
Projeto
O projeto do Heapsort ´e essencialmente o mesmo da
ordena¸c˜ao por Sele¸c˜ao
Selecionamos e posicionamos o maior (ou menor) elemento
do conjunto
Aplicamos a hip´otese de indu¸c˜ao para ordenar os elementos
restantes
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 13 / 17
HeapSort
Projeto
O projeto do Heapsort ´e essencialmente o mesmo da
ordena¸c˜ao por Sele¸c˜ao
Selecionamos e posicionamos o maior (ou menor) elemento
do conjunto
Aplicamos a hip´otese de indu¸c˜ao para ordenar os elementos
restantes
A diferen¸ca ´e que no HeapSort utilizamos um heap
para selecionar o maior (ou menor) elemento de
forma eficiente
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 13 / 17
HeapSort
C´odigo
void heapSort(int A[]) {
int i, compHeap, temp;
compHeap = A.length;
constroiHeapMax(A);
for(i = A.length-1; i > 0; i--) {
temp = A[0];
A[0] = A[i];
A[i] = temp;
compHeap--;
refazHeapMax(A, 0, compHeap);
}
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 14 / 17
HeapSort
C´odigo
Transforma o ar-
ranjo em um heap
void heapSort(int A[]) {
int i, compHeap, temp;
compHeap = A.length;
constroiHeapMax(A);
for(i = A.length-1; i > 0; i--) {
temp = A[0];
A[0] = A[i];
A[i] = temp;
compHeap--;
refazHeapMax(A, 0, compHeap);
}
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 14 / 17
HeapSort
C´odigo
Coloca o maior
elemento ao final do
arranjo a ser ordenado
void heapSort(int A[]) {
int i, compHeap, temp;
compHeap = A.length;
constroiHeapMax(A);
for(i = A.length-1; i > 0; i--) {
temp = A[0];
A[0] = A[i];
A[i] = temp;
compHeap--;
refazHeapMax(A, 0, compHeap);
}
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 14 / 17
HeapSort
C´odigo
Verifica se a mudan¸ca
feita n˜ao violou
a propriedade no
heap restante, de
n − 1 elementos
void heapSort(int A[]) {
int i, compHeap, temp;
compHeap = A.length;
constroiHeapMax(A);
for(i = A.length-1; i > 0; i--) {
temp = A[0];
A[0] = A[i];
A[i] = temp;
compHeap--;
refazHeapMax(A, 0, compHeap);
}
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 14 / 17
HeapSort
C´odigo
Repete a opera¸c˜ao
para o heap de n − 1
elementos (T(n − 1))
void heapSort(int A[]) {
int i, compHeap, temp;
compHeap = A.length;
constroiHeapMax(A);
for(i = A.length-1; i > 0; i--) {
temp = A[0];
A[0] = A[i];
A[i] = temp;
compHeap--;
refazHeapMax(A, 0, compHeap);
}
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 14 / 17
HeapSort
C´odigo
void heapSort(int A[]) {
int i, compHeap, temp;
compHeap = A.length;
constroiHeapMax(A);
for(i = A.length-1; i > 0; i--) {
temp = A[0];
A[0] = A[i];
A[i] = temp;
compHeap--;
refazHeapMax(A, 0, compHeap);
}
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 15 / 17
HeapSort
C´odigo
16
0
14
1
10
2
8
3
7
4
9
5
3
6
2
7
4
8
1
9
16 14 10 8 7 9 3 2 4 1
0 1 2 3 4 5 6 7 8 9
void heapSort(int A[]) {
int i, compHeap, temp;
compHeap = A.length;
constroiHeapMax(A);
for(i = A.length-1; i > 0; i--) {
temp = A[0];
A[0] = A[i];
A[i] = temp;
compHeap--;
refazHeapMax(A, 0, compHeap);
}
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 15 / 17
HeapSort
C´odigo
16
0
14
1
10
2
8
3
7
4
9
5
3
6
2
7
4
8
1
9
16 14 10 8 7 9 3 2 4 1
0 1 2 3 4 5 6 7 8 9
void heapSort(int A[]) {
int i, compHeap, temp;
compHeap = A.length;
constroiHeapMax(A);
for(i = A.length-1; i > 0; i--) {
temp = A[0];
A[0] = A[i];
A[i] = temp;
compHeap--;
refazHeapMax(A, 0, compHeap);
}
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 15 / 17
HeapSort
C´odigo
16
0
14
1
10
2
8
3
7
4
9
5
3
6
2
7
4
8
1
9
16 14 10 8 7 9 3 2 4 1
0 1 2 3 4 5 6 7 8 9
void heapSort(int A[]) {
int i, compHeap, temp;
compHeap = A.length;
constroiHeapMax(A);
for(i = A.length-1; i > 0; i--) {
temp = A[0];
A[0] = A[i];
A[i] = temp;
compHeap--;
refazHeapMax(A, 0, compHeap);
}
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 15 / 17
HeapSort
C´odigo
16
0
14
1
10
2
8
3
7
4
9
5
3
6
2
7
4
8
1
9
16 14 10 8 7 9 3 2 4 1
0 1 2 3 4 5 6 7 8 9
void heapSort(int A[]) {
int i, compHeap, temp;
compHeap = A.length;
constroiHeapMax(A);
for(i = A.length-1; i > 0; i--) {
temp = A[0];
A[0] = A[i];
A[i] = temp;
compHeap--;
refazHeapMax(A, 0, compHeap);
}
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 15 / 17
HeapSort
C´odigo
16
0
14
1
10
2
8
3
7
4
9
5
3
6
2
7
4
8
1
9
16 14 10 8 7 9 3 2 4 1
0 1 2 3 4 5 6 7 8 9
i
void heapSort(int A[]) {
int i, compHeap, temp;
compHeap = A.length;
constroiHeapMax(A);
for(i = A.length-1; i > 0; i--) {
temp = A[0];
A[0] = A[i];
A[i] = temp;
compHeap--;
refazHeapMax(A, 0, compHeap);
}
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 15 / 17
HeapSort
C´odigo
1
0
14
1
10
2
8
3
7
4
9
5
3
6
2
7
4
8
16
9
1 14 10 8 7 9 3 2 4 16
0 1 2 3 4 5 6 7 8 9
i
void heapSort(int A[]) {
int i, compHeap, temp;
compHeap = A.length;
constroiHeapMax(A);
for(i = A.length-1; i > 0; i--) {
temp = A[0];
A[0] = A[i];
A[i] = temp;
compHeap--;
refazHeapMax(A, 0, compHeap);
}
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 15 / 17
HeapSort
C´odigo
1
0
14
1
10
2
8
3
7
4
9
5
3
6
2
7
4
8
16
9
1 14 10 8 7 9 3 2 4 16
0 1 2 3 4 5 6 7 8 9
i
void heapSort(int A[]) {
int i, compHeap, temp;
compHeap = A.length;
constroiHeapMax(A);
for(i = A.length-1; i > 0; i--) {
temp = A[0];
A[0] = A[i];
A[i] = temp;
compHeap--;
refazHeapMax(A, 0, compHeap);
}
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 15 / 17
HeapSort
C´odigo
14
0
8
1
10
2
4
3
7
4
9
5
3
6
2
7
1
8
16
9
14 8 10 4 7 9 3 2 1 16
0 1 2 3 4 5 6 7 8 9
i
void heapSort(int A[]) {
int i, compHeap, temp;
compHeap = A.length;
constroiHeapMax(A);
for(i = A.length-1; i > 0; i--) {
temp = A[0];
A[0] = A[i];
A[i] = temp;
compHeap--;
refazHeapMax(A, 0, compHeap);
}
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 15 / 17
HeapSort
C´odigo
14
0
8
1
10
2
4
3
7
4
9
5
3
6
2
7
1
8
16
9
14 8 10 4 7 9 3 2 1 16
0 1 2 3 4 5 6 7 8 9
i
void heapSort(int A[]) {
int i, compHeap, temp;
compHeap = A.length;
constroiHeapMax(A);
for(i = A.length-1; i > 0; i--) {
temp = A[0];
A[0] = A[i];
A[i] = temp;
compHeap--;
refazHeapMax(A, 0, compHeap);
}
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 15 / 17
HeapSort
C´odigo
1
0
8
1
10
2
4
3
7
4
9
5
3
6
2
7
14
8
16
9
1 8 10 4 7 9 3 2 14 16
0 1 2 3 4 5 6 7 8 9
i
void heapSort(int A[]) {
int i, compHeap, temp;
compHeap = A.length;
constroiHeapMax(A);
for(i = A.length-1; i > 0; i--) {
temp = A[0];
A[0] = A[i];
A[i] = temp;
compHeap--;
refazHeapMax(A, 0, compHeap);
}
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 15 / 17
HeapSort
C´odigo
1
0
8
1
10
2
4
3
7
4
9
5
3
6
2
7
14
8
16
9
1 8 10 4 7 9 3 2 14 16
0 1 2 3 4 5 6 7 8 9
i
void heapSort(int A[]) {
int i, compHeap, temp;
compHeap = A.length;
constroiHeapMax(A);
for(i = A.length-1; i > 0; i--) {
temp = A[0];
A[0] = A[i];
A[i] = temp;
compHeap--;
refazHeapMax(A, 0, compHeap);
}
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 15 / 17
HeapSort
C´odigo
10
0
8
1
9
2
4
3
7
4
1
5
3
6
2
7
14
8
16
9
10 8 9 4 7 1 3 2 14 16
0 1 2 3 4 5 6 7 8 9
i
void heapSort(int A[]) {
int i, compHeap, temp;
compHeap = A.length;
constroiHeapMax(A);
for(i = A.length-1; i > 0; i--) {
temp = A[0];
A[0] = A[i];
A[i] = temp;
compHeap--;
refazHeapMax(A, 0, compHeap);
}
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 15 / 17
HeapSort
C´odigo
10
0
8
1
9
2
4
3
7
4
1
5
3
6
2
7
14
8
16
9
10 8 9 4 7 1 3 2 14 16
0 1 2 3 4 5 6 7 8 9
i
void heapSort(int A[]) {
int i, compHeap, temp;
compHeap = A.length;
constroiHeapMax(A);
for(i = A.length-1; i > 0; i--) {
temp = A[0];
A[0] = A[i];
A[i] = temp;
compHeap--;
refazHeapMax(A, 0, compHeap);
}
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 15 / 17
HeapSort
C´odigo
2
0
8
1
9
2
4
3
7
4
1
5
3
6
10
7
14
8
16
9
2 8 9 4 7 1 3 10 14 16
0 1 2 3 4 5 6 7 8 9
i
void heapSort(int A[]) {
int i, compHeap, temp;
compHeap = A.length;
constroiHeapMax(A);
for(i = A.length-1; i > 0; i--) {
temp = A[0];
A[0] = A[i];
A[i] = temp;
compHeap--;
refazHeapMax(A, 0, compHeap);
}
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 15 / 17
HeapSort
C´odigo
2
0
8
1
9
2
4
3
7
4
1
5
3
6
10
7
14
8
16
9
2 8 9 4 7 1 3 10 14 16
0 1 2 3 4 5 6 7 8 9
i
void heapSort(int A[]) {
int i, compHeap, temp;
compHeap = A.length;
constroiHeapMax(A);
for(i = A.length-1; i > 0; i--) {
temp = A[0];
A[0] = A[i];
A[i] = temp;
compHeap--;
refazHeapMax(A, 0, compHeap);
}
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 15 / 17
HeapSort
C´odigo
9
0
8
1
3
2
4
3
7
4
1
5
2
6
10
7
14
8
16
9
9 8 3 4 7 1 2 10 14 16
0 1 2 3 4 5 6 7 8 9
i
void heapSort(int A[]) {
int i, compHeap, temp;
compHeap = A.length;
constroiHeapMax(A);
for(i = A.length-1; i > 0; i--) {
temp = A[0];
A[0] = A[i];
A[i] = temp;
compHeap--;
refazHeapMax(A, 0, compHeap);
}
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 15 / 17
HeapSort
C´odigo
9
0
8
1
3
2
4
3
7
4
1
5
2
6
10
7
14
8
16
9
9 8 3 4 7 1 2 10 14 16
0 1 2 3 4 5 6 7 8 9
i
void heapSort(int A[]) {
int i, compHeap, temp;
compHeap = A.length;
constroiHeapMax(A);
for(i = A.length-1; i > 0; i--) {
temp = A[0];
A[0] = A[i];
A[i] = temp;
compHeap--;
refazHeapMax(A, 0, compHeap);
}
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 15 / 17
HeapSort
C´odigo
2
0
8
1
3
2
4
3
7
4
1
5
9
6
10
7
14
8
16
9
2 8 3 4 7 1 9 10 14 16
0 1 2 3 4 5 6 7 8 9
i
void heapSort(int A[]) {
int i, compHeap, temp;
compHeap = A.length;
constroiHeapMax(A);
for(i = A.length-1; i > 0; i--) {
temp = A[0];
A[0] = A[i];
A[i] = temp;
compHeap--;
refazHeapMax(A, 0, compHeap);
}
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 15 / 17
HeapSort
C´odigo
2
0
8
1
3
2
4
3
7
4
1
5
9
6
10
7
14
8
16
9
2 8 3 4 7 1 9 10 14 16
0 1 2 3 4 5 6 7 8 9
i
void heapSort(int A[]) {
int i, compHeap, temp;
compHeap = A.length;
constroiHeapMax(A);
for(i = A.length-1; i > 0; i--) {
temp = A[0];
A[0] = A[i];
A[i] = temp;
compHeap--;
refazHeapMax(A, 0, compHeap);
}
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 15 / 17
HeapSort
C´odigo
8
0
7
1
3
2
4
3
2
4
1
5
9
6
10
7
14
8
16
9
8 7 3 4 2 1 9 10 14 16
0 1 2 3 4 5 6 7 8 9
i
void heapSort(int A[]) {
int i, compHeap, temp;
compHeap = A.length;
constroiHeapMax(A);
for(i = A.length-1; i > 0; i--) {
temp = A[0];
A[0] = A[i];
A[i] = temp;
compHeap--;
refazHeapMax(A, 0, compHeap);
}
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 15 / 17
HeapSort
C´odigo
8
0
7
1
3
2
4
3
2
4
1
5
9
6
10
7
14
8
16
9
8 7 3 4 2 1 9 10 14 16
0 1 2 3 4 5 6 7 8 9
i
void heapSort(int A[]) {
int i, compHeap, temp;
compHeap = A.length;
constroiHeapMax(A);
for(i = A.length-1; i > 0; i--) {
temp = A[0];
A[0] = A[i];
A[i] = temp;
compHeap--;
refazHeapMax(A, 0, compHeap);
}
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 15 / 17
HeapSort
C´odigo
1
0
7
1
3
2
4
3
2
4
8
5
9
6
10
7
14
8
16
9
1 7 3 4 2 8 9 10 14 16
0 1 2 3 4 5 6 7 8 9
i
void heapSort(int A[]) {
int i, compHeap, temp;
compHeap = A.length;
constroiHeapMax(A);
for(i = A.length-1; i > 0; i--) {
temp = A[0];
A[0] = A[i];
A[i] = temp;
compHeap--;
refazHeapMax(A, 0, compHeap);
}
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 15 / 17
HeapSort
C´odigo
1
0
7
1
3
2
4
3
2
4
8
5
9
6
10
7
14
8
16
9
1 7 3 4 2 8 9 10 14 16
0 1 2 3 4 5 6 7 8 9
i
void heapSort(int A[]) {
int i, compHeap, temp;
compHeap = A.length;
constroiHeapMax(A);
for(i = A.length-1; i > 0; i--) {
temp = A[0];
A[0] = A[i];
A[i] = temp;
compHeap--;
refazHeapMax(A, 0, compHeap);
}
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 15 / 17
HeapSort
C´odigo
7
0
4
1
3
2
1
3
2
4
8
5
9
6
10
7
14
8
16
9
7 4 3 1 2 8 9 10 14 16
0 1 2 3 4 5 6 7 8 9
i
void heapSort(int A[]) {
int i, compHeap, temp;
compHeap = A.length;
constroiHeapMax(A);
for(i = A.length-1; i > 0; i--) {
temp = A[0];
A[0] = A[i];
A[i] = temp;
compHeap--;
refazHeapMax(A, 0, compHeap);
}
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 15 / 17
HeapSort
C´odigo
7
0
4
1
3
2
1
3
2
4
8
5
9
6
10
7
14
8
16
9
7 4 3 1 2 8 9 10 14 16
0 1 2 3 4 5 6 7 8 9
i
void heapSort(int A[]) {
int i, compHeap, temp;
compHeap = A.length;
constroiHeapMax(A);
for(i = A.length-1; i > 0; i--) {
temp = A[0];
A[0] = A[i];
A[i] = temp;
compHeap--;
refazHeapMax(A, 0, compHeap);
}
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 15 / 17
HeapSort
C´odigo
2
0
4
1
3
2
1
3
7
4
8
5
9
6
10
7
14
8
16
9
2 4 3 1 7 8 9 10 14 16
0 1 2 3 4 5 6 7 8 9
i
void heapSort(int A[]) {
int i, compHeap, temp;
compHeap = A.length;
constroiHeapMax(A);
for(i = A.length-1; i > 0; i--) {
temp = A[0];
A[0] = A[i];
A[i] = temp;
compHeap--;
refazHeapMax(A, 0, compHeap);
}
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 15 / 17
HeapSort
C´odigo
2
0
4
1
3
2
1
3
7
4
8
5
9
6
10
7
14
8
16
9
2 4 3 1 7 8 9 10 14 16
0 1 2 3 4 5 6 7 8 9
i
void heapSort(int A[]) {
int i, compHeap, temp;
compHeap = A.length;
constroiHeapMax(A);
for(i = A.length-1; i > 0; i--) {
temp = A[0];
A[0] = A[i];
A[i] = temp;
compHeap--;
refazHeapMax(A, 0, compHeap);
}
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 15 / 17
HeapSort
C´odigo
4
0
2
1
3
2
1
3
7
4
8
5
9
6
10
7
14
8
16
9
4 2 3 1 7 8 9 10 14 16
0 1 2 3 4 5 6 7 8 9
i
void heapSort(int A[]) {
int i, compHeap, temp;
compHeap = A.length;
constroiHeapMax(A);
for(i = A.length-1; i > 0; i--) {
temp = A[0];
A[0] = A[i];
A[i] = temp;
compHeap--;
refazHeapMax(A, 0, compHeap);
}
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 15 / 17
HeapSort
C´odigo
4
0
2
1
3
2
1
3
7
4
8
5
9
6
10
7
14
8
16
9
4 2 3 1 7 8 9 10 14 16
0 1 2 3 4 5 6 7 8 9
i
void heapSort(int A[]) {
int i, compHeap, temp;
compHeap = A.length;
constroiHeapMax(A);
for(i = A.length-1; i > 0; i--) {
temp = A[0];
A[0] = A[i];
A[i] = temp;
compHeap--;
refazHeapMax(A, 0, compHeap);
}
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 15 / 17
HeapSort
C´odigo
1
0
2
1
3
2
4
3
7
4
8
5
9
6
10
7
14
8
16
9
1 2 3 4 7 8 9 10 14 16
0 1 2 3 4 5 6 7 8 9
i
void heapSort(int A[]) {
int i, compHeap, temp;
compHeap = A.length;
constroiHeapMax(A);
for(i = A.length-1; i > 0; i--) {
temp = A[0];
A[0] = A[i];
A[i] = temp;
compHeap--;
refazHeapMax(A, 0, compHeap);
}
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 15 / 17
HeapSort
C´odigo
1
0
2
1
3
2
4
3
7
4
8
5
9
6
10
7
14
8
16
9
1 2 3 4 7 8 9 10 14 16
0 1 2 3 4 5 6 7 8 9
i
void heapSort(int A[]) {
int i, compHeap, temp;
compHeap = A.length;
constroiHeapMax(A);
for(i = A.length-1; i > 0; i--) {
temp = A[0];
A[0] = A[i];
A[i] = temp;
compHeap--;
refazHeapMax(A, 0, compHeap);
}
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 15 / 17
HeapSort
C´odigo
3
0
2
1
1
2
4
3
7
4
8
5
9
6
10
7
14
8
16
9
3 2 1 4 7 8 9 10 14 16
0 1 2 3 4 5 6 7 8 9
i
void heapSort(int A[]) {
int i, compHeap, temp;
compHeap = A.length;
constroiHeapMax(A);
for(i = A.length-1; i > 0; i--) {
temp = A[0];
A[0] = A[i];
A[i] = temp;
compHeap--;
refazHeapMax(A, 0, compHeap);
}
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 15 / 17
HeapSort
C´odigo
3
0
2
1
1
2
4
3
7
4
8
5
9
6
10
7
14
8
16
9
3 2 1 4 7 8 9 10 14 16
0 1 2 3 4 5 6 7 8 9
i
void heapSort(int A[]) {
int i, compHeap, temp;
compHeap = A.length;
constroiHeapMax(A);
for(i = A.length-1; i > 0; i--) {
temp = A[0];
A[0] = A[i];
A[i] = temp;
compHeap--;
refazHeapMax(A, 0, compHeap);
}
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 15 / 17
HeapSort
C´odigo
1
0
2
1
3
2
4
3
7
4
8
5
9
6
10
7
14
8
16
9
1 2 3 4 7 8 9 10 14 16
0 1 2 3 4 5 6 7 8 9
i
void heapSort(int A[]) {
int i, compHeap, temp;
compHeap = A.length;
constroiHeapMax(A);
for(i = A.length-1; i > 0; i--) {
temp = A[0];
A[0] = A[i];
A[i] = temp;
compHeap--;
refazHeapMax(A, 0, compHeap);
}
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 15 / 17
HeapSort
C´odigo
1
0
2
1
3
2
4
3
7
4
8
5
9
6
10
7
14
8
16
9
1 2 3 4 7 8 9 10 14 16
0 1 2 3 4 5 6 7 8 9
i
void heapSort(int A[]) {
int i, compHeap, temp;
compHeap = A.length;
constroiHeapMax(A);
for(i = A.length-1; i > 0; i--) {
temp = A[0];
A[0] = A[i];
A[i] = temp;
compHeap--;
refazHeapMax(A, 0, compHeap);
}
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 15 / 17
HeapSort
C´odigo
2
0
1
1
3
2
4
3
7
4
8
5
9
6
10
7
14
8
16
9
2 1 3 4 7 8 9 10 14 16
0 1 2 3 4 5 6 7 8 9
i
void heapSort(int A[]) {
int i, compHeap, temp;
compHeap = A.length;
constroiHeapMax(A);
for(i = A.length-1; i > 0; i--) {
temp = A[0];
A[0] = A[i];
A[i] = temp;
compHeap--;
refazHeapMax(A, 0, compHeap);
}
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 15 / 17
HeapSort
C´odigo
2
0
1
1
3
2
4
3
7
4
8
5
9
6
10
7
14
8
16
9
2 1 3 4 7 8 9 10 14 16
0 1 2 3 4 5 6 7 8 9
i
void heapSort(int A[]) {
int i, compHeap, temp;
compHeap = A.length;
constroiHeapMax(A);
for(i = A.length-1; i > 0; i--) {
temp = A[0];
A[0] = A[i];
A[i] = temp;
compHeap--;
refazHeapMax(A, 0, compHeap);
}
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 15 / 17
HeapSort
C´odigo
1
0
2
1
3
2
4
3
7
4
8
5
9
6
10
7
14
8
16
9
1 2 3 4 7 8 9 10 14 16
0 1 2 3 4 5 6 7 8 9
i
void heapSort(int A[]) {
int i, compHeap, temp;
compHeap = A.length;
constroiHeapMax(A);
for(i = A.length-1; i > 0; i--) {
temp = A[0];
A[0] = A[i];
A[i] = temp;
compHeap--;
refazHeapMax(A, 0, compHeap);
}
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 15 / 17
HeapSort
C´odigo
1
0
2
1
3
2
4
3
7
4
8
5
9
6
10
7
14
8
16
9
1 2 3 4 7 8 9 10 14 16
0 1 2 3 4 5 6 7 8 9
i
void heapSort(int A[]) {
int i, compHeap, temp;
compHeap = A.length;
constroiHeapMax(A);
for(i = A.length-1; i > 0; i--) {
temp = A[0];
A[0] = A[i];
A[i] = temp;
compHeap--;
refazHeapMax(A, 0, compHeap);
}
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 15 / 17
HeapSort
C´odigo
1
0
2
1
3
2
4
3
7
4
8
5
9
6
10
7
14
8
16
9
1 2 3 4 7 8 9 10 14 16
0 1 2 3 4 5 6 7 8 9
i
void heapSort(int A[]) {
int i, compHeap, temp;
compHeap = A.length;
constroiHeapMax(A);
for(i = A.length-1; i > 0; i--) {
temp = A[0];
A[0] = A[i];
A[i] = temp;
compHeap--;
refazHeapMax(A, 0, compHeap);
}
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 15 / 17
HeapSort
C´odigo
1
0
2
1
3
2
4
3
7
4
8
5
9
6
10
7
14
8
16
9
1 2 3 4 7 8 9 10 14 16
0 1 2 3 4 5 6 7 8 9
i
void heapSort(int A[]) {
int i, compHeap, temp;
compHeap = A.length;
constroiHeapMax(A);
for(i = A.length-1; i > 0; i--) {
temp = A[0];
A[0] = A[i];
A[i] = temp;
compHeap--;
refazHeapMax(A, 0, compHeap);
}
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 15 / 17
HeapSort
C´odigo
1
0
2
1
3
2
4
3
7
4
8
5
9
6
10
7
14
8
16
9
1 2 3 4 7 8 9 10 14 16
0 1 2 3 4 5 6 7 8 9
i
void heapSort(int A[]) {
int i, compHeap, temp;
compHeap = A.length;
constroiHeapMax(A);
for(i = A.length-1; i > 0; i--) {
temp = A[0];
A[0] = A[i];
A[i] = temp;
compHeap--;
refazHeapMax(A, 0, compHeap);
}
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 15 / 17
HeapSort
C´odigo
Qual a complexidade
desse c´odigo?
void heapSort(int A[]) {
int i, compHeap, temp;
compHeap = A.length;
constroiHeapMax(A);
for(i = A.length-1; i > 0; i--) {
temp = A[0];
A[0] = A[i];
A[i] = temp;
compHeap--;
refazHeapMax(A, 0, compHeap);
}
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 16 / 17
HeapSort
C´odigo
Qual a complexidade
desse c´odigo?
O(n)
void heapSort(int A[]) {
int i, compHeap, temp;
compHeap = A.length;
constroiHeapMax(A);
for(i = A.length-1; i > 0; i--) {
temp = A[0];
A[0] = A[i];
A[i] = temp;
compHeap--;
refazHeapMax(A, 0, compHeap);
}
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 16 / 17
HeapSort
C´odigo
Qual a complexidade
desse c´odigo?
O(n)
+(n − 1)
void heapSort(int A[]) {
int i, compHeap, temp;
compHeap = A.length;
constroiHeapMax(A);
for(i = A.length-1; i > 0; i--) {
temp = A[0];
A[0] = A[i];
A[i] = temp;
compHeap--;
refazHeapMax(A, 0, compHeap);
}
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 16 / 17
HeapSort
C´odigo
Qual a complexidade
desse c´odigo?
O(n)
+(n − 1)×O(log n)
void heapSort(int A[]) {
int i, compHeap, temp;
compHeap = A.length;
constroiHeapMax(A);
for(i = A.length-1; i > 0; i--) {
temp = A[0];
A[0] = A[i];
A[i] = temp;
compHeap--;
refazHeapMax(A, 0, compHeap);
}
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 16 / 17
HeapSort
C´odigo
Qual a complexidade
desse c´odigo?
O(n)
+(n − 1)×O(log n)
O(n log n) portanto
void heapSort(int A[]) {
int i, compHeap, temp;
compHeap = A.length;
constroiHeapMax(A);
for(i = A.length-1; i > 0; i--) {
temp = A[0];
A[0] = A[i];
A[i] = temp;
compHeap--;
refazHeapMax(A, 0, compHeap);
}
}
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 16 / 17
Referˆencias
Cormen, Thomas H., Leiserson, Charles E., Rivest, Ronald L.,
Stein, Clifford. Introduction to Algorithms. 2a ed. MIT Press,
2001.
Ziviani, Nivio. Projeto de Algoritmos: com implementa¸c˜oes
em Java e C++. Cengage. 2007.
Slides dos professores Delano Beder e Marcos Chain
Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 17 / 17

Mais conteúdo relacionado

Mais de Norton Trevisan Roman

(ACH2044) Inteligência Artificial - Aula 18
(ACH2044) Inteligência Artificial - Aula 18(ACH2044) Inteligência Artificial - Aula 18
(ACH2044) Inteligência Artificial - Aula 18
Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 17
(ACH2044) Inteligência Artificial - Aula 17(ACH2044) Inteligência Artificial - Aula 17
(ACH2044) Inteligência Artificial - Aula 17
Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 16
(ACH2044) Inteligência Artificial - Aula 16(ACH2044) Inteligência Artificial - Aula 16
(ACH2044) Inteligência Artificial - Aula 16
Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 15
(ACH2044) Inteligência Artificial - Aula 15(ACH2044) Inteligência Artificial - Aula 15
(ACH2044) Inteligência Artificial - Aula 15
Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 14
(ACH2044) Inteligência Artificial - Aula 14(ACH2044) Inteligência Artificial - Aula 14
(ACH2044) Inteligência Artificial - Aula 14
Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 13
(ACH2044) Inteligência Artificial - Aula 13(ACH2044) Inteligência Artificial - Aula 13
(ACH2044) Inteligência Artificial - Aula 13
Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 12
(ACH2044) Inteligência Artificial - Aula 12(ACH2044) Inteligência Artificial - Aula 12
(ACH2044) Inteligência Artificial - Aula 12
Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 11
(ACH2044) Inteligência Artificial - Aula 11(ACH2044) Inteligência Artificial - Aula 11
(ACH2044) Inteligência Artificial - Aula 11
Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 10
(ACH2044) Inteligência Artificial - Aula 10(ACH2044) Inteligência Artificial - Aula 10
(ACH2044) Inteligência Artificial - Aula 10
Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 09
(ACH2044) Inteligência Artificial - Aula 09(ACH2044) Inteligência Artificial - Aula 09
(ACH2044) Inteligência Artificial - Aula 09
Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 08
(ACH2044) Inteligência Artificial - Aula 08(ACH2044) Inteligência Artificial - Aula 08
(ACH2044) Inteligência Artificial - Aula 08
Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 07
(ACH2044) Inteligência Artificial - Aula 07(ACH2044) Inteligência Artificial - Aula 07
(ACH2044) Inteligência Artificial - Aula 07
Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 06
(ACH2044) Inteligência Artificial - Aula 06(ACH2044) Inteligência Artificial - Aula 06
(ACH2044) Inteligência Artificial - Aula 06
Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 05
(ACH2044) Inteligência Artificial - Aula 05(ACH2044) Inteligência Artificial - Aula 05
(ACH2044) Inteligência Artificial - Aula 05
Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 04
(ACH2044) Inteligência Artificial - Aula 04(ACH2044) Inteligência Artificial - Aula 04
(ACH2044) Inteligência Artificial - Aula 04
Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 03
(ACH2044) Inteligência Artificial - Aula 03(ACH2044) Inteligência Artificial - Aula 03
(ACH2044) Inteligência Artificial - Aula 03
Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 02
(ACH2044) Inteligência Artificial - Aula 02(ACH2044) Inteligência Artificial - Aula 02
(ACH2044) Inteligência Artificial - Aula 02
Norton Trevisan Roman
 
(ACH2001) Introdução à Programação - Aula 23
(ACH2001) Introdução à Programação - Aula 23(ACH2001) Introdução à Programação - Aula 23
(ACH2001) Introdução à Programação - Aula 23
Norton Trevisan Roman
 
(ACH2001) Introdução à Programação - Aula 22
(ACH2001) Introdução à Programação - Aula 22(ACH2001) Introdução à Programação - Aula 22
(ACH2001) Introdução à Programação - Aula 22
Norton Trevisan Roman
 
(ACH2001) Introdução à Programação - Aula 21
(ACH2001) Introdução à Programação - Aula 21(ACH2001) Introdução à Programação - Aula 21
(ACH2001) Introdução à Programação - Aula 21
Norton Trevisan Roman
 

Mais de Norton Trevisan Roman (20)

(ACH2044) Inteligência Artificial - Aula 18
(ACH2044) Inteligência Artificial - Aula 18(ACH2044) Inteligência Artificial - Aula 18
(ACH2044) Inteligência Artificial - Aula 18
 
(ACH2044) Inteligência Artificial - Aula 17
(ACH2044) Inteligência Artificial - Aula 17(ACH2044) Inteligência Artificial - Aula 17
(ACH2044) Inteligência Artificial - Aula 17
 
(ACH2044) Inteligência Artificial - Aula 16
(ACH2044) Inteligência Artificial - Aula 16(ACH2044) Inteligência Artificial - Aula 16
(ACH2044) Inteligência Artificial - Aula 16
 
(ACH2044) Inteligência Artificial - Aula 15
(ACH2044) Inteligência Artificial - Aula 15(ACH2044) Inteligência Artificial - Aula 15
(ACH2044) Inteligência Artificial - Aula 15
 
(ACH2044) Inteligência Artificial - Aula 14
(ACH2044) Inteligência Artificial - Aula 14(ACH2044) Inteligência Artificial - Aula 14
(ACH2044) Inteligência Artificial - Aula 14
 
(ACH2044) Inteligência Artificial - Aula 13
(ACH2044) Inteligência Artificial - Aula 13(ACH2044) Inteligência Artificial - Aula 13
(ACH2044) Inteligência Artificial - Aula 13
 
(ACH2044) Inteligência Artificial - Aula 12
(ACH2044) Inteligência Artificial - Aula 12(ACH2044) Inteligência Artificial - Aula 12
(ACH2044) Inteligência Artificial - Aula 12
 
(ACH2044) Inteligência Artificial - Aula 11
(ACH2044) Inteligência Artificial - Aula 11(ACH2044) Inteligência Artificial - Aula 11
(ACH2044) Inteligência Artificial - Aula 11
 
(ACH2044) Inteligência Artificial - Aula 10
(ACH2044) Inteligência Artificial - Aula 10(ACH2044) Inteligência Artificial - Aula 10
(ACH2044) Inteligência Artificial - Aula 10
 
(ACH2044) Inteligência Artificial - Aula 09
(ACH2044) Inteligência Artificial - Aula 09(ACH2044) Inteligência Artificial - Aula 09
(ACH2044) Inteligência Artificial - Aula 09
 
(ACH2044) Inteligência Artificial - Aula 08
(ACH2044) Inteligência Artificial - Aula 08(ACH2044) Inteligência Artificial - Aula 08
(ACH2044) Inteligência Artificial - Aula 08
 
(ACH2044) Inteligência Artificial - Aula 07
(ACH2044) Inteligência Artificial - Aula 07(ACH2044) Inteligência Artificial - Aula 07
(ACH2044) Inteligência Artificial - Aula 07
 
(ACH2044) Inteligência Artificial - Aula 06
(ACH2044) Inteligência Artificial - Aula 06(ACH2044) Inteligência Artificial - Aula 06
(ACH2044) Inteligência Artificial - Aula 06
 
(ACH2044) Inteligência Artificial - Aula 05
(ACH2044) Inteligência Artificial - Aula 05(ACH2044) Inteligência Artificial - Aula 05
(ACH2044) Inteligência Artificial - Aula 05
 
(ACH2044) Inteligência Artificial - Aula 04
(ACH2044) Inteligência Artificial - Aula 04(ACH2044) Inteligência Artificial - Aula 04
(ACH2044) Inteligência Artificial - Aula 04
 
(ACH2044) Inteligência Artificial - Aula 03
(ACH2044) Inteligência Artificial - Aula 03(ACH2044) Inteligência Artificial - Aula 03
(ACH2044) Inteligência Artificial - Aula 03
 
(ACH2044) Inteligência Artificial - Aula 02
(ACH2044) Inteligência Artificial - Aula 02(ACH2044) Inteligência Artificial - Aula 02
(ACH2044) Inteligência Artificial - Aula 02
 
(ACH2001) Introdução à Programação - Aula 23
(ACH2001) Introdução à Programação - Aula 23(ACH2001) Introdução à Programação - Aula 23
(ACH2001) Introdução à Programação - Aula 23
 
(ACH2001) Introdução à Programação - Aula 22
(ACH2001) Introdução à Programação - Aula 22(ACH2001) Introdução à Programação - Aula 22
(ACH2001) Introdução à Programação - Aula 22
 
(ACH2001) Introdução à Programação - Aula 21
(ACH2001) Introdução à Programação - Aula 21(ACH2001) Introdução à Programação - Aula 21
(ACH2001) Introdução à Programação - Aula 21
 

Último

Redação e Leitura_7º ano_58_Produção de cordel .pptx
Redação e Leitura_7º ano_58_Produção de cordel .pptxRedação e Leitura_7º ano_58_Produção de cordel .pptx
Redação e Leitura_7º ano_58_Produção de cordel .pptx
DECIOMAURINARAMOS
 
000. Para rezar o terço - Junho - mês do Sagrado Coração de Jesús.pdf
000. Para rezar o terço - Junho - mês do Sagrado Coração de Jesús.pdf000. Para rezar o terço - Junho - mês do Sagrado Coração de Jesús.pdf
000. Para rezar o terço - Junho - mês do Sagrado Coração de Jesús.pdf
YeniferGarcia36
 
Treinamento NR 38 - CORPO PRINCIPAL da NORMA.pptx
Treinamento NR 38 - CORPO PRINCIPAL da NORMA.pptxTreinamento NR 38 - CORPO PRINCIPAL da NORMA.pptx
Treinamento NR 38 - CORPO PRINCIPAL da NORMA.pptx
MarcosPaulo777883
 
Vogais Ilustrados para alfabetização infantil
Vogais Ilustrados para alfabetização infantilVogais Ilustrados para alfabetização infantil
Vogais Ilustrados para alfabetização infantil
mamaeieby
 
O que é um Ménage a Trois Contemporâneo .pdf
O que é um Ménage a Trois Contemporâneo .pdfO que é um Ménage a Trois Contemporâneo .pdf
O que é um Ménage a Trois Contemporâneo .pdf
Pastor Robson Colaço
 
Atividade de reforço de matemática 2º ano
Atividade de reforço de matemática 2º anoAtividade de reforço de matemática 2º ano
Atividade de reforço de matemática 2º ano
fernandacosta37763
 
Fernão Lopes. pptx
Fernão Lopes.                       pptxFernão Lopes.                       pptx
Fernão Lopes. pptx
TomasSousa7
 
Atividades de Inglês e Espanhol para Imprimir - Alfabetinho
Atividades de Inglês e Espanhol para Imprimir - AlfabetinhoAtividades de Inglês e Espanhol para Imprimir - Alfabetinho
Atividades de Inglês e Espanhol para Imprimir - Alfabetinho
MateusTavares54
 
Famílias Que Contribuíram Para O Crescimento Do Assaré
Famílias Que Contribuíram Para O Crescimento Do AssaréFamílias Que Contribuíram Para O Crescimento Do Assaré
Famílias Que Contribuíram Para O Crescimento Do Assaré
profesfrancleite
 
1_10_06_2024_Criança e Cultura Escrita, Ana Maria de Oliveira Galvão.pdf
1_10_06_2024_Criança e Cultura Escrita, Ana Maria de Oliveira Galvão.pdf1_10_06_2024_Criança e Cultura Escrita, Ana Maria de Oliveira Galvão.pdf
1_10_06_2024_Criança e Cultura Escrita, Ana Maria de Oliveira Galvão.pdf
SILVIAREGINANAZARECA
 
OS elementos de uma boa Redação para o ENEM.pdf
OS elementos de uma boa Redação para o ENEM.pdfOS elementos de uma boa Redação para o ENEM.pdf
OS elementos de uma boa Redação para o ENEM.pdf
AmiltonAparecido1
 
UFCD_10145_Enquadramento do setor farmacêutico_indice.pdf
UFCD_10145_Enquadramento do setor farmacêutico_indice.pdfUFCD_10145_Enquadramento do setor farmacêutico_indice.pdf
UFCD_10145_Enquadramento do setor farmacêutico_indice.pdf
Manuais Formação
 
AVALIAÇÃO DIAGNÓSTICA - 8º ANO 2024.pptx
AVALIAÇÃO DIAGNÓSTICA - 8º ANO 2024.pptxAVALIAÇÃO DIAGNÓSTICA - 8º ANO 2024.pptx
AVALIAÇÃO DIAGNÓSTICA - 8º ANO 2024.pptx
AntonioVieira539017
 
Aula história , caracteristicas e esteriótipos em relação a DANÇA DE SALAO.pptx
Aula história , caracteristicas e esteriótipos em relação a DANÇA DE SALAO.pptxAula história , caracteristicas e esteriótipos em relação a DANÇA DE SALAO.pptx
Aula história , caracteristicas e esteriótipos em relação a DANÇA DE SALAO.pptx
edivirgesribeiro1
 
Reino-Vegetal plantas e demais conceitos .pptx
Reino-Vegetal plantas e demais conceitos .pptxReino-Vegetal plantas e demais conceitos .pptx
Reino-Vegetal plantas e demais conceitos .pptx
CarinaSantos916505
 
UFCD_3546_Prevenção e primeiros socorros_geriatria.pdf
UFCD_3546_Prevenção e primeiros socorros_geriatria.pdfUFCD_3546_Prevenção e primeiros socorros_geriatria.pdf
UFCD_3546_Prevenção e primeiros socorros_geriatria.pdf
Manuais Formação
 
Atividade letra da música - Espalhe Amor, Anavitória.
Atividade letra da música - Espalhe  Amor, Anavitória.Atividade letra da música - Espalhe  Amor, Anavitória.
Atividade letra da música - Espalhe Amor, Anavitória.
Mary Alvarenga
 
GÊNERO TEXTUAL - POEMA.pptx
GÊNERO      TEXTUAL     -     POEMA.pptxGÊNERO      TEXTUAL     -     POEMA.pptx
GÊNERO TEXTUAL - POEMA.pptx
Marlene Cunhada
 
UFCD_10949_Lojas e-commerce no-code_índice.pdf
UFCD_10949_Lojas e-commerce no-code_índice.pdfUFCD_10949_Lojas e-commerce no-code_índice.pdf
UFCD_10949_Lojas e-commerce no-code_índice.pdf
Manuais Formação
 
Livro: Pedagogia do Oprimido - Paulo Freire
Livro: Pedagogia do Oprimido - Paulo FreireLivro: Pedagogia do Oprimido - Paulo Freire
Livro: Pedagogia do Oprimido - Paulo Freire
WelberMerlinCardoso
 

Último (20)

Redação e Leitura_7º ano_58_Produção de cordel .pptx
Redação e Leitura_7º ano_58_Produção de cordel .pptxRedação e Leitura_7º ano_58_Produção de cordel .pptx
Redação e Leitura_7º ano_58_Produção de cordel .pptx
 
000. Para rezar o terço - Junho - mês do Sagrado Coração de Jesús.pdf
000. Para rezar o terço - Junho - mês do Sagrado Coração de Jesús.pdf000. Para rezar o terço - Junho - mês do Sagrado Coração de Jesús.pdf
000. Para rezar o terço - Junho - mês do Sagrado Coração de Jesús.pdf
 
Treinamento NR 38 - CORPO PRINCIPAL da NORMA.pptx
Treinamento NR 38 - CORPO PRINCIPAL da NORMA.pptxTreinamento NR 38 - CORPO PRINCIPAL da NORMA.pptx
Treinamento NR 38 - CORPO PRINCIPAL da NORMA.pptx
 
Vogais Ilustrados para alfabetização infantil
Vogais Ilustrados para alfabetização infantilVogais Ilustrados para alfabetização infantil
Vogais Ilustrados para alfabetização infantil
 
O que é um Ménage a Trois Contemporâneo .pdf
O que é um Ménage a Trois Contemporâneo .pdfO que é um Ménage a Trois Contemporâneo .pdf
O que é um Ménage a Trois Contemporâneo .pdf
 
Atividade de reforço de matemática 2º ano
Atividade de reforço de matemática 2º anoAtividade de reforço de matemática 2º ano
Atividade de reforço de matemática 2º ano
 
Fernão Lopes. pptx
Fernão Lopes.                       pptxFernão Lopes.                       pptx
Fernão Lopes. pptx
 
Atividades de Inglês e Espanhol para Imprimir - Alfabetinho
Atividades de Inglês e Espanhol para Imprimir - AlfabetinhoAtividades de Inglês e Espanhol para Imprimir - Alfabetinho
Atividades de Inglês e Espanhol para Imprimir - Alfabetinho
 
Famílias Que Contribuíram Para O Crescimento Do Assaré
Famílias Que Contribuíram Para O Crescimento Do AssaréFamílias Que Contribuíram Para O Crescimento Do Assaré
Famílias Que Contribuíram Para O Crescimento Do Assaré
 
1_10_06_2024_Criança e Cultura Escrita, Ana Maria de Oliveira Galvão.pdf
1_10_06_2024_Criança e Cultura Escrita, Ana Maria de Oliveira Galvão.pdf1_10_06_2024_Criança e Cultura Escrita, Ana Maria de Oliveira Galvão.pdf
1_10_06_2024_Criança e Cultura Escrita, Ana Maria de Oliveira Galvão.pdf
 
OS elementos de uma boa Redação para o ENEM.pdf
OS elementos de uma boa Redação para o ENEM.pdfOS elementos de uma boa Redação para o ENEM.pdf
OS elementos de uma boa Redação para o ENEM.pdf
 
UFCD_10145_Enquadramento do setor farmacêutico_indice.pdf
UFCD_10145_Enquadramento do setor farmacêutico_indice.pdfUFCD_10145_Enquadramento do setor farmacêutico_indice.pdf
UFCD_10145_Enquadramento do setor farmacêutico_indice.pdf
 
AVALIAÇÃO DIAGNÓSTICA - 8º ANO 2024.pptx
AVALIAÇÃO DIAGNÓSTICA - 8º ANO 2024.pptxAVALIAÇÃO DIAGNÓSTICA - 8º ANO 2024.pptx
AVALIAÇÃO DIAGNÓSTICA - 8º ANO 2024.pptx
 
Aula história , caracteristicas e esteriótipos em relação a DANÇA DE SALAO.pptx
Aula história , caracteristicas e esteriótipos em relação a DANÇA DE SALAO.pptxAula história , caracteristicas e esteriótipos em relação a DANÇA DE SALAO.pptx
Aula história , caracteristicas e esteriótipos em relação a DANÇA DE SALAO.pptx
 
Reino-Vegetal plantas e demais conceitos .pptx
Reino-Vegetal plantas e demais conceitos .pptxReino-Vegetal plantas e demais conceitos .pptx
Reino-Vegetal plantas e demais conceitos .pptx
 
UFCD_3546_Prevenção e primeiros socorros_geriatria.pdf
UFCD_3546_Prevenção e primeiros socorros_geriatria.pdfUFCD_3546_Prevenção e primeiros socorros_geriatria.pdf
UFCD_3546_Prevenção e primeiros socorros_geriatria.pdf
 
Atividade letra da música - Espalhe Amor, Anavitória.
Atividade letra da música - Espalhe  Amor, Anavitória.Atividade letra da música - Espalhe  Amor, Anavitória.
Atividade letra da música - Espalhe Amor, Anavitória.
 
GÊNERO TEXTUAL - POEMA.pptx
GÊNERO      TEXTUAL     -     POEMA.pptxGÊNERO      TEXTUAL     -     POEMA.pptx
GÊNERO TEXTUAL - POEMA.pptx
 
UFCD_10949_Lojas e-commerce no-code_índice.pdf
UFCD_10949_Lojas e-commerce no-code_índice.pdfUFCD_10949_Lojas e-commerce no-code_índice.pdf
UFCD_10949_Lojas e-commerce no-code_índice.pdf
 
Livro: Pedagogia do Oprimido - Paulo Freire
Livro: Pedagogia do Oprimido - Paulo FreireLivro: Pedagogia do Oprimido - Paulo Freire
Livro: Pedagogia do Oprimido - Paulo Freire
 

(ACH2002) Introdução à Análise de Algoritmos - Aula 17

  • 1. Aula 17 – Heaps e Heapsort Norton Trevisan Roman norton@usp.br 18 de outubro de 2018 Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 1 / 17
  • 2. Heaps Mantendo a Propriedade do Heap Vimos que, no caso de alguma mudan¸ca no heap alterar sua propriedade: 16 1 4 2 10 3 14 4 7 5 9 6 3 7 2 8 8 9 1 10 Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 2 / 17
  • 3. Heaps Mantendo a Propriedade do Heap Vimos que, no caso de alguma mudan¸ca no heap alterar sua propriedade: Trocamos o elemento problem´atico de lugar com o maior filho 16 1 4 2 10 3 14 4 7 5 9 6 3 7 2 8 8 9 1 10 Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 2 / 17
  • 4. Heaps Mantendo a Propriedade do Heap Vimos que, no caso de alguma mudan¸ca no heap alterar sua propriedade: Trocamos o elemento problem´atico de lugar com o maior filho 16 1 14 2 10 3 4 4 7 5 9 6 3 7 2 8 8 9 1 10 Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 2 / 17
  • 5. Heaps Mantendo a Propriedade do Heap Vimos que, no caso de alguma mudan¸ca no heap alterar sua propriedade: Trocamos o elemento problem´atico de lugar com o maior filho 16 1 14 2 10 3 4 4 7 5 9 6 3 7 2 8 8 9 1 10 E repetimos o procedimento enquanto houver viola¸c˜ao da propriedade Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 2 / 17
  • 6. Heaps Mantendo a Propriedade do Heap Vimos que, no caso de alguma mudan¸ca no heap alterar sua propriedade: Trocamos o elemento problem´atico de lugar com o maior filho 16 1 14 2 10 3 8 4 7 5 9 6 3 7 2 8 4 9 1 10 E repetimos o procedimento enquanto houver viola¸c˜ao da propriedade Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 2 / 17
  • 7. Heaps Mantendo a Propriedade do Heap Vimos que, no caso de alguma mudan¸ca no heap alterar sua propriedade: Trocamos o elemento problem´atico de lugar com o maior filho 16 1 14 2 10 3 8 4 7 5 9 6 3 7 2 8 4 9 1 10 E repetimos o procedimento enquanto houver viola¸c˜ao da propriedade Empurrando assim o elemento problem´atico para baixo no heap, at´e seu devido lugar Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 2 / 17
  • 8. Heaps Mantendo a Propriedade do Heap Vimos tamb´em o procedimento void refazHeapMax(int A[], int i, int compHeap) que fazia essa manuten¸c˜ao no heap em O(log n) Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 3 / 17
  • 9. Heaps Mantendo a Propriedade do Heap Vimos tamb´em o procedimento void refazHeapMax(int A[], int i, int compHeap) que fazia essa manuten¸c˜ao no heap em O(log n) Como ent˜ao constru´ımos um heap? Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 3 / 17
  • 10. Heaps Mantendo a Propriedade do Heap Vimos tamb´em o procedimento void refazHeapMax(int A[], int i, int compHeap) que fazia essa manuten¸c˜ao no heap em O(log n) Como ent˜ao constru´ımos um heap? Uma maneira ´e usar nosso refazHeapMax para converter um arranjo A[1..n] em um heap m´aximo Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 3 / 17
  • 11. Heaps Construindo o Heap Note que, quando representamos o heap com o arranjo A[1..n], as folhas ficam nos n´os que v˜ao de n/2 + 1 a n Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 4 / 17
  • 12. Heaps Construindo o Heap Note que, quando representamos o heap com o arranjo A[1..n], as folhas ficam nos n´os que v˜ao de n/2 + 1 a n Ou, alternativamente, nos elementos de ´ındice n/2 a n − 1, se tomarmos o arranjo como A[0..n − 1] Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 4 / 17
  • 13. Heaps Construindo o Heap Note que, quando representamos o heap com o arranjo A[1..n], as folhas ficam nos n´os que v˜ao de n/2 + 1 a n Ou, alternativamente, nos elementos de ´ındice n/2 a n − 1, se tomarmos o arranjo como A[0..n − 1] Mesmo? Suponha o arranjo A[0..n − 1] Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 4 / 17
  • 14. Heaps Construindo o Heap Note que, quando representamos o heap com o arranjo A[1..n], as folhas ficam nos n´os que v˜ao de n/2 + 1 a n Ou, alternativamente, nos elementos de ´ındice n/2 a n − 1, se tomarmos o arranjo como A[0..n − 1] Mesmo? Suponha o arranjo A[0..n − 1] Imagine que A[ n/2 ] . . . A[n − 1] n˜ao contenham apenas folhas Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 4 / 17
  • 15. Heaps Construindo o Heap Note que, quando representamos o heap com o arranjo A[1..n], as folhas ficam nos n´os que v˜ao de n/2 + 1 a n Ou, alternativamente, nos elementos de ´ındice n/2 a n − 1, se tomarmos o arranjo como A[0..n − 1] Mesmo? Suponha o arranjo A[0..n − 1] Imagine que A[ n/2 ] . . . A[n − 1] n˜ao contenham apenas folhas Isso significa que existe (pelo menos) um elemento A[k], n/2 ≤ k ≤ n − 1 que n˜ao ´e folha Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 4 / 17
  • 16. Heaps Construindo o Heap O que significa que existe um A[k ], n/2 ≤ k ≤ n − 1 no heap que ´e filho desse elemento A[k] Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 5 / 17
  • 17. Heaps Construindo o Heap O que significa que existe um A[k ], n/2 ≤ k ≤ n − 1 no heap que ´e filho desse elemento A[k] Mas, pela regra do heap, um filho de A[k] estaria nas posi¸c˜oes k = 2k + 1 ou k = 2k + 2 Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 5 / 17
  • 18. Heaps Construindo o Heap O que significa que existe um A[k ], n/2 ≤ k ≤ n − 1 no heap que ´e filho desse elemento A[k] Mas, pela regra do heap, um filho de A[k] estaria nas posi¸c˜oes k = 2k + 1 ou k = 2k + 2 Como k ≥ n/2 , ent˜ao esse elemento estaria em k ≥ 2n/2 + 1 ou em k ≥ 2n/2 + 2 Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 5 / 17
  • 19. Heaps Construindo o Heap O que significa que existe um A[k ], n/2 ≤ k ≤ n − 1 no heap que ´e filho desse elemento A[k] Mas, pela regra do heap, um filho de A[k] estaria nas posi¸c˜oes k = 2k + 1 ou k = 2k + 2 Como k ≥ n/2 , ent˜ao esse elemento estaria em k ≥ 2n/2 + 1 ou em k ≥ 2n/2 + 2 Ou seja, k ≥ n + 1 ou em k ≥ n + 2. Fora, portanto, do arranjo Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 5 / 17
  • 20. Heaps Construindo o Heap O que significa que existe um A[k ], n/2 ≤ k ≤ n − 1 no heap que ´e filho desse elemento A[k] Mas, pela regra do heap, um filho de A[k] estaria nas posi¸c˜oes k = 2k + 1 ou k = 2k + 2 Como k ≥ n/2 , ent˜ao esse elemento estaria em k ≥ 2n/2 + 1 ou em k ≥ 2n/2 + 2 Ou seja, k ≥ n + 1 ou em k ≥ n + 2. Fora, portanto, do arranjo Ent˜ao sim, as folhas ficam nos n´os que v˜ao de n/2 + 1 a n Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 5 / 17
  • 21. Heaps Construindo o Heap As folhas de um heap podem ser vistas como heaps de 1 ´unico elemento Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 6 / 17
  • 22. Heaps Construindo o Heap As folhas de um heap podem ser vistas como heaps de 1 ´unico elemento Podemos ent˜ao considerar cada elemento A[k], n/2 ≤ k ≤ n − 1 como um heap Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 6 / 17
  • 23. Heaps Construindo o Heap As folhas de um heap podem ser vistas como heaps de 1 ´unico elemento Podemos ent˜ao considerar cada elemento A[k], n/2 ≤ k ≤ n − 1 como um heap E a partir desses, construir o resto do heap, numa estrat´egia bottom-up Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 6 / 17
  • 24. Heaps Construindo o Heap As folhas de um heap podem ser vistas como heaps de 1 ´unico elemento Podemos ent˜ao considerar cada elemento A[k], n/2 ≤ k ≤ n − 1 como um heap E a partir desses, construir o resto do heap, numa estrat´egia bottom-up Como? Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 6 / 17
  • 25. Heaps Construindo o Heap Iniciamos com esses heaps de 1 elemento (A[ n/2 ] at´e A[n − 1]) Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 7 / 17
  • 26. Heaps Construindo o Heap Iniciamos com esses heaps de 1 elemento (A[ n/2 ] at´e A[n − 1]) Chamamos ent˜ao refazHeapMax a partir da posi¸c˜ao n/2 − 1 descendo at´e 0 Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 7 / 17
  • 27. Heaps Construindo o Heap Iniciamos com esses heaps de 1 elemento (A[ n/2 ] at´e A[n − 1]) Chamamos ent˜ao refazHeapMax a partir da posi¸c˜ao n/2 − 1 descendo at´e 0 Como se tiv´essemos adicionado um elemento ao heap, em seu in´ıcio, e agora tiv´essemos que manter sua propriedade Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 7 / 17
  • 28. Heaps Construindo o Heap Iniciamos com esses heaps de 1 elemento (A[ n/2 ] at´e A[n − 1]) Chamamos ent˜ao refazHeapMax a partir da posi¸c˜ao n/2 − 1 descendo at´e 0 Como se tiv´essemos adicionado um elemento ao heap, em seu in´ıcio, e agora tiv´essemos que manter sua propriedade Repetimos ent˜ao a partir da posi¸c˜ao n/2 − 2 etc, at´e a posi¸c˜ao 0 Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 7 / 17
  • 29. Heaps Construindo o Heap Iniciamos com esses heaps de 1 elemento (A[ n/2 ] at´e A[n − 1]) Chamamos ent˜ao refazHeapMax a partir da posi¸c˜ao n/2 − 1 descendo at´e 0 Como se tiv´essemos adicionado um elemento ao heap, em seu in´ıcio, e agora tiv´essemos que manter sua propriedade Repetimos ent˜ao a partir da posi¸c˜ao n/2 − 2 etc, at´e a posi¸c˜ao 0 Ou seja, um a um adicionamos os demais elementos Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 7 / 17
  • 30. Heaps Construindo o Heap void constroiHeapMax(int[] A) { int compHeap = A.length; for(int i = A.length/2 - 1; i >= 0; i--) refazHeapMax(A, i, compHeap); } Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 8 / 17
  • 31. Heaps Construindo o Heap Para cada elemento, da metade at´e a primeira posi¸c˜ao void constroiHeapMax(int[] A) { int compHeap = A.length; for(int i = A.length/2 - 1; i >= 0; i--) refazHeapMax(A, i, compHeap); } Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 8 / 17
  • 32. Heaps Construindo o Heap Garanto a propriedade do heap a partir desse elemento void constroiHeapMax(int[] A) { int compHeap = A.length; for(int i = A.length/2 - 1; i >= 0; i--) refazHeapMax(A, i, compHeap); } Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 8 / 17
  • 33. Heaps Construindo o Heap void constroiHeapMax(int[] A) { int compHeap = A.length; for(int i = A.length/2 - 1; i >= 0; i--) refazHeapMax(A,i,compHeap); } Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 9 / 17
  • 34. Heaps Construindo o Heap 4 0 1 1 3 2 2 3 16 4 9 5 10 6 14 7 8 8 7 9 4 1 3 2 16 9 10 14 8 7 0 1 2 3 4 5 6 7 8 9 void constroiHeapMax(int[] A) { int compHeap = A.length; for(int i = A.length/2 - 1; i >= 0; i--) refazHeapMax(A,i,compHeap); } Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 9 / 17
  • 35. Heaps Construindo o Heap 4 0 1 1 3 2 2 3 16 4 9 5 10 6 14 7 8 8 7 9 4 1 3 2 16 9 10 14 8 7 0 1 2 3 4 5 6 7 8 9 void constroiHeapMax(int[] A) { int compHeap = A.length; for(int i = A.length/2 - 1; i >= 0; i--) refazHeapMax(A,i,compHeap); } Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 9 / 17
  • 36. Heaps Construindo o Heap 4 0 1 1 3 2 2 3 16 4 9 5 10 6 14 7 8 8 7 9 4 1 3 2 16 9 10 14 8 7 0 1 2 3 4 5 6 7 8 9 i void constroiHeapMax(int[] A) { int compHeap = A.length; for(int i = A.length/2 - 1; i >= 0; i--) refazHeapMax(A,i,compHeap); } Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 9 / 17
  • 37. Heaps Construindo o Heap 4 0 1 1 3 2 2 3 16 4 9 5 10 6 14 7 8 8 7 9 4 1 3 2 16 9 10 14 8 7 0 1 2 3 4 5 6 7 8 9 i void constroiHeapMax(int[] A) { int compHeap = A.length; for(int i = A.length/2 - 1; i >= 0; i--) refazHeapMax(A,i,compHeap); } Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 9 / 17
  • 38. Heaps Construindo o Heap 4 0 1 1 3 2 2 3 16 4 9 5 10 6 14 7 8 8 7 9 4 1 3 2 16 9 10 14 8 7 0 1 2 3 4 5 6 7 8 9 i void constroiHeapMax(int[] A) { int compHeap = A.length; for(int i = A.length/2 - 1; i >= 0; i--) refazHeapMax(A,i,compHeap); } Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 9 / 17
  • 39. Heaps Construindo o Heap 4 0 1 1 3 2 14 3 16 4 9 5 10 6 2 7 8 8 7 9 4 1 3 14 16 9 10 2 8 7 0 1 2 3 4 5 6 7 8 9 i void constroiHeapMax(int[] A) { int compHeap = A.length; for(int i = A.length/2 - 1; i >= 0; i--) refazHeapMax(A,i,compHeap); } Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 9 / 17
  • 40. Heaps Construindo o Heap 4 0 1 1 3 2 14 3 16 4 9 5 10 6 2 7 8 8 7 9 4 1 3 14 16 9 10 2 8 7 0 1 2 3 4 5 6 7 8 9 i void constroiHeapMax(int[] A) { int compHeap = A.length; for(int i = A.length/2 - 1; i >= 0; i--) refazHeapMax(A,i,compHeap); } Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 9 / 17
  • 41. Heaps Construindo o Heap 4 0 1 1 10 2 14 3 16 4 9 5 3 6 2 7 8 8 7 9 4 1 10 14 16 9 3 2 8 7 0 1 2 3 4 5 6 7 8 9 i void constroiHeapMax(int[] A) { int compHeap = A.length; for(int i = A.length/2 - 1; i >= 0; i--) refazHeapMax(A,i,compHeap); } Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 9 / 17
  • 42. Heaps Construindo o Heap 4 0 1 1 10 2 14 3 16 4 9 5 3 6 2 7 8 8 7 9 4 1 10 14 16 9 3 2 8 7 0 1 2 3 4 5 6 7 8 9 i void constroiHeapMax(int[] A) { int compHeap = A.length; for(int i = A.length/2 - 1; i >= 0; i--) refazHeapMax(A,i,compHeap); } Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 9 / 17
  • 43. Heaps Construindo o Heap 4 0 16 1 10 2 14 3 7 4 9 5 3 6 2 7 8 8 1 9 4 16 10 14 7 9 3 2 8 1 0 1 2 3 4 5 6 7 8 9 i void constroiHeapMax(int[] A) { int compHeap = A.length; for(int i = A.length/2 - 1; i >= 0; i--) refazHeapMax(A,i,compHeap); } Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 9 / 17
  • 44. Heaps Construindo o Heap 4 0 16 1 10 2 14 3 7 4 9 5 3 6 2 7 8 8 1 9 4 16 10 14 7 9 3 2 8 1 0 1 2 3 4 5 6 7 8 9 i void constroiHeapMax(int[] A) { int compHeap = A.length; for(int i = A.length/2 - 1; i >= 0; i--) refazHeapMax(A,i,compHeap); } Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 9 / 17
  • 45. Heaps Construindo o Heap 16 0 14 1 10 2 8 3 7 4 9 5 3 6 2 7 4 8 1 9 16 14 10 8 7 9 3 2 4 1 0 1 2 3 4 5 6 7 8 9 i void constroiHeapMax(int[] A) { int compHeap = A.length; for(int i = A.length/2 - 1; i >= 0; i--) refazHeapMax(A,i,compHeap); } Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 9 / 17
  • 46. Heaps Construindo o Heap E qual a complexidade desse c´odigo? void constroiHeapMax(int[] A) { int compHeap = A.length; for(int i = A.length/2 - 1; i >= 0; i--) refazHeapMax(A,i,compHeap); } Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 10 / 17
  • 47. Heaps Construindo o Heap E qual a complexidade desse c´odigo? O(log n) void constroiHeapMax(int[] A) { int compHeap = A.length; for(int i = A.length/2 - 1; i >= 0; i--) refazHeapMax(A,i,compHeap); } Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 10 / 17
  • 48. Heaps Construindo o Heap E qual a complexidade desse c´odigo? O(log n)×O(n) void constroiHeapMax(int[] A) { int compHeap = A.length; for(int i = A.length/2 - 1; i >= 0; i--) refazHeapMax(A,i,compHeap); } Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 10 / 17
  • 49. Heaps Construindo o Heap E qual a complexidade desse c´odigo? O(log n)×O(n) Portanto, O(n log n) void constroiHeapMax(int[] A) { int compHeap = A.length; for(int i = A.length/2 - 1; i >= 0; i--) refazHeapMax(A,i,compHeap); } Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 10 / 17
  • 50. Heaps Construindo o Heap E qual a complexidade desse c´odigo? O(log n)×O(n) Portanto, O(n log n) void constroiHeapMax(int[] A) { int compHeap = A.length; for(int i = A.length/2 - 1; i >= 0; i--) refazHeapMax(A,i,compHeap); } Mas isso pode melhorar... Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 10 / 17
  • 51. Heaps Construindo o Heap E qual a complexidade desse c´odigo? O(log n)×O(n) Portanto, O(n log n) void constroiHeapMax(int[] A) { int compHeap = A.length; for(int i = A.length/2 - 1; i >= 0; i--) refazHeapMax(A,i,compHeap); } Mas isso pode melhorar... De fato, pode-se demonstrar que um limite mais apertado seria O(n) Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 10 / 17
  • 52. Heaps Construindo o Heap E qual a complexidade desse c´odigo? O(log n)×O(n) Portanto, O(n log n) void constroiHeapMax(int[] A) { int compHeap = A.length; for(int i = A.length/2 - 1; i >= 0; i--) refazHeapMax(A,i,compHeap); } Mas isso pode melhorar... De fato, pode-se demonstrar que um limite mais apertado seria O(n) Ver em Cormen et al. “Introduction to Algorithms”. 2a ed. MIT Press, 2001. Pp. 133-135. Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 10 / 17
  • 53. HeapSort HeapSort Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 11 / 17
  • 54. Projeto por Indu¸c˜ao Fraca Quarta Alternativa Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 12 / 17
  • 55. Projeto por Indu¸c˜ao Fraca Quarta Alternativa Base: n = 1. Um ´unico elemento est´a ordenado Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 12 / 17
  • 56. Projeto por Indu¸c˜ao Fraca Quarta Alternativa Base: n = 1. Um ´unico elemento est´a ordenado H.I.: Sei ordenar um conjunto de n − 1 ≥ 1 valores Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 12 / 17
  • 57. Projeto por Indu¸c˜ao Fraca Quarta Alternativa Base: n = 1. Um ´unico elemento est´a ordenado H.I.: Sei ordenar um conjunto de n − 1 ≥ 1 valores Passo: Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 12 / 17
  • 58. Projeto por Indu¸c˜ao Fraca Quarta Alternativa Base: n = 1. Um ´unico elemento est´a ordenado H.I.: Sei ordenar um conjunto de n − 1 ≥ 1 valores Passo: Seja S um conjunto de n ≥ 2 valores, organizados na forma de um heap m´aximo Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 12 / 17
  • 59. Projeto por Indu¸c˜ao Fraca Quarta Alternativa Base: n = 1. Um ´unico elemento est´a ordenado H.I.: Sei ordenar um conjunto de n − 1 ≥ 1 valores Passo: Seja S um conjunto de n ≥ 2 valores, organizados na forma de um heap m´aximo Sendo S um heap m´aximo, o maior elemento est´a em S1. Trocamos esse elemento por Sn, restaurando o heap em S − Sn. Por hip´otese de indu¸c˜ao, sei ordenar a sequˆencia S − Sn, e assim obtemos S ordenado Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 12 / 17
  • 60. Projeto por Indu¸c˜ao Fraca Quarta Alternativa Base: n = 1. Um ´unico elemento est´a ordenado H.I.: Sei ordenar um conjunto de n − 1 ≥ 1 valores Passo: Seja S um conjunto de n ≥ 2 valores, organizados na forma de um heap m´aximo Sendo S um heap m´aximo, o maior elemento est´a em S1. Trocamos esse elemento por Sn, restaurando o heap em S − Sn. Por hip´otese de indu¸c˜ao, sei ordenar a sequˆencia S − Sn, e assim obtemos S ordenado (HeapSort) Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 12 / 17
  • 61. HeapSort Projeto O projeto do Heapsort ´e essencialmente o mesmo da ordena¸c˜ao por Sele¸c˜ao Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 13 / 17
  • 62. HeapSort Projeto O projeto do Heapsort ´e essencialmente o mesmo da ordena¸c˜ao por Sele¸c˜ao Selecionamos e posicionamos o maior (ou menor) elemento do conjunto Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 13 / 17
  • 63. HeapSort Projeto O projeto do Heapsort ´e essencialmente o mesmo da ordena¸c˜ao por Sele¸c˜ao Selecionamos e posicionamos o maior (ou menor) elemento do conjunto Aplicamos a hip´otese de indu¸c˜ao para ordenar os elementos restantes Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 13 / 17
  • 64. HeapSort Projeto O projeto do Heapsort ´e essencialmente o mesmo da ordena¸c˜ao por Sele¸c˜ao Selecionamos e posicionamos o maior (ou menor) elemento do conjunto Aplicamos a hip´otese de indu¸c˜ao para ordenar os elementos restantes A diferen¸ca ´e que no HeapSort utilizamos um heap para selecionar o maior (ou menor) elemento de forma eficiente Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 13 / 17
  • 65. HeapSort C´odigo void heapSort(int A[]) { int i, compHeap, temp; compHeap = A.length; constroiHeapMax(A); for(i = A.length-1; i > 0; i--) { temp = A[0]; A[0] = A[i]; A[i] = temp; compHeap--; refazHeapMax(A, 0, compHeap); } } Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 14 / 17
  • 66. HeapSort C´odigo Transforma o ar- ranjo em um heap void heapSort(int A[]) { int i, compHeap, temp; compHeap = A.length; constroiHeapMax(A); for(i = A.length-1; i > 0; i--) { temp = A[0]; A[0] = A[i]; A[i] = temp; compHeap--; refazHeapMax(A, 0, compHeap); } } Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 14 / 17
  • 67. HeapSort C´odigo Coloca o maior elemento ao final do arranjo a ser ordenado void heapSort(int A[]) { int i, compHeap, temp; compHeap = A.length; constroiHeapMax(A); for(i = A.length-1; i > 0; i--) { temp = A[0]; A[0] = A[i]; A[i] = temp; compHeap--; refazHeapMax(A, 0, compHeap); } } Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 14 / 17
  • 68. HeapSort C´odigo Verifica se a mudan¸ca feita n˜ao violou a propriedade no heap restante, de n − 1 elementos void heapSort(int A[]) { int i, compHeap, temp; compHeap = A.length; constroiHeapMax(A); for(i = A.length-1; i > 0; i--) { temp = A[0]; A[0] = A[i]; A[i] = temp; compHeap--; refazHeapMax(A, 0, compHeap); } } Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 14 / 17
  • 69. HeapSort C´odigo Repete a opera¸c˜ao para o heap de n − 1 elementos (T(n − 1)) void heapSort(int A[]) { int i, compHeap, temp; compHeap = A.length; constroiHeapMax(A); for(i = A.length-1; i > 0; i--) { temp = A[0]; A[0] = A[i]; A[i] = temp; compHeap--; refazHeapMax(A, 0, compHeap); } } Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 14 / 17
  • 70. HeapSort C´odigo void heapSort(int A[]) { int i, compHeap, temp; compHeap = A.length; constroiHeapMax(A); for(i = A.length-1; i > 0; i--) { temp = A[0]; A[0] = A[i]; A[i] = temp; compHeap--; refazHeapMax(A, 0, compHeap); } } Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 15 / 17
  • 71. HeapSort C´odigo 16 0 14 1 10 2 8 3 7 4 9 5 3 6 2 7 4 8 1 9 16 14 10 8 7 9 3 2 4 1 0 1 2 3 4 5 6 7 8 9 void heapSort(int A[]) { int i, compHeap, temp; compHeap = A.length; constroiHeapMax(A); for(i = A.length-1; i > 0; i--) { temp = A[0]; A[0] = A[i]; A[i] = temp; compHeap--; refazHeapMax(A, 0, compHeap); } } Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 15 / 17
  • 72. HeapSort C´odigo 16 0 14 1 10 2 8 3 7 4 9 5 3 6 2 7 4 8 1 9 16 14 10 8 7 9 3 2 4 1 0 1 2 3 4 5 6 7 8 9 void heapSort(int A[]) { int i, compHeap, temp; compHeap = A.length; constroiHeapMax(A); for(i = A.length-1; i > 0; i--) { temp = A[0]; A[0] = A[i]; A[i] = temp; compHeap--; refazHeapMax(A, 0, compHeap); } } Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 15 / 17
  • 73. HeapSort C´odigo 16 0 14 1 10 2 8 3 7 4 9 5 3 6 2 7 4 8 1 9 16 14 10 8 7 9 3 2 4 1 0 1 2 3 4 5 6 7 8 9 void heapSort(int A[]) { int i, compHeap, temp; compHeap = A.length; constroiHeapMax(A); for(i = A.length-1; i > 0; i--) { temp = A[0]; A[0] = A[i]; A[i] = temp; compHeap--; refazHeapMax(A, 0, compHeap); } } Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 15 / 17
  • 74. HeapSort C´odigo 16 0 14 1 10 2 8 3 7 4 9 5 3 6 2 7 4 8 1 9 16 14 10 8 7 9 3 2 4 1 0 1 2 3 4 5 6 7 8 9 void heapSort(int A[]) { int i, compHeap, temp; compHeap = A.length; constroiHeapMax(A); for(i = A.length-1; i > 0; i--) { temp = A[0]; A[0] = A[i]; A[i] = temp; compHeap--; refazHeapMax(A, 0, compHeap); } } Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 15 / 17
  • 75. HeapSort C´odigo 16 0 14 1 10 2 8 3 7 4 9 5 3 6 2 7 4 8 1 9 16 14 10 8 7 9 3 2 4 1 0 1 2 3 4 5 6 7 8 9 i void heapSort(int A[]) { int i, compHeap, temp; compHeap = A.length; constroiHeapMax(A); for(i = A.length-1; i > 0; i--) { temp = A[0]; A[0] = A[i]; A[i] = temp; compHeap--; refazHeapMax(A, 0, compHeap); } } Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 15 / 17
  • 76. HeapSort C´odigo 1 0 14 1 10 2 8 3 7 4 9 5 3 6 2 7 4 8 16 9 1 14 10 8 7 9 3 2 4 16 0 1 2 3 4 5 6 7 8 9 i void heapSort(int A[]) { int i, compHeap, temp; compHeap = A.length; constroiHeapMax(A); for(i = A.length-1; i > 0; i--) { temp = A[0]; A[0] = A[i]; A[i] = temp; compHeap--; refazHeapMax(A, 0, compHeap); } } Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 15 / 17
  • 77. HeapSort C´odigo 1 0 14 1 10 2 8 3 7 4 9 5 3 6 2 7 4 8 16 9 1 14 10 8 7 9 3 2 4 16 0 1 2 3 4 5 6 7 8 9 i void heapSort(int A[]) { int i, compHeap, temp; compHeap = A.length; constroiHeapMax(A); for(i = A.length-1; i > 0; i--) { temp = A[0]; A[0] = A[i]; A[i] = temp; compHeap--; refazHeapMax(A, 0, compHeap); } } Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 15 / 17
  • 78. HeapSort C´odigo 14 0 8 1 10 2 4 3 7 4 9 5 3 6 2 7 1 8 16 9 14 8 10 4 7 9 3 2 1 16 0 1 2 3 4 5 6 7 8 9 i void heapSort(int A[]) { int i, compHeap, temp; compHeap = A.length; constroiHeapMax(A); for(i = A.length-1; i > 0; i--) { temp = A[0]; A[0] = A[i]; A[i] = temp; compHeap--; refazHeapMax(A, 0, compHeap); } } Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 15 / 17
  • 79. HeapSort C´odigo 14 0 8 1 10 2 4 3 7 4 9 5 3 6 2 7 1 8 16 9 14 8 10 4 7 9 3 2 1 16 0 1 2 3 4 5 6 7 8 9 i void heapSort(int A[]) { int i, compHeap, temp; compHeap = A.length; constroiHeapMax(A); for(i = A.length-1; i > 0; i--) { temp = A[0]; A[0] = A[i]; A[i] = temp; compHeap--; refazHeapMax(A, 0, compHeap); } } Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 15 / 17
  • 80. HeapSort C´odigo 1 0 8 1 10 2 4 3 7 4 9 5 3 6 2 7 14 8 16 9 1 8 10 4 7 9 3 2 14 16 0 1 2 3 4 5 6 7 8 9 i void heapSort(int A[]) { int i, compHeap, temp; compHeap = A.length; constroiHeapMax(A); for(i = A.length-1; i > 0; i--) { temp = A[0]; A[0] = A[i]; A[i] = temp; compHeap--; refazHeapMax(A, 0, compHeap); } } Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 15 / 17
  • 81. HeapSort C´odigo 1 0 8 1 10 2 4 3 7 4 9 5 3 6 2 7 14 8 16 9 1 8 10 4 7 9 3 2 14 16 0 1 2 3 4 5 6 7 8 9 i void heapSort(int A[]) { int i, compHeap, temp; compHeap = A.length; constroiHeapMax(A); for(i = A.length-1; i > 0; i--) { temp = A[0]; A[0] = A[i]; A[i] = temp; compHeap--; refazHeapMax(A, 0, compHeap); } } Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 15 / 17
  • 82. HeapSort C´odigo 10 0 8 1 9 2 4 3 7 4 1 5 3 6 2 7 14 8 16 9 10 8 9 4 7 1 3 2 14 16 0 1 2 3 4 5 6 7 8 9 i void heapSort(int A[]) { int i, compHeap, temp; compHeap = A.length; constroiHeapMax(A); for(i = A.length-1; i > 0; i--) { temp = A[0]; A[0] = A[i]; A[i] = temp; compHeap--; refazHeapMax(A, 0, compHeap); } } Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 15 / 17
  • 83. HeapSort C´odigo 10 0 8 1 9 2 4 3 7 4 1 5 3 6 2 7 14 8 16 9 10 8 9 4 7 1 3 2 14 16 0 1 2 3 4 5 6 7 8 9 i void heapSort(int A[]) { int i, compHeap, temp; compHeap = A.length; constroiHeapMax(A); for(i = A.length-1; i > 0; i--) { temp = A[0]; A[0] = A[i]; A[i] = temp; compHeap--; refazHeapMax(A, 0, compHeap); } } Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 15 / 17
  • 84. HeapSort C´odigo 2 0 8 1 9 2 4 3 7 4 1 5 3 6 10 7 14 8 16 9 2 8 9 4 7 1 3 10 14 16 0 1 2 3 4 5 6 7 8 9 i void heapSort(int A[]) { int i, compHeap, temp; compHeap = A.length; constroiHeapMax(A); for(i = A.length-1; i > 0; i--) { temp = A[0]; A[0] = A[i]; A[i] = temp; compHeap--; refazHeapMax(A, 0, compHeap); } } Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 15 / 17
  • 85. HeapSort C´odigo 2 0 8 1 9 2 4 3 7 4 1 5 3 6 10 7 14 8 16 9 2 8 9 4 7 1 3 10 14 16 0 1 2 3 4 5 6 7 8 9 i void heapSort(int A[]) { int i, compHeap, temp; compHeap = A.length; constroiHeapMax(A); for(i = A.length-1; i > 0; i--) { temp = A[0]; A[0] = A[i]; A[i] = temp; compHeap--; refazHeapMax(A, 0, compHeap); } } Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 15 / 17
  • 86. HeapSort C´odigo 9 0 8 1 3 2 4 3 7 4 1 5 2 6 10 7 14 8 16 9 9 8 3 4 7 1 2 10 14 16 0 1 2 3 4 5 6 7 8 9 i void heapSort(int A[]) { int i, compHeap, temp; compHeap = A.length; constroiHeapMax(A); for(i = A.length-1; i > 0; i--) { temp = A[0]; A[0] = A[i]; A[i] = temp; compHeap--; refazHeapMax(A, 0, compHeap); } } Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 15 / 17
  • 87. HeapSort C´odigo 9 0 8 1 3 2 4 3 7 4 1 5 2 6 10 7 14 8 16 9 9 8 3 4 7 1 2 10 14 16 0 1 2 3 4 5 6 7 8 9 i void heapSort(int A[]) { int i, compHeap, temp; compHeap = A.length; constroiHeapMax(A); for(i = A.length-1; i > 0; i--) { temp = A[0]; A[0] = A[i]; A[i] = temp; compHeap--; refazHeapMax(A, 0, compHeap); } } Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 15 / 17
  • 88. HeapSort C´odigo 2 0 8 1 3 2 4 3 7 4 1 5 9 6 10 7 14 8 16 9 2 8 3 4 7 1 9 10 14 16 0 1 2 3 4 5 6 7 8 9 i void heapSort(int A[]) { int i, compHeap, temp; compHeap = A.length; constroiHeapMax(A); for(i = A.length-1; i > 0; i--) { temp = A[0]; A[0] = A[i]; A[i] = temp; compHeap--; refazHeapMax(A, 0, compHeap); } } Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 15 / 17
  • 89. HeapSort C´odigo 2 0 8 1 3 2 4 3 7 4 1 5 9 6 10 7 14 8 16 9 2 8 3 4 7 1 9 10 14 16 0 1 2 3 4 5 6 7 8 9 i void heapSort(int A[]) { int i, compHeap, temp; compHeap = A.length; constroiHeapMax(A); for(i = A.length-1; i > 0; i--) { temp = A[0]; A[0] = A[i]; A[i] = temp; compHeap--; refazHeapMax(A, 0, compHeap); } } Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 15 / 17
  • 90. HeapSort C´odigo 8 0 7 1 3 2 4 3 2 4 1 5 9 6 10 7 14 8 16 9 8 7 3 4 2 1 9 10 14 16 0 1 2 3 4 5 6 7 8 9 i void heapSort(int A[]) { int i, compHeap, temp; compHeap = A.length; constroiHeapMax(A); for(i = A.length-1; i > 0; i--) { temp = A[0]; A[0] = A[i]; A[i] = temp; compHeap--; refazHeapMax(A, 0, compHeap); } } Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 15 / 17
  • 91. HeapSort C´odigo 8 0 7 1 3 2 4 3 2 4 1 5 9 6 10 7 14 8 16 9 8 7 3 4 2 1 9 10 14 16 0 1 2 3 4 5 6 7 8 9 i void heapSort(int A[]) { int i, compHeap, temp; compHeap = A.length; constroiHeapMax(A); for(i = A.length-1; i > 0; i--) { temp = A[0]; A[0] = A[i]; A[i] = temp; compHeap--; refazHeapMax(A, 0, compHeap); } } Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 15 / 17
  • 92. HeapSort C´odigo 1 0 7 1 3 2 4 3 2 4 8 5 9 6 10 7 14 8 16 9 1 7 3 4 2 8 9 10 14 16 0 1 2 3 4 5 6 7 8 9 i void heapSort(int A[]) { int i, compHeap, temp; compHeap = A.length; constroiHeapMax(A); for(i = A.length-1; i > 0; i--) { temp = A[0]; A[0] = A[i]; A[i] = temp; compHeap--; refazHeapMax(A, 0, compHeap); } } Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 15 / 17
  • 93. HeapSort C´odigo 1 0 7 1 3 2 4 3 2 4 8 5 9 6 10 7 14 8 16 9 1 7 3 4 2 8 9 10 14 16 0 1 2 3 4 5 6 7 8 9 i void heapSort(int A[]) { int i, compHeap, temp; compHeap = A.length; constroiHeapMax(A); for(i = A.length-1; i > 0; i--) { temp = A[0]; A[0] = A[i]; A[i] = temp; compHeap--; refazHeapMax(A, 0, compHeap); } } Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 15 / 17
  • 94. HeapSort C´odigo 7 0 4 1 3 2 1 3 2 4 8 5 9 6 10 7 14 8 16 9 7 4 3 1 2 8 9 10 14 16 0 1 2 3 4 5 6 7 8 9 i void heapSort(int A[]) { int i, compHeap, temp; compHeap = A.length; constroiHeapMax(A); for(i = A.length-1; i > 0; i--) { temp = A[0]; A[0] = A[i]; A[i] = temp; compHeap--; refazHeapMax(A, 0, compHeap); } } Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 15 / 17
  • 95. HeapSort C´odigo 7 0 4 1 3 2 1 3 2 4 8 5 9 6 10 7 14 8 16 9 7 4 3 1 2 8 9 10 14 16 0 1 2 3 4 5 6 7 8 9 i void heapSort(int A[]) { int i, compHeap, temp; compHeap = A.length; constroiHeapMax(A); for(i = A.length-1; i > 0; i--) { temp = A[0]; A[0] = A[i]; A[i] = temp; compHeap--; refazHeapMax(A, 0, compHeap); } } Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 15 / 17
  • 96. HeapSort C´odigo 2 0 4 1 3 2 1 3 7 4 8 5 9 6 10 7 14 8 16 9 2 4 3 1 7 8 9 10 14 16 0 1 2 3 4 5 6 7 8 9 i void heapSort(int A[]) { int i, compHeap, temp; compHeap = A.length; constroiHeapMax(A); for(i = A.length-1; i > 0; i--) { temp = A[0]; A[0] = A[i]; A[i] = temp; compHeap--; refazHeapMax(A, 0, compHeap); } } Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 15 / 17
  • 97. HeapSort C´odigo 2 0 4 1 3 2 1 3 7 4 8 5 9 6 10 7 14 8 16 9 2 4 3 1 7 8 9 10 14 16 0 1 2 3 4 5 6 7 8 9 i void heapSort(int A[]) { int i, compHeap, temp; compHeap = A.length; constroiHeapMax(A); for(i = A.length-1; i > 0; i--) { temp = A[0]; A[0] = A[i]; A[i] = temp; compHeap--; refazHeapMax(A, 0, compHeap); } } Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 15 / 17
  • 98. HeapSort C´odigo 4 0 2 1 3 2 1 3 7 4 8 5 9 6 10 7 14 8 16 9 4 2 3 1 7 8 9 10 14 16 0 1 2 3 4 5 6 7 8 9 i void heapSort(int A[]) { int i, compHeap, temp; compHeap = A.length; constroiHeapMax(A); for(i = A.length-1; i > 0; i--) { temp = A[0]; A[0] = A[i]; A[i] = temp; compHeap--; refazHeapMax(A, 0, compHeap); } } Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 15 / 17
  • 99. HeapSort C´odigo 4 0 2 1 3 2 1 3 7 4 8 5 9 6 10 7 14 8 16 9 4 2 3 1 7 8 9 10 14 16 0 1 2 3 4 5 6 7 8 9 i void heapSort(int A[]) { int i, compHeap, temp; compHeap = A.length; constroiHeapMax(A); for(i = A.length-1; i > 0; i--) { temp = A[0]; A[0] = A[i]; A[i] = temp; compHeap--; refazHeapMax(A, 0, compHeap); } } Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 15 / 17
  • 100. HeapSort C´odigo 1 0 2 1 3 2 4 3 7 4 8 5 9 6 10 7 14 8 16 9 1 2 3 4 7 8 9 10 14 16 0 1 2 3 4 5 6 7 8 9 i void heapSort(int A[]) { int i, compHeap, temp; compHeap = A.length; constroiHeapMax(A); for(i = A.length-1; i > 0; i--) { temp = A[0]; A[0] = A[i]; A[i] = temp; compHeap--; refazHeapMax(A, 0, compHeap); } } Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 15 / 17
  • 101. HeapSort C´odigo 1 0 2 1 3 2 4 3 7 4 8 5 9 6 10 7 14 8 16 9 1 2 3 4 7 8 9 10 14 16 0 1 2 3 4 5 6 7 8 9 i void heapSort(int A[]) { int i, compHeap, temp; compHeap = A.length; constroiHeapMax(A); for(i = A.length-1; i > 0; i--) { temp = A[0]; A[0] = A[i]; A[i] = temp; compHeap--; refazHeapMax(A, 0, compHeap); } } Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 15 / 17
  • 102. HeapSort C´odigo 3 0 2 1 1 2 4 3 7 4 8 5 9 6 10 7 14 8 16 9 3 2 1 4 7 8 9 10 14 16 0 1 2 3 4 5 6 7 8 9 i void heapSort(int A[]) { int i, compHeap, temp; compHeap = A.length; constroiHeapMax(A); for(i = A.length-1; i > 0; i--) { temp = A[0]; A[0] = A[i]; A[i] = temp; compHeap--; refazHeapMax(A, 0, compHeap); } } Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 15 / 17
  • 103. HeapSort C´odigo 3 0 2 1 1 2 4 3 7 4 8 5 9 6 10 7 14 8 16 9 3 2 1 4 7 8 9 10 14 16 0 1 2 3 4 5 6 7 8 9 i void heapSort(int A[]) { int i, compHeap, temp; compHeap = A.length; constroiHeapMax(A); for(i = A.length-1; i > 0; i--) { temp = A[0]; A[0] = A[i]; A[i] = temp; compHeap--; refazHeapMax(A, 0, compHeap); } } Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 15 / 17
  • 104. HeapSort C´odigo 1 0 2 1 3 2 4 3 7 4 8 5 9 6 10 7 14 8 16 9 1 2 3 4 7 8 9 10 14 16 0 1 2 3 4 5 6 7 8 9 i void heapSort(int A[]) { int i, compHeap, temp; compHeap = A.length; constroiHeapMax(A); for(i = A.length-1; i > 0; i--) { temp = A[0]; A[0] = A[i]; A[i] = temp; compHeap--; refazHeapMax(A, 0, compHeap); } } Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 15 / 17
  • 105. HeapSort C´odigo 1 0 2 1 3 2 4 3 7 4 8 5 9 6 10 7 14 8 16 9 1 2 3 4 7 8 9 10 14 16 0 1 2 3 4 5 6 7 8 9 i void heapSort(int A[]) { int i, compHeap, temp; compHeap = A.length; constroiHeapMax(A); for(i = A.length-1; i > 0; i--) { temp = A[0]; A[0] = A[i]; A[i] = temp; compHeap--; refazHeapMax(A, 0, compHeap); } } Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 15 / 17
  • 106. HeapSort C´odigo 2 0 1 1 3 2 4 3 7 4 8 5 9 6 10 7 14 8 16 9 2 1 3 4 7 8 9 10 14 16 0 1 2 3 4 5 6 7 8 9 i void heapSort(int A[]) { int i, compHeap, temp; compHeap = A.length; constroiHeapMax(A); for(i = A.length-1; i > 0; i--) { temp = A[0]; A[0] = A[i]; A[i] = temp; compHeap--; refazHeapMax(A, 0, compHeap); } } Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 15 / 17
  • 107. HeapSort C´odigo 2 0 1 1 3 2 4 3 7 4 8 5 9 6 10 7 14 8 16 9 2 1 3 4 7 8 9 10 14 16 0 1 2 3 4 5 6 7 8 9 i void heapSort(int A[]) { int i, compHeap, temp; compHeap = A.length; constroiHeapMax(A); for(i = A.length-1; i > 0; i--) { temp = A[0]; A[0] = A[i]; A[i] = temp; compHeap--; refazHeapMax(A, 0, compHeap); } } Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 15 / 17
  • 108. HeapSort C´odigo 1 0 2 1 3 2 4 3 7 4 8 5 9 6 10 7 14 8 16 9 1 2 3 4 7 8 9 10 14 16 0 1 2 3 4 5 6 7 8 9 i void heapSort(int A[]) { int i, compHeap, temp; compHeap = A.length; constroiHeapMax(A); for(i = A.length-1; i > 0; i--) { temp = A[0]; A[0] = A[i]; A[i] = temp; compHeap--; refazHeapMax(A, 0, compHeap); } } Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 15 / 17
  • 109. HeapSort C´odigo 1 0 2 1 3 2 4 3 7 4 8 5 9 6 10 7 14 8 16 9 1 2 3 4 7 8 9 10 14 16 0 1 2 3 4 5 6 7 8 9 i void heapSort(int A[]) { int i, compHeap, temp; compHeap = A.length; constroiHeapMax(A); for(i = A.length-1; i > 0; i--) { temp = A[0]; A[0] = A[i]; A[i] = temp; compHeap--; refazHeapMax(A, 0, compHeap); } } Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 15 / 17
  • 110. HeapSort C´odigo 1 0 2 1 3 2 4 3 7 4 8 5 9 6 10 7 14 8 16 9 1 2 3 4 7 8 9 10 14 16 0 1 2 3 4 5 6 7 8 9 i void heapSort(int A[]) { int i, compHeap, temp; compHeap = A.length; constroiHeapMax(A); for(i = A.length-1; i > 0; i--) { temp = A[0]; A[0] = A[i]; A[i] = temp; compHeap--; refazHeapMax(A, 0, compHeap); } } Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 15 / 17
  • 111. HeapSort C´odigo 1 0 2 1 3 2 4 3 7 4 8 5 9 6 10 7 14 8 16 9 1 2 3 4 7 8 9 10 14 16 0 1 2 3 4 5 6 7 8 9 i void heapSort(int A[]) { int i, compHeap, temp; compHeap = A.length; constroiHeapMax(A); for(i = A.length-1; i > 0; i--) { temp = A[0]; A[0] = A[i]; A[i] = temp; compHeap--; refazHeapMax(A, 0, compHeap); } } Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 15 / 17
  • 112. HeapSort C´odigo 1 0 2 1 3 2 4 3 7 4 8 5 9 6 10 7 14 8 16 9 1 2 3 4 7 8 9 10 14 16 0 1 2 3 4 5 6 7 8 9 i void heapSort(int A[]) { int i, compHeap, temp; compHeap = A.length; constroiHeapMax(A); for(i = A.length-1; i > 0; i--) { temp = A[0]; A[0] = A[i]; A[i] = temp; compHeap--; refazHeapMax(A, 0, compHeap); } } Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 15 / 17
  • 113. HeapSort C´odigo Qual a complexidade desse c´odigo? void heapSort(int A[]) { int i, compHeap, temp; compHeap = A.length; constroiHeapMax(A); for(i = A.length-1; i > 0; i--) { temp = A[0]; A[0] = A[i]; A[i] = temp; compHeap--; refazHeapMax(A, 0, compHeap); } } Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 16 / 17
  • 114. HeapSort C´odigo Qual a complexidade desse c´odigo? O(n) void heapSort(int A[]) { int i, compHeap, temp; compHeap = A.length; constroiHeapMax(A); for(i = A.length-1; i > 0; i--) { temp = A[0]; A[0] = A[i]; A[i] = temp; compHeap--; refazHeapMax(A, 0, compHeap); } } Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 16 / 17
  • 115. HeapSort C´odigo Qual a complexidade desse c´odigo? O(n) +(n − 1) void heapSort(int A[]) { int i, compHeap, temp; compHeap = A.length; constroiHeapMax(A); for(i = A.length-1; i > 0; i--) { temp = A[0]; A[0] = A[i]; A[i] = temp; compHeap--; refazHeapMax(A, 0, compHeap); } } Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 16 / 17
  • 116. HeapSort C´odigo Qual a complexidade desse c´odigo? O(n) +(n − 1)×O(log n) void heapSort(int A[]) { int i, compHeap, temp; compHeap = A.length; constroiHeapMax(A); for(i = A.length-1; i > 0; i--) { temp = A[0]; A[0] = A[i]; A[i] = temp; compHeap--; refazHeapMax(A, 0, compHeap); } } Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 16 / 17
  • 117. HeapSort C´odigo Qual a complexidade desse c´odigo? O(n) +(n − 1)×O(log n) O(n log n) portanto void heapSort(int A[]) { int i, compHeap, temp; compHeap = A.length; constroiHeapMax(A); for(i = A.length-1; i > 0; i--) { temp = A[0]; A[0] = A[i]; A[i] = temp; compHeap--; refazHeapMax(A, 0, compHeap); } } Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 16 / 17
  • 118. Referˆencias Cormen, Thomas H., Leiserson, Charles E., Rivest, Ronald L., Stein, Clifford. Introduction to Algorithms. 2a ed. MIT Press, 2001. Ziviani, Nivio. Projeto de Algoritmos: com implementa¸c˜oes em Java e C++. Cengage. 2007. Slides dos professores Delano Beder e Marcos Chain Norton Trevisan Romannorton@usp.br Aula 17 – Heaps e Heapsort 18 de outubro de 2018 17 / 17