Apresentação do PowerPoint

Propaganda
Árvores Binárias
Disciplina de Algoritmos e Estrutura de
Dados III
Prof. Marcos Antonio Schreiner
17/03/2015
1
Introdução
●
●
Árvore binárias são estruturas importantes toda
vez que uma decisão binária deve ser tomada
em um algoritmo.
O que é decisão binária?
2
Introdução
●
Por exemplo: Dada uma sequencia de números
verificar se existem ou não números duplicados.
1) Comparar cada novo número com todos os
números já lidos.
2) Manter um vetor ordenado com os números
lidos e fazer uma busca binária a cada número
lido.
3) Outra solução é usar uma árvore binária para
manter os números.
3
Árvore Binária - Definição
Uma árvore binária T é um conjunto finito de nós com
as propriedades:
●
●
Ou o conjunto é vazio (T =  ; ou
O conjunto consiste em uma raiz r, e exatamente
duas árvores binárias distintas T L e TR.
–
A árvore TL é chamada árvore da esquerda de T,
–
A árvore TR é chamada árvore da direita de T.
Logo:
4
Árvore Binária - Exemplo
5
Árvores N-árias - Definição
Uma árvore N-aria T é um conjunto finito de nós com
as propriedades:
●
●
Ou o conjunto é vazio, T=  ; ou
O conjunto consiste em uma raiz, R, e exatamente
N árvores N-arias distintas. Os demais nós são
repartidos em N  0 sub conjuntos, T0,T1, ..., TN-1,
cada qual sendo uma árvore N-aria tal que:
6
Árvores Binárias - Definições
●
●
●
Árvore binária quase completa é aquela que
contém subárvores vazias no último ou no
penúltimo nível da árvore.
Árvore binária completa é aquela que contém
subárvores vazias apena no último nível da árvore.
Árvore binária zigue-zague é aquela que tem
altura igual ao número de seus nós.
7
Árvores Binárias - Definições
●
●
●
●
Uma árvore estritamente binária não contém nós
com apenas um filho.
O número de subárvores vazias em uma árvore
estritamente binária com n > 0 nós é (n+1)/2.
Se uma árvore completa que contém m nós no
nível l ela conterá 2m nós no nível l+1.
Cada nível l contém 2l-1 nós.
8
Árvores Binárias - Definições
●
●
●
Uma árvore binária completa com n > 0 nós possui
uma altura h = lg(n+1) ou h = lg(n+1)-1.
Uma árvore estritamente binária com m folhas tem
2m-1 nós.
Uma árvore binária quase completa com n nós é
estritamente binária sse n for impar.
9
Árvores Binárias – Operações
●
Seja p um ponteiro para um nó de uma árvore binária.
–
esquerda(p): retorna o ponteiro para o filho esquerdo de p;
–
direita(p): retorna o ponteiro para o filho direito de p;
–
pai(p): retorna o ponteiro para o pai de p;
–
irmao(p): retorna o ponteiro para o irmão de p;
–
criarArvore(x): cria uma nova árvore binária apenas com a
raiz, que contém a informação x.
–
criaEsquerda(p, x): cria o filho esquerdo de p;
–
criaDireito(p, x): cria o filho direito de p;
10
Exemplo da Introdução
Dada uma sequencia de números verificar se
existem ou não números duplicados.
11
Solução do Exemplo da Introdução
1) O primeiro número lido é colocado na raiz da árvore.
2) Cada novo número lido é comparado com o elemento raiz:
1) Se é igual é descartado.
2) Se é menor repetimos o processo 2 com a árvore da direita;
3) Se maior repetimos o processo 2 com a árvore da esquerda.
4) O processo continua até que uma duplicata é encontrada ou
5) uma árvore vazia é achada.
1) Os menores são inseridos a direita;
2) Os maiores são inseridos a esquerda.
Qual a complexidade temporal?
12
Percurso em Árvore Binária
O percurso pode ser:
●
●
Em Profundidade:
– Percurso pré-ordem (pré-fixa): a raiz é visitada
antes;
– Percurso em ordem (in-fixa): a raiz é visitada
na ordem, entre as subárvores;
– Percurso em pós-ordem (pós-fixa): a raiz é
visitada depois.
Em Largura.
13
Percurso em Profundidade
Percurso em-ordem (in-fixa):
–
–
–
Percorra em ordem a subárvore da esquerda;
Visite/processe a raiz;
Percorra em ordem a subárvore da direita
14
Implementação de árvores binárias
Esta árvore binária tem altura h e número n de nós.
n = 2h - 1 = 24 - 1 = 15
1
2
3
i
15
Implementação de árvores binárias
●
●
Se um nó está na posição i, seu pai está na
posição (i-1)/2 se i > 0;
O filho esquerdo de i está na posição:
–
–
●
2i+1 se 2*i < n;
Caso contrário este filho não existe.
O filho direito de i está na posição:
–
2*i + 2 se 2*i+2 < n;
–
Caso contrário este filho não existe.
16
Implementação de árvores binárias
●
●
Os nós das árvores binárias podem ser
representados da forma
O que pode ser acrescentado nesta
representação?
17
Implementação de árvores binárias
18
Exercícios
1)
Implemente um TAD Árvore binária de inteiros e
de string.
2)
Use TAD Árvore binária de inteiros para
implementar a solução do exemplo apresentado
em sala.
3)
Use TAD Árvore binária de string para
implementar um interpretador de expressões
matemáticas simples. OBS: Utilize o analisador
léxico, sintático e o interpretador desenvolvidos na
disciplina de Algoritmos e Estrutura de Dados II.
19
Representação de Árvores por Árvores
Binárias
Se uma árvore possui um ordem muito
grande
O número de árvores vazias inviabiliza a
estrutura de dados.
20
Representação de Árvores por Árvores
Binárias
1) Se reproduz a raiz da árvore original para a raiz
da árvore binária equivalente;
2) Para cada nó da árvore original:
1) O filho mais a esquerda X na árvore original é o filho
mais a esquerda da árvore binária.
2) Os irmão de X são descendentes do lado direito de X
21
Representação formal de Árvores por
Árvores Binárias
Seja T uma árvore e B(T) a árvore binária
correspondente e B(T) possui um nó B(v) para
cada nó v de T. As raízes de B(T) e T coincidem.
●
●
O filho esquerdo de B(v) corresponde ao primeiro filho de
v, caso exista.
O filho direito de B(v) corresponde ao irmão de v
localizado imediatamente à sua direita, caso exista.
22
Representação de Árvores por Árvores
Binárias
●
●
●
O percurso pré-fixo da árvore original coincide
com o percurso pré-fixo da árvore binária.
O percurso pós-fixo na árvore original coincide
com o percurso in-fixo na árvore binária.
O percurso in-fixo não tem sentido senão em
árvores binárias e, portanto, não existe na árvore
original.
23
Representação de Árvores por Árvores
Binárias
24
Representação de Árvores por Árvores
Binárias
25
Exercícios
1)Representar as seguintes árvores com árvores
binárias:
1)
2)
3)
4)
(A (B) (C) (D (E)) (F));
(G (H (I) (J)) (K) (L (M)));
(A (B (C (H (I) (J (M)) (L)) (D)) (E (N)(O)) (F (G)));
(A (B (G) (H) (I) (L (M))) (C (N)) (D (E)) (F (O) (P)));
2) Comprove a equivalência entre as árvores fazendo o
percurso pré-ordem em-ordem e pós-ordem.
26
Referências
SZWARCFITER, J. L., MARKENZON, L. Estruturas de
Dados e seus Algoritmos. 3a ed. Rio de Janeiro: LTC,
2010.
TENENBAUM, A. M., LANGSAM, Y., AUGENSTEIN, M.
J. Estruturas de Dados Usando C. São Paulo:
Makron, 1995.
LEISERSON, C. E., RIVEST, R. L., CORMEN, T. H.,
STEIN, C. Algoritmos – Teoria e prática. Rio de
Janeiro: Campus, 2002.
2
Download