Вы находитесь на странице: 1из 18

m Classificação por Trocas

m 6 
 
 Caracteriza-se por identificar, a cada iteração, a
chave de à  ÚÃ valor na
  do
vetor ainda     e colocá-la em sua

  .
 ¬tiliza uma estrutura de dados Ú~  para organizar a
informação durante a execução do algoritmo.
 ¬m ~  © uma estrutura de dados ×  em árvore
binária que segue um crit©rio Úou condição bem-
definidoÚa .

 struturalmente, deve ser uma árvore î  completa:


m o último nível pode não conter os nós mais à direita.
 Ms dados armazenados em um ~  devem
satisfazer a seguinte condição:
m Todo nó deve ter valor à ou   com relação
aos seus filhos Ú 
à .

 Ô condição  determina nenhuma relação


entre os filhos de um nó Ú   com
  ×  
î  .
 ’odemos representar ~  como    ×  ou
  .

 Ô   M    


   
 Ô representação em vetores permite
relacionar os nós do ~  da seguinte forma:
m     : primeira posição do vetor
m    Ã  
 §: posições G e G 
m
  Ã  
 §: posição £ G

   

  u
  

m arante a manutenção da propriedade do ¦ .
Complexidade ÚG .
 Ñ   

m ’roduz um ~  a partir de um vetor não


ordenado. Complexidade Ú .

  
 
m ’rocedimento de ordenação.
ComplexidadeÚG .
 3eorganiza ~  ÚMbjetivo: manter a  .

 Ôssume que as árvores binárias correspondentes a   e   


são ~ , mas
pode ser menor que seus filhos.

 xemplo: 16 4 10 14 7 9 3 2 8 1

u u
16 16
 
4 10 14 10
       
14 9 3 4 9 3
7 7
  u   u
2 8 1 2 8 1
 ¬tiliza o procedimento  
 de forma ×  
para transformar um vetor


 em um ~  com 
elementos.

 Ô   ! a Ô  correspondem às folhas da árvore e


portanto são ~  de um elemento.

 Ñasta chamar Heapify para os demais elementos do


vetor Ô, ou seja, de Ô ! a .
 ëetor: 16 4 10 14 7 9 3 2 8 1

u u u
16 16 16

 
4 10 14 10 14 10
           
14 7 9 3 4 9 3 9 3
7 7
  u  u  u
 
2 8 1 2 1 2 4 1
1 Constrói um ~  a partir de um vetor de entrada ÚÑuild-Heap .
2 Como o maior elemento está localizado na raiz Ú
 , este pode
ser colocado em sua posição final, trocando-o pelo elemento


3 3    Ã   
 Ã  , chama HeapifyÚÔ,1
e após t©rmino de HeapfyÚÔ,1 repete-se o passo anterior Ú2 , "
que o ~  tenha à # .
 3esultado do Ñuild-Heap sobre o vetor

 ©: 16 4 10 14 7 9 3 2 8 1

16 14 10 8 7 9 3 2 4 1
u
16

14 10
   
8 7 9 3
  u
2 4 1
 Ôplicando o procedimento HeapSort sobre o vetor
16 14 10 8 7 9 3 2 4 resultado
1 do
Ñuild-Heap anterior, temos:
u u
16 1
 
14 10 2 3
       
8 7 9 3 4 7 8 9
  u   u
2 4 1 10 14 16

1 2 3 4 7 8 9 10 14 16
 ’rocedimento Heapfy
’  heapify Ú Ô, i
× 
e P squerdaÚi 
d P DireitaÚi 
maior P i
 Úe ô heap_size[Ô and Ô[e > Ô[maior  
maior P e  filho da esquerda © maior 
 Úd ô heap_size[Ô and Ô[d > Ô[maior  
maior P d  filho da direita © maior 
 Úmaior † i  
× 
exchangeÚÔ[i à Ô[maior 
heapifyÚÔ, maior 

$

6Ã
 % ÚG ± cada troca e comparação tem custo MÚ1 .
No máximo ocorrem G trocas. Mcorrem duas comparações Ú 
  a cada chamada da função ~  .
 ’rocedimento Ñuild-Heap
’  build-heap Ú Ô
× 
heap_size[Ô P length[Ô 
 i P [length[Ô 2 & 1 
heapifyÚÔ, i 
.

6Ã
 : Ô princípio o procedimento Ñuild-Heap executa
o procedimento ~  para os elementos dos vetor que estão
nas posições entre [n2,1 . ’ortanto, a complexidade 

da construção do heap © Ún2log2 n . No entanto, a
complexidade © !.
 ’rocedimento HeapSort
’  heapsort ÚÔ
× 
build_heapÚÔ 
 i P length[Ô & 2 
× 
exchangeÚÔ[i à Ô[1 
heap_size[Ô P heap_size[Ô ±1
heapifyÚÔ,1 

$

6Ã
 '   
 :
tapas:
- Construção do ¦ Y M 
- Mrdenação
a ?Úraiz, final do segmento não-ordenado Y M 
b
  Úraiz Y M  
xecuta os passos Úa e Úb n -1 vezes Y Ún-1 . log n Y M  

’ : complexidade total © de M  !

Вам также может понравиться