Professional Documents
Culture Documents
e
Tecnicas de Programacao
Tomasz Kowaltowski
Instituto de Computacao
Universidade Estadual de Campinas
www.ic.unicamp.br/tomasz
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao 1
Copyright c _ 2010 Tomasz Kowaltowski
Instituto de Computa cao
Universidade Estadual de Campinas
Algumas transparencias foram adaptadas da apostila Estruturas de Dados
e Tecnicas de Programacao de autoria de Claudio L. Lucchesi e Tomasz
Kowaltowski.
Estas transparencias somente podem ser copiadas para uso pessoal dos
docentes e alunos das disciplinas oferecidas pelo Instituto de Computacao
da UNICAMP.
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao 2
Introdu cao
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Introducao 3
Pre-requisito e objetivos
Objetivos:
Preparacao para:
Analise de algoritmos
Bancos de dados
Engenharia de software
. . .
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Introducao 4
Programa
Recursao e retrocesso
Arvores binarias: representacao, percursos
Arvores gerais: representacao, percursos
Aplicacao de arvores:
arvores de busca (AVL), las de prioridade,
arvores B, arvores digitais
Listas generalizadas
Espalhamento
Gerenciamento de memoria
Algoritmos de ordenacao
Algoritmos em grafos
i=0
(n i 1) =
n
2
2
+
n
2
ou seja, o n umero de compara coes e da ordem de O(n
2
).
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Noc oes de Analise de Algoritmos 14
Crescimento de algumas func oes
n log
2
n nlog
2
n n
2
n
3
2
n
1 0 0 1 1 2
2 1 2 4 8 4
4 2 8 16 64 16
8 3 24 64 512 256
16 4 64 256 4.096 65.536
32 5 160 1.024 32.768 4.294.967.296
64 6 384 4.096 262.144 1810
18
128 7 896 16.384 2.097.152 3410
37
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Noc oes de Analise de Algoritmos 15
Exemplo
Suponha duas maquinas M
1
e M
2
, sendo a primeira cem vezes mais
rapida do que a segunda. Ambas as maquinas executam um algoritmo de
busca num vetor ordenado de comprimento n. A maquina M
1
executa o
algoritmo de busca sequencial (pior caso: n opera coes); a maquina M
2
executa o algoritmo de busca binaria (pior caso: log
2
n opera coes).
A seguinte tabela poderia ser obtida atraves de medidas experimentais de
tempo de execu cao para vetores de diversos tamanhos, usando alguma
unidade de tempo conveniente.
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Noc oes de Analise de Algoritmos 16
Exemplo (cont.)
n M1 M2
16 16 400
32 32 500
64 64 600
128 128 700
256 256 800
512 512 900
1024 1024 1000
2048 2048 1100
. . . . . . . . .
2
20
1.048.576 2000
2
21
2.097.152 2100
. . . . . . . . .
2
30
1.073.741.824 3000
Supondo que a unidade seja 1 microssegundo, 2.097.152s corresponde a 17 minutos e
1.073.741.824s equivale a cerca de 12 horas.
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Noc oes de Analise de Algoritmos 17
Execu cao de programas
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Execu cao de programas 18
Exemplo de func oes simples
voi d g ( i nt x , i nt y ) {
y = x ;
} / g /
voi d f ( i nt z ) {
i nt y ; char b ;
y = 235;
g ( y , z ) ;
} / f /
i nt mai n ( ) {
i nt i ; char c ;
char v [ 5 ] ;
f (&i ) ;
r et ur n 0;
} / mai n /
Pilha de execu cao (supoe inteiros de dois bytes):
i c v
main
z y
b
f
235
x y
235
g
235
Obs.: Na realidade, os inteiros sao armazenados sob a forma binaria.
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Execu cao de programas 19
Exemplo de func oes com alocacao dinamica
typedef char Cadei a [ 5 ] ;
typedef Cadei a ApCadei a ;
typedef s t r uc t {
Cadei a nome ;
i nt i dade ;
} Reg , ApReg ;
ApCadei a apc ;
ApReg apr ;
i nt api ;
voi d Al oca ( ApCadei a c , ApReg r ) {
api = mal l oc ( s i z e of ( i nt ) ) ;
api = 10;
c = mal l oc ( s i z e of ( Cadei a ) ) ;
r = mal l oc ( s i z e of ( Reg ) ) ;
} / Al oca /
i nt mai n ( ) {
Al oca(&apc ,&apr ) ; f r e e ( apc ) ;
f r e e ( apr ) ; f r e e ( api ) ;
r et ur n 0;
} / mai n /
memoria dinamica
pilha de execu cao
apc apr api
global main
c r
Aloca
10 10
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Execu cao de programas 20
Exemplo de funcao recursiva
i nt mai n ( ) {
i nt m;
m = f a t ( 4 ) ;
r et ur n 0;
} / mai n /
i nt f a t ( i nt n) {
i f ( n==0)
r et ur n 1;
el s e
r et ur n n f a t ( n1);
} / f a t /
m res n
4
res n
3
res n
2
res n
1
res n
0 1 1 2 6 24 24
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Execu cao de programas 21
Estruturas ligadas
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Estruturas ligadas 22
Listas ligadas simples
p
. . .
Declaracoes (equivalentes):
typedef
s t r uc t Re gLi s t a L i s t a ;
typedef
s t r uc t Re gLi s t a {
T i n f o ;
L i s t a pr ox ;
} Re gLi s t a ;
typedef
s t r uc t Re gLi s t a {
T i n f o ;
s t r uc t Re gLi s t a pr ox ;
} RegLi s t a , L i s t a ;
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Estruturas ligadas 23
Insercao e remocao com passagem por valor
. . . x . . .
p q
voi d I n s e r e ( L i s t a p , T x ) {
L i s t a q =
mal l oc ( s i z e of ( Re gLi s t a ) ) ;
q>i n f o = x ;
q>pr ox = p>pr ox ;
p>pr ox = q ;
}
voi d Remove ( L i s t a p , T x ) {
L i s t a q = p>pr ox ;
x = q>i n f o ;
p>pr ox = q>pr ox ;
f r e e ( q ) ;
}
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Estruturas ligadas 24
Insercao e remocao com passagem por valor (cont.)
. . . x . . .
p q
E possvel percorrer os elementos nas duas direcoes, a partir de
qualquer lugar da lista.
E possvel remover o elemento apontado.
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Estruturas ligadas 31
Operac oes sobre listas duplamente ligadas
typedef
s t r uc t RegLi s t aDupl a {
T i n f o ;
s t r uc t RegLi s t aDupl a esq , d i r ;
} RegLi s t aDupl a , Li s t aDupl a ;
voi d I ns e r e Dupl aEs q (
Li s t aDupl a p , T x ) {
Li s t aDupl a q =
mal l oc ( s i z e of ( RegLi s t aDupl a ) ) ;
q>i n f o = x ;
q>es q = p>es q ;
q>d i r = p ;
p>esq>d i r = q ;
p>es q = q ;
}
voi d RemoveDupla (
Li s t aDupl a p , T x ) {
p>esq>d i r = p>d i r ;
p>di r >es q = p>es q ;
x = p>i n f o ;
f r e e ( p ) ;
}
A funcao RemoveDupla supoe que ha pelo menos um elemento na lista.
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Estruturas ligadas 32
Exemplo: operacoes com polinomios
Seja um polinomio de grau n:
P(x) = a
n
x
n
+a
n1
x
n1
+. . . +a
1
x
1
+a
0
x
0
onde a
n
,= 0, exceto possivelmente no caso n = 0.
Representacao ligada omite os termos nao nulos. Por exemplo, os
polinomios:
P
1
(x) = 5x
20
3x
5
+ 7 e P
2
(x) = 0:
podem ser representados por:
-1 p1 5 20 -3 5 7 0
-1 p2
Por conven cao, o expoente do no cabeca e -1.
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Estruturas ligadas 33
Exemplo de funcao: impressao
typedef s t r uc t AuxPol {
i nt expo ;
f l o a t c oe f ;
s t r uc t AuxPol pr ox ;
} Termo , Pol i nomi o ;
voi d I mpr i mePol i nomi o ( Pol i nomi o p) {
i f ( p>pr ox==p) {
p r i n t f ( Pol i n omi o nul o \n ) ;
r et ur n ;
}
p = p>pr ox ;
whi l e ( p>expo!=1) {
p r i n t f ( (%2d , %5. 1 f ) ,
p>expo , p>c oe f ) ;
p = p>pr ox ;
}
p r i n t f ( \n ) ;
}
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Estruturas ligadas 34
Soma de polin omios: paradigma de intercalacao
-1 p
pp0
. . .
pp
-1 q
qq0
. . .
qq
-1 r
rr0
. . .
rr
As variaveis pp e qq representam os termos correntes dos polinomios
dentro da malha de repeti cao e a variavel rr aponta para o ultimo termo ja
calculado da soma; pp0, qq0 e rr0 sao os valores iniciais das variaveis pp,
qq e rr.
A implementacao das operacoes e um exerccio. Note-se que o produto de
dois polinomios pode ser calculado como uma sequencia de somas de
produtos de um polinomio por um termo.
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Estruturas ligadas 35
Matrizes esparsas
Exemplo:
50 0 0 0
10 0 20 0
0 0 0 0
30 0 60 5
. . .
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Estruturas lineares 40
Estruturas lineares particulares
XML
Implementacao da recursao
Inxa:
e /
f
g h
Sada pos-xa:
a b c d e
f
/+g h
N umero de movimentos: 2
N
1 (prova por indu cao).
AO E RETROCESSO
RCURC
AO ER RTROCESOS
[ [ [ [ [ [
I S R I I R
A: avan co (subentendido)
I: insercao
S: substituicao
R: remocao
Arvores binarias
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao
Arvores binarias 112
Exemplo de arvore binaria 1: pedigree
Sugarteds Bonnie
Carina de Wood Ladge
Matarazzos Beauty
Lady
Weberly
Johnson
Fancy Boots
Scotland dos Seis Irmaos
Arisca dos
Seis Irmaos
Ator dos
Seis Irmaos
Jesse James
R. J. B. Helvetia
Carina de
Wood Ladge
R. J. B.
Sean
R. J. B. Hill
Lakeview
Lois
R. J. B.
Sean
Alguns nomes sao repetidos: eles devem ser tratados como instancias
separadas.
Arvore da famlia Hominidae determinada por comparacao de DNA de
varias especies (incompleta).
altura maxima n
subarvores vazias: n + 1
no mnimo h nos
no maximo 2
h
1 nos
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao
Arvores binarias 120
Representacao ligada comum
p
A
B C
D E F
G H
O acesso a todos os nos da arvore pode ser realizado atraves de um
apontador para a raiz.
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao
Arvores binarias 121
Representacao ligada com tres apontadores
p
A
B
D E
G
C
F
H
O terceiro apontador possibilita descer e subir pela estrutura,
analogamente `as listas duplamente ligadas.
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao
Arvores binarias 122
Representacao com o campo pai apenas
A
B C
D E F
G H
Problemas:
E necessario haver acesso (apontadores) pelo menos a todas as folhas.
lho esquerdo: 2n + 1 (n 0)
lho direito: 2n + 2 (n 0)
pai: (n 1)/2| (n > 0)
A
0
B
1
I
2
C
3
F
4
J
5
M
6
D
7
E
8
G
9
H
10
K
11
L
12
N
13
O
14
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao
Arvores binarias 124
Representacao seq uencial: arvores binarias quase completas
A
B
C
D E
F
G H
I
J
K
M
0
1 2
3 4 5 6
7 8 9 10 11
A
0
B
1
I
2
C
3
F
4
J
5
M
6
D
7
E
8
G
9
H
10
K
11
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao
Arvores binarias 125
Percursos em profundidade
Pre-ordem:
Visitar a raiz
Percorrer a subarvore esquerda em pre-ordem
Percorrer a subarvore direita em pre-ordem
Pos-ordem:
Percorrer a subarvore esquerda em pos-ordem
Percorrer a subarvore direita em pos-ordem
Visitar a raiz
E a pos-ordem?
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao
Arvores binarias 130
Percurso em pre-ordem, usando uma pilha explcita
A gura indica a situacao inicial e nal do percurso de uma arvore
arbitraria (pode ser vazia). Inicialmente, o apontador para a arvore deve
estar no topo da pilha. Terminado o percurso, a pilha tera um elemento a
menos.
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao
Arvores binarias 131
Percurso em pre-ordem, usando uma pilha explcita (cont.)
X
E D
Visita X Percorre E Percorre D
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao
Arvores binarias 132
Percurso em pre-ordem, usando uma pilha (cont.)
voi d PreOrdem( ArvBi n p) {
Pi l ha pl ;
I n i c i a l i z a P i l h a (&pl ) ;
Empi l ha(&pl , p ) ;
do {
Desempi l ha(&pl ,&p ) ;
i f ( p!=NULL) {
Vi s i t a ( p ) ;
Empi l ha(&pl , p>d i r ) ;
Empi l ha(&pl , p>es q ) ;
}
} whi l e ( ! Pi l ha Va z i a ( pl ) ) ;
} / PreOrdem /
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao
Arvores binarias 133
Percurso em largura, usando uma la
Os nos da arvore a serem visitados sao guardados numa la.
X
E D
nvel k
nvel k+1
Visita X
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao
Arvores binarias 134
Percurso em largura, usando uma la (cont.)
voi d Lar gur a ( ArvBi n p) {
F i l a f l ;
I n i c i a l i z a F i l a (& f l ) ;
I n s e r e F i l a (&f l , p ) ;
do {
RemoveFi l a(&f l ,&p ) ;
i f ( p!=NULL) {
Vi s i t a ( p ) ;
I n s e r e F i l a (&f l , p>es q ) ;
I n s e r e F i l a (&f l , p>d i r ) ;
}
} whi l e ( ! Fi l a Va z i a ( f l ) ) ;
} / Lar gur a /
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao
Arvores binarias 135
Comparacao dos percursos em pre-ordem e em largura
voi d PreOrdem( ArvBi n p) {
Pi l ha pl ;
I n i c i a l i z a P i l h a (&pl ) ;
Empi l ha(&pl , p ) ;
do {
Desempi l ha(&pl ,&p ) ;
i f ( p!=NULL) {
Vi s i t a ( p ) ;
Empi l ha(&pl , p>d i r ) ;
Empi l ha(&pl , p>es q ) ;
}
} whi l e ( ! Pi l ha Va z i a ( pl ) ) ;
} / PreOrdem /
voi d Lar gur a ( ArvBi n p) {
F i l a f l ;
I n i c i a l i z a F i l a (& f l ) ;
I n s e r e F i l a (&f l , p ) ;
do {
RemoveFi l a(&f l ,&p ) ;
i f ( p!=NULL) {
Vi s i t a ( p ) ;
I n s e r e F i l a (&f l , p>es q ) ;
I n s e r e F i l a (&f l , p>d i r ) ;
}
} whi l e ( ! Fi l a Va z i a ( f l ) ) ;
} / Lar gur a /
Quase identicos, exceto a troca de esquerda pela direita!
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao
Arvores binarias 136
Preordem com pilha otimizada
voi d PreOrdem( ArvBi n p) {
Pi l ha pl ;
Bool ean f i m = f a l s e ;
I n i c i a l i z a P i l h a (&pl ) ;
do {
i f ( p!=NULL) {
Vi s i t a ( p ) ;
i f ( p>d i r !=NULL)
Empi l ha ( pl , p>d i r ) ;
p = p>es q ;
} el s e i f ( Pi l ha Va z i a ( pl ) )
f i m = t r ue
el s e
Desempi l ha ( pl ,&p ) ;
} whi l e ( ! f i m ) ;
} / PreOrdem /
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao
Arvores binarias 137
Pre-ordem com pilha embutida: Deutsch, Schorr e Waite
... ...
... ... ... ...
... ...
... ...
t p
NULL
A variavel t aponta para o topo de uma pilha formada pelos nos que
levam ao no p (apontadores invertidos).
Implementacao: exerccio.
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao
Arvores binarias de busca 151
Inserc oes e remoc oes em arvores binarias de busca
altura maxima n
Se n 1.000:
altura mnima 10
Se n 1.000.000:
altura mnima 20
O pior caso ocorre, por exemplo, quando a inser cao e feita em ordem
(crescente ou descrescente)
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao
Arvores binarias de busca 152
Balanceamento de arvores
Balanceamento aproximado:
+
+ 0 0
0
Note-se que a primeira arvore e de altura mnima enquanto que a segunda
nao e.
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao
Arvores binarias de busca 155
Pior caso de desbalanceamento: arvores de Fibonacci
F
0
NULL
F
1
0
F
2
0
F
3
F
4
0 0
0
Forma geral altura h2:
F
h
F
h1
F
h2
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao
Arvores binarias de busca 156
Qualquer outra arvore AVL com o mesmo n umero de nos tem altura
menor ou igual este e o pior caso.
N umero de nos de F
h
: N(h) = N(h 1) +N(h 2) + 1, h 2
Usando a aproximacao f
i
((1 +
(5))/2)
i
/
(5) obtem-se:
h 1, 44 log
2
(n + 2) (no maximo).
A ser visto: insercao e remo cao tambem usarao O(log n) opera coes.
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao
Arvores binarias de busca 157
Insercao em arvores AVL
A explicacao a seguir supoe que a inser cao e realizada por uma fun cao
recursiva cujo cabecalho e:
Bool ean Bus c aI ns e r e ( ArvAVL p , T x , Bool ean a l t ) ;
onde
Neste caso, havera modica cao no no corrente com possvel propaga cao
para as chamadas anteriores.
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao
Arvores binarias de busca 160
Insercao em arvores AVL (cont.)
Caso 1: Insercao em arvore vazia:
NULL
h = 0
X
0
h = 1
Neste caso a altura h aumenta. Este fato sera propagado no retorno da
funcao atraves de valor verdadeiro da variavel alt.
Nos casos seguintes, sera suposto sempre que a insercao foi realizada na
subarvore esquerda; o caso da inser cao do lado direito e analogo.
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao
Arvores binarias de busca 161
Insercao em arvores AVL (cont.)
Caso 2: Insercao do lado mais baixo:
+
h
+
x
h
alt: true
0
x
h
alt: false
O conte udo do retangulo representa o resultado da chamada recursiva. O
fator de balanceamento sera modicado somente se a arvore esquerda
aumentou de tamanho.
Neste caso a altura permanece inalterada. Este fato sera propagado no
retorno da fun cao atraves de valor falso da variavel alt. Como
consequencia, o processo de insercao para (exceto os retornos).
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao
Arvores binarias de busca 162
Insercao em arvores AVL (cont.)
Caso 3: Insercao quando as duas alturas sao iguais
0
h
0
x
h+1
alt: true
x
h+1
alt: true
Neste caso, se houve aumento de altura na chamada recursiva, a altura
total tambem aumentara. Este fato sera propagado no retorno da fun cao
atraves de valor verdadeiro da variavel alt.
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao
Arvores binarias de busca 163
Insercao em arvores AVL (cont.)
Caso 4: Insercao do lado mais alto
x
h-1 h+1
alt: true
Neste caso, se houve aumento de altura na chamada recursiva, a arvore
deixara de ser do tipo AVL. Havera entao dois subcasos, dependendo do
lado da subarvore esquerda em que houve insercao. A identica cao do
subcaso sera feita pelo valor do fator de balanceamento nal da subarvore
que aumentou de altura durante a chamada recursiva.
Nos dois casos havera rearranjos convenientes mas locais da arvore.
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao
Arvores binarias de busca 164
Insercao em arvores AVL (cont.)
Caso 4a: insercao do lado esquerdo da subarvore (rotacao LL)
x
h-1 h+1
alt: true
A
B
x
h-2
h-1
h-2 T1 T2
T3
0
0
B
A
x h-2
h-1
h-2
T1
T2 T3
0
B
x
h
alt: false
Neste caso e realizada uma transforma cao denominada rotacao simples LL
(esquerda, esquerda). A altura nal permanece inalterada e a variavel alt
recebe valor falso.
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao
Arvores binarias de busca 165
Insercao em arvores AVL (cont.)
Caso 4b: insercao do lado direito da subarvore (rota cao LR)
x
h-1 h+1
alt: true
+
+0
A
B
C
x x
T1
T2 T3
T4
h-2
h-2
h-2/h-3
A B
C
0
/0 0/+
h-2/h-3
T1
T2 T3
T4 x x
h-2 h-2
0
C
x
h
alt: false
Neste caso, a insercao pode ter sido realizada na subarvore esquerda ou
direita do lado que cresceu, ou entao no proprio no C quando h = 2. Os
fatores de balanceamento nais dependem disto, mas o da raiz sera 0. A
transformacao e denominada rota cao dupla LR (esquerda, direita). A
altura nal permanece inalterada e a variavel alt recebe valor falso.
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao
Arvores binarias de busca 166
Funcao de insercao em arvores AVL
Bool ean Bus c aI ns e r e ( ArvAVL p , T x , Bool ean a l t ) {
/ Devol ve t r ue ou f a l s e conf or me houve ou nao i n s e r c a o ;
s e houve i ns e r c a o , a l t i n d i c a s e houve aumento da a l t u r a .
/
i f (p==NULL) {
p = mal l oc ( s i z e of ( NoArvAVL ) ) ;
(p)>es q = (p)>d i r = NULL; (p)>i n f o = x ;
(p)>bal = z e r o ; a l t = t r ue ;
r et ur n t r ue ;
} el s e {
T i n f o = (p)>i n f o ;
i f ( x==i n f o )
r et ur n f a l s e ;
el s e i f ( x<i n f o ) { / des ce `a es quer da /
Bool ean r e s = Bus c aI ns e r e (&((p)>es q ) , x , a l t ) ;
i f ( ! r e s )
r et ur n f a l s e ;
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao
Arvores binarias de busca 167
Funcao de insercao em arvores AVL (cont.)
i f ( a l t ) { / aumento de a l t u r a /
ArvAVL p1 , p2 ;
swi tch ( ( p)>bal ) {
case mai s : (p)>bal = z e r o ; a l t = f a l s e ; break ;
case z e r o : (p)>bal = menos ; break ;
case menos :
p1 = (p)>es q ;
i f ( p1>bal==menos ) {
/ Rota cao s i mpl e s LL /
} el s e {
/ Rota cao dupl a LR /
}
p1>bal = z e r o ; a l t = f a l s e ;
break ;
}
}
r et ur n t r ue ;
} el s e {
/ des ce `a d i r e i t a anal ogo /
}
}
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao
Arvores binarias de busca 168
Exemplos de insercao em arvores AVL
Insercao de 33:
50
25 65
20 35 55
60 10 30 45
70
40 33
+
+
0 0
0
+
0
0
50
25 65
20 35 55
60 10 30 45
70
40 33
+
+
0 +
0 0
0
0
0
Neste caso, houve uma insercao simples e a mudanca de fatores de
balanceamento afetou os nos marcados.
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao
Arvores binarias de busca 169
Exemplos de insercao em arvores AVL (cont.)
Insercao de 63:
50
25 65
20 35 55
60 10 30 45
70
40 63
+
+
0 0
0
+
0
0
50
25 65
20 35 60
63 10 30 45
70
40
55
+
0
0 0
0
0
+
0
0
Neste caso, a insercao causou uma rota cao simples do tipo RR, afetando
os nos marcados.
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao
Arvores binarias de busca 170
Exemplos de insercao em arvores AVL (cont.)
Insercao de 41:
50
25 65
20 35 55
60 10 30 45
70
40
41
+
+
0 0
0
+
0
0
50
25 65
20 35 55
60 10 30 41
70
40 45
+
+
0 0
0
+
0 0
0
0
Neste caso, a insercao causou uma rota cao dupla do tipo LR, afetando os
nos marcados.
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao
Arvores binarias de busca 171
Remocao em arvores AVL
1. Transforma cao em remocao de uma folha - tres casos:
o no tem grau dois: o seu valor e substitdo pelo maior valor contido na
sua subarvore esquerda (ou o menor valor contido na sua subarvore
direita); o no que continha o menor (ou maior) valor copiado tem
necessariamente grau zero ou um, recaindo num dos casos anteriores.
2. Remocao propriamente dita.
3. O algoritmo de remocao sera apresentado novamente como uma
funcao recursiva que indica se houve diminuicao da altura da arvore
apos a remo cao. Serao estudados apenas os casos de remocao do
lado esquerdo; os outros sao analogos.
4. A implementacao do algoritmo e um exerccio.
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao
Arvores binarias de busca 172
Remocao em arvores AVL (cont.)
Caso 1: Remo cao de uma folha
X
0
h = 1
NULL
h = 0
Neste caso a altura h diminui. Este fato sera propagado no retorno da
funcao atraves de valor verdadeiro da variavel alt.
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao
Arvores binarias de busca 173
Remocao em arvores AVL (cont.)
Caso 2: Remo cao quando as duas alturas sao iguais
0
x
h
0
h
alt: true
+
h
alt: false
O conte udo do retangulo representa o resultado da chamada recursiva. O
fator de balanceamento sera modicado somente se a arvore esquerda
diminuiu de tamanho.
Neste caso, mesmo que haja diminui cao de altura na chamada recursiva, a
altura total permanece a mesma. Este fato sera propagado no retorno da
funcao atraves de valor falso da variavel alt.
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao
Arvores binarias de busca 174
Remocao em arvores AVL (cont.)
Caso 3: Remo cao do lado mais alto
x
h
alt: true
h-1
0
alt: true
h-1
Neste caso, se a chamada recursiva indica diminuicao da altura da
subarvore, a altura nal da arvore tambem diminui e o processo continua.
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao
Arvores binarias de busca 175
Remocao em arvores AVL (cont.)
Caso 4: Remo cao do lado mais baixo
+
x
h
+
alt: true
h h-2
Caso a subarvore esquerda tenha sua altura diminuda, a arvore deixa de
ser do tipo AVL. Ha tres subcasos, dependendo do fator de balanceamento
do lho direito da raiz.
Note-se que, neste caso, tem-se h 3.
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao
Arvores binarias de busca 176
Remocao em arvores AVL (cont.)
Caso 4a: Fator de balanceamento 0 (rotacao RR)
+
alt: true
h h-2
+
0
A
B
h-2
h-3
h-2
T1
T2 T3
+
B
A
h-2
h-3
h-2
T1
T2
T3
B
h
alt: false
Neste caso e realizada uma transformacao denominada rotacao simples RR
(direita, direita). A altura nal permanece inalterada e a variavel alt
recebe valor falso. O processo de ajuste da arvore para.
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao
Arvores binarias de busca 177
Remocao em arvores AVL (cont.)
Caso 4b: Fator de balanceamento +1 (rotacao RR)
+
alt: true
h h-2
+
+
A
B
h-2
h-3
h-3
T1
T2
T3
0
0
B
A
h-2
h-3 h-3
T1 T2
T3
h-1
0
B
h-1
alt: true
Neste caso tambem e realizada a transformacao denominada
rotacao simples RR (direita, direita). A altura nal diminui e a variavel alt
recebe o valor verdadeiro. O processo de ajuste da arvore continua.
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao
Arvores binarias de busca 178
Remocao em arvores AVL (cont.)
Caso 4c: Fator de balanceamento -1 (rotacao RL)
+
alt: true
h h-2
+
+0
A
B
C
T1
T2 T3
T4
h-3
h-3
h-3/h-4
C
A B
0
/0 0/+
h-3/h-4
T1
T2 T3
T4
h-3 h-3
0
C
h-1
alt: true
Neste caso tambem e realizada uma transformacao denominada
rotacao dupla RL (direita, esquerda). A altura nal diminui e a variavel
alt recebe o valor verdadeiro. O processo de ajuste da arvore continua.
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao
Arvores binarias de busca 179
Exemplos de remocao em arvores AVL
Remocao de 40:
50
25 65
20 35 55
60 10 30 45
70
40
+
+
0 0
0
+
0
0
50
25 65
20 35 55
60 10 30 45
70
0
0
+
0 0
0
0 0
0
Neste caso, houve uma remo cao simples e a mudan ca de fatores de
balanceamento afetou os nos marcados.
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao
Arvores binarias de busca 180
Exemplos de remocao em arvores AVL (cont.)
Remocao de 60:
50
25 65
20 35 55
60 10 30 45
70
40
+
+
0 0
0
+
0
0
35
25 50
20 30 45 65
10 40 55 70
0
0 0 0
+
0 0
0
Neste caso, a remocao causou, apos a volta da chamada com a raiz
original, uma rota cao dupla do tipo LR, afetando os nos marcados.
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao
Arvores binarias de busca 181
Arvores do tipo B
(B trees)
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao
Arvores do tipo B 182
Discos magneticos
Esbo co esquematico do corte vertical de uma unidade com quatro discos
(oito superfcies):
0
1
2
3
4
5
6
7
cabe cas leitoras/gravadoras
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao
Arvores do tipo B 183
Discos magneticos (cont.)
Esbo co esquematico de uma superfcie de um disco:
.
.
.
uma trilha um cilindro
(trilhas iguais)
setores
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao
Arvores do tipo B 184
Discos magneticos (cont.)
Dados para um disco ctcio de 40 gigabytes:
10 cabecas leitoras/gravadoras
Solucao: log
k
n, com k >> 2
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao
Arvores do tipo B 185
Arvores B
b/2| r b se no ,= raiz
1 r b se no = raiz
3. cada folha tem um n umero variavel r de registros obedecendo `a mesma
restricao do item anterior;
4. os campos de informa cao contidos nos registros obedecem `a
propriedade de arvores de busca.
Arvores B
Arvores B
+
:
regra de descida:
Arvores gerais
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao
Arvores gerais 218
Exemplo de arvore geral
A
B
F G
C
H
D E
I
L
J K
Pre-ordem de orestas:
Visitar a raiz de T
1
Percorrer a oresta F
1
em pre-ordem de orestas
Percorrer a oresta (T
2
, . . . , T
m
) em pre-ordem de
orestas
Pos-ordem de orestas:
Percorrer a oresta F
1
em pos-ordem de orestas
Percorrer a oresta (T
2
, . . . , T
m
) em pos-ordem de
orestas
Visitar a raiz de T
1
Inordem de orestas:
Percorrer a oresta F
1
em inordem de orestas
Visitar a raiz de T
1
Percorrer a oresta (T
2
, . . . , T
m
) em inordem de orestas
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao
Arvores gerais 224
Percursos em profundidade de orestas (cont.)
A
D
J
E
K L
F G
M
B C
H I
N O
Q
P
Pre-ordem: A,D,J,E,K,L,F,G,M,B,C,H,I,N,O,Q,P
Pos-ordem: J,L,K,M,G,F,E,D,Q,P,O,N,I,H,C,B,A
Inordem: J,D,K,L,E,F,M,G,A,B,H,N,Q,O,P,I,C
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao
Arvores gerais 225
Percursos em profundidade de orestas (cont.)
Propriedades:
Arvores digitais
(Tries)
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao
Arvores digitais 227
Conjuntos de cadeias de caracteres
Exemplo:
a at from his no
an be had i not
and but have in of
are by he is on
as for her it or
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao
Arvores digitais 228
Arvore digital
a at from his no
an be had i not
and but have in of
are by he is on
as for her it or
a b f h i n o
n r s t e u y o r a e i n s t o f n r
d e t r o d v r s t
m e
39 nos
20 folhas
Uso de memoria:
Uso de memoria:
Uso de memoria:
Exemplos de listas:
A: ((4,7),(4,7,(8)))
B: ((1,4),(7,8))
C: (3,B,B)
D: (5,8,D)
E: ()
Aplicacoes:
inteligencia articial
...
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Listas generalizadas 246
LISP (cont.)
Exemplo 1: fun cao fatorial
( defun f a t o r i a l ( n)
( cond ( l e q n 1)
1
( mul t n ( f a t o r i a l ( mi nus n 1) ) )
)
)
f(jo~ao) = 3
Virtudes
simplicidade
Problemas
tratamento de colisoes
Propriedades desejaveis:
eciencia de calculo
bom espalhamento
Tecnicas:
Para p = 51 teramos:
f(carlos) = ( ((((2 26 + 0) 26 + 17) 26 + 11)
26 + 14) 26 + 18 ) mod 51
= 24.069.362 mod 51 = 14
reespalhamento linear
reespalhamento quadratico
reespalhamento duplo
Lapides (tombstones):
entradas que indicam posi coes ocupadas para ns de busca, mas livres
para ns de insercao.
n e o n umero de entradas
b e o tamanho da tabela
n e o n umero de entradas
b e o tamanho da tabela
Objetivos:
economia de espa co
velocidade de transmissao
Exemplo de alfabeto: / = a, b, c, d, e, f
a b c d e f
frequencia de cada letra 45 13 12 16 9 5
codica cao usando 3 bits 000 001 010 011 100 101
codica cao de tamanho variavel 0 101 100 111 1101 1100
Algoritmo (guloso):
1. Construa uma oresta de folhas, cada uma correspondendo a um
caractere, com a respectiva frequencia como seu peso.
2. Enquanto a oresta tiver mais de uma arvore, repita:
construa uma nova arvore binaria t, com subarvores t1 e t2, e com peso
que e a soma dos pesos das duas subarvores
Variantes:
gerenciamento misto
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Gerenciamento de mem oria 277
Gerenciamento explcito
Congura cao generica da memoria:
disp
m
Livre:
? m
Em uso:
Congura cao inicial:
M
disp
O que fazer quando malloc nao acha uma area de tamano suciente
requer outra area ao sistema operacional
Algumas solucoes:
Areas conjugadas (irmas) facilmente reconhecidos pelos ndices sob
forma binaria.
fa ca k = k+1
Caractersticas:
Fases:
marcacao
Hipoteses
Algoritmo:
Hipoteses simplicadoras:
tamanho xo de registros
Declaracoes:
typedef s t r uc t Bl oco ApBl oco ;
typedef s t r uc t Bl oco {
Bool ean marca ;
ApBl oco d e s t i n o ; / s e houver compacta cao /
. . .
i nt numAps ;
ApBl oco apont s [ NUM MAX APONTS] ;
} Bl oco ;
ApBl oco di s p ; / i n i c i a l me n t e t odos os bl oc os /
Bl oco memori a [ TAM MEM DIN] ;
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Gerenciamento de mem oria 291
Marcacao e coleta (cont.)
Funcao de marca cao:
voi d Marcar ( ApBl oco p) {
i nt i ;
i f ( p!=NULL) {
i f ( ! p>marca ) {
p>marca = t r ue ;
f or ( i =0; i <p>numAps ; i ++)
Marcar ( p>apont s [ i ] ) ;
}
}
} / Marcar /
A funcao Marcar deve ser chamada para cada variavel apontadora na pilha
de execucao.
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Gerenciamento de mem oria 292
Marcacao e coleta (cont.)
Funcao de coleta:
voi d Col e t a r ( ) {
i nt i ;
di s p = NULL;
f or ( i =0; i <TAM MEM DIN; i ++)
i f ( memori a [ i ] . marca ) / em uso /
memori a [ i ] . marca = f a l s e ;
el s e { / i n s e r e na l i s t a d i s p o n v e l /
memori a [ i ] . apont s [ 0 ] = di s p ;
di s p = &(memori a [ i ] ) ;
}
} / Col e t a r /
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Gerenciamento de mem oria 293
Marcacao e compactacao
Hipoteses
Algoritmo:
Compactacao (copia).
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Gerenciamento de mem oria 294
Marcacao e compactacao (cont.)
Exemplo de situa cao inicial:
A funcao DesalocaRefs(p):
Problemas:
E possvel mudar a implementacao de maneira que as funcoes passem
fazer parte da propria estrutura de dados uma caracterstica de
objetos; neste caso sao denominados metodos.
/ Fi gur a /
posx posy
0
1
2
3
(Classe pai)
Area (Figura)
Desenhar (Figura)
Transladar (Figura)
Todos os objetos de uma classe apontam para a mesma tabela de
metodos. Pode haver mais informacoes. Neste exemplo, todas as fun coes
foram transformadas em metodos.
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Abstracao de Dados e Objetos 315
Objetos (cont.)
c l a s s Ret angul o e xt e nds Fi gur a
f l oat a l t , l a r g ;
Ret angul o ( f l oat a , f l oat l )
t h i s . a l t = a ;
t h i s . l a r g = l ;
t h i s . posx = 0 . 0 ;
t h i s . posy = 0 . 0 ;
f l oat Area ( )
r etur n a l t l a r g ;
voi d Desenhar ( ) . . . ;
Ret angul o Gi r ar 90 ( )
r etur n new Ret angul o ( t h i s . l ar g , t h i s . a l t ) ;
/ Ret angul o /
posx posy
alt larg
4
0
1
2
3
Classe Figura
Area (Retangulo)
Desenhar (Retangulo)
Transladar (Figura)
Girar90 (Retangulo)
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Abstracao de Dados e Objetos 316
Objetos (cont.)
c l a s s Quadrado e xt e nds Ret angul o
Quadrado ( f l oat l )
s upe r ( l , l ) ;
/ Ret angul o /
posx posy
alt larg
4
0
1
2
3
Classe Retangulo
Area (Retangulo)
Desenhar (Retangulo)
Transladar (Figura)
Girar90 (Retangulo)
Somente o construtor e diferente da classe Retangulo.
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Abstracao de Dados e Objetos 317
Objetos (cont.)
c l a s s Ci r c u l o e xt e nds Fi gur a
f l oat r a i o ;
Ci r c u l o ( f l oat r )
t h i s . posx = 0 . 0 ;
t h i s . posy = 0 . 0 ;
t h i s . r a i o = r ;
f l oat Area ( )
r etur n PI s qr ( r a i o ) ;
voi d Desenhar ( ) . . . ;
voi d Dupl i c a r ( )
t h i s . r a i o = 2. 0 t h i s . r a i o ;
/ Ret angul o /
posx posy
raio
4
0
1
2
3
Classe Figura
Area (Circulo)
Desenhar (Circulo)
Transladar (Figura)
Duplicar (Circulo)
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Abstracao de Dados e Objetos 318
Objetos (cont.)
Representacao de todas as classes:
0
1
2
3
(Classe pai)
Area (Figura)
Desenhar (Figura)
Transladar (Figura)
4
0
1
2
3
Area (Retangulo)
Desenhar (Retangulo)
Transladar (Figura)
Girar90 (Retangulo)
4
0
1
2
3
Area (Retangulo)
Desenhar (Retangulo)
Transladar (Figura)
Girar90 (Retangulo)
4
0
1
2
3
Area (Circulo)
Desenhar (Circulo)
Transladar (Figura)
Duplicar (Circulo)
Figura
Retangulo
Quadrado
Circulo
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Abstracao de Dados e Objetos 319
Objetos (cont.)
Exemplo de uso dos objetos:
i nt mai n ( ) {
Fi gur a f = new Ci r c u l o ( 1 0 . 0 ) ;
Ret angul o r =
new Ret angul o ( 1 0 . 0 , 2 0 . 0 ) ;
Quadrado q = new Quadrado ( 5 0 . 0 ) ;
Ci r c u l o c = new Ci r c u l o ( 3 0 . 0 ) ;
p r i n t f ( %f \n , f . Area ( ) ) ;
p r i n t f ( %f \n , r . Area ( ) ) ;
c . Desenhar ( ) ;
f = q ;
f . Tr ans l adar ( 5 . 0 , 8 . 0 ) ;
f . Desenhar ( ) ;
p r i n t f ( %f \n , f . Area ( ) ) ;
/ comandos i n v a l i d o s /
f . Dupl i c a r ( ) ;
f . Gi r ar 90 ( ) ;
c . Gi r ar 90 ( ) ;
c = r ;
q = f ;
} / mai n /
Os comandos invalidos seriam detectados pelo compilador.
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Abstracao de Dados e Objetos 320
Algoritmos de ordena cao
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Algoritmos de ordenacao 321
Generalidades
A altura da arvore e 3.
E um algoritmo estavel.
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Algoritmos de ordenacao 326
Insercao simples
d
0 n-1
i =
t
voi d i n s e r c a o ( ApVetor v ) {
i nt n = v>n , i , j , t ;
i nt d = ( v>dados ) ;
f or ( i =0; i <n1; i ++) {
t = d [ i +1] ; j = i ;
whi l e ( ( j >=0)&&(t<d [ j ] ) ) {
d [ j +1] = d [ j ] ; j ;
}
d [ j +1] = t ;
}
} / i n s e r c a o /
E um algoritmo estavel.
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Algoritmos de ordenacao 327
Selecao simples
d
0 n-1
i =
p
voi d s e l e c a o ( ApVetor v ) {
i nt n = v>n , i , j , p ;
i nt d = ( v>dados ) ;
f or ( i =0; i <n1; i ++) {
p = i ;
f or ( j=i +1; j <n ; j ++)
i f ( d [ j ]<d [ p ] )
p = j ;
t r oc a (&d [ i ] , &d [ p ] ) ;
}
} / s e l e c a o /
E um algoritmo estavel.
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Algoritmos de ordenacao 328
Algoritmo Quicksort
E um algoritmo recursivo que ordena segmentos do vetor dado.
Incio do particionamento:
d
0 n-1 esq
dir
i = = j
p (pivot)
Escolha do pivo:
Eciencia:
Estabilidade:
exerccios:
O algoritmo e estavel.
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Algoritmos de ordenacao 340
Intercalacao iterativa (cont.)
vd
...
0 n-1
wd
...
vd
...
wd
...
vd
...
Quando n nao e uma potencia de 2, os ultimos segmentos de cada estagio
podem car mais curtos do que os outros.
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Algoritmos de ordenacao 341
Intercalacao iterativa (cont.)
voi d i n t e r c a l a I t e r a t i v o ( ApVetor v ) {
/ Ordena de 2 em 2 , de 4 em 4 , . . . , por i n t e r c a l a c a o /
i nt n = v>n ;
i nt td = 1; / 1 , 2 , 4 , . . . /
i nt esq , di r , l d ;
i nt tamanho = s i z e of ( Vet or )+s i z e of ( i nt ) ( n1);
Bool ean par = f a l s e ;
ApVetor w = ( ApVetor ) mal l oc ( tamanho ) ;
w>n = v>n ;
(continua)
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Algoritmos de ordenacao 342
Intercalacao iterativa (cont.)
whi l e ( td<n) {
es q = 0; par = ! par ;
do {
d i r = es q+td ; l d = d i r+td ;
i f ( di r >=n) { / l ado d i r e i t o v a z i o /
d i r = n ; l d = n1;
} el s e i f ( l d>n)
l d = n ;
i f ( par ) i n t e r c a l a I t e r a t i v o Au x ( v , w, esq , di r , l d ) ;
e l s e i n t e r c a l a I t e r a t i v o Au x (w, v , esq , di r , l d ) ;
es q = d i r+td ;
} whi l e ( esq<n ) ;
td = 2 td ;
}
i f ( par ) memcpy( v , w, tamanho ) ;
f r e e (w) ;
} / i n t e r c a l a I t e r a t i v o /
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Algoritmos de ordenacao 343
Intercalacao iterativa (cont.)
voi d i n t e r c a l a I t e r a t i v o Au x ( ApVetor v , ApVetor w,
i nt esq , i nt di r , i nt l d ) {
/ I n t e r c a l a v . dados [ es q : di r 1] e
v . dados [ d i r : l d 1] em w. dados [ es q : l d 1] /
i nt dv = ( v>dados ) , dw = (w>dados ) ;
i nt i = esq , j = di r , k= es q ;
whi l e ( ( i <d i r )&&( j <l d ) ) {
i f ( dv [ i ]<=dv [ j ] ) {
dw[ k ] = dv [ i ] ; i ++;
} e l s e {
dw[ k ] = dv [ j ] ; j ++;
}
k++;
}
whi l e ( i <d i r ) { dw[ k ] = dv [ i ] ; i ++; k++; }
whi l e ( j <l d ) { dw[ k ] = dv [ j ] ; j ++; k++; }
} / i n t e r c a l a I t e r a t i v o Au x /
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Algoritmos de ordenacao 344
Intercalacao iterativa (cont.)
Exemplo de execu cao:
Vetor original:
07 49 73 58 30 72 44 78 23 09 40 65 92 42 87 03 27 29 40 12
----------------------------------------------------------------------------------------------------
td=1:
| 07 49 | 58 73 | 30 72 | 44 78 | 09 23 | 40 65 | 42 92 | 03 87 | 27 29 | 12 40 |
td=2:
| 07 49 58 73 | 30 44 72 78 | 09 23 40 65 | 03 42 87 92 | 12 27 29 40 |
td=4:
| 07 30 44 49 58 72 73 78 | 03 09 23 40 42 65 87 92 | 12 27 29 40 |
td=8:
| 03 07 09 23 30 40 42 44 49 58 65 72 73 78 87 92 | 12 27 29 40 |
td=16:
| 03 07 09 12 23 27 29 30 40 40 42 44 49 58 65 72 73 78 87 92 |
----------------------------------------------------------------------------------------------------
Resultado:
03 07 09 12 23 27 29 30 40 40 42 44 49 58 65 72 73 78 87 92
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Algoritmos de ordenacao 345
Intercalacao recursiva
Passos do algoritmo:
se o tamanho de v
1
e maior que 1, ordena-lo recursivamente
se o tamanho de v
2
e maior que 1, ordena-lo recursivamente
intercalar os vetores v
1
e v
2
, deixando o resultado no vetor v original
E facil vericar que o n umero de compara coes e da ordem de
O(nlog n) (otimo).
i = 1
Enquanto ha dados em f:
i = i + 1
O algoritmo e estavel.
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Algoritmos de ordenacao 352
Ordenacao digital (cont.)
Exemplo (m=2):
Vetor original:
07 49 73 58 30 72 44 78 23 09 40 65 92 42 87 03 27 29 40 12
Distribui c~ao pelo ultimo dgito:
0: 1: 2: 3: 4: 5: 6: 7: 8: 9:
30 40 40 | | 72 92 42 12 | 73 23 03 | 44 | 65 | | 07 87 27 | 58 78 | 49 09 29
Distribui c~ao pelo penultimo d gito:
0: 1: 2: 3: 4: 5: 6: 7: 8: 9:
03 07 09 | 12 | 23 27 29 | 30 | 40 40 42 44 49 | 58 | 65 | 72 73 78 | 87 | 92
Resultado:
03 07 09 12 23 27 29 30 40 40 42 44 49 58 65 72 73 78 87 92
c 2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Algoritmos de ordenacao 353