• Nenhum resultado encontrado

E STRUTURAS DED ADOSE A LGORITMOS Á RVOREB

N/A
N/A
Protected

Academic year: 2019

Share "E STRUTURAS DED ADOSE A LGORITMOS Á RVOREB"

Copied!
48
0
0

Texto

(1)

1

E

STRUTURASDE

D

ADOS E

A

LGORITMOS

Á

RVORE

B

INÁRIA Adalberto Cajueiro

Departamento de Sistemas e Computação Universidade Federal de Campina Grande

1

Á

RVORE

(E

XEMPLO

)

Como seria pesquisar

a localização de um arquivo no

windows explorer se não

tivéssemos diretórios?

Para entradas realmente grandes, o acesso linear é proibitivo!

Precisamos de alguma estrutura nao-linear de

(2)

2

Á

RVORE

 Estrutura não-linear com tempo de acesso em média O(log n).

 Coleção de nós em hierarquia

 Vazia ou

 Raiz (root) e zero ou mais subárvores

Raiz da subárvore é um nó filho do nó raiz

 A raiz de uma árvore é unica!

 Não possui ciclos

 N nós, N-1 arestas

3

Á

RVORE

(I

LUSTRACAO

)

raiz

...

raiz

root

(3)

3

Á

RVORE

(I

LUSTRACAO

)

raiz

...

folha (leaf)

5

6

Á

RVORE

raiz

...

Nível 0

Nível 1

Nível k

Nível k + 1

(4)

4

Á

RVORE

Uma

árvore binária

é uma estrutura de

dados caracterizada por:

 Ou não tem elemento algum (árvore vazia)

 Ou tem um elemento distinto, denominado raiz, com duas referencias para duas

estruturas diferentes, denominadas sub-árvore (filho) esquerda e sub-árvore (filho) direita

 Cada nó pode ter grau: 0, 1 ou 2

7

Á

RVORE

 A ligação entre os nós são vistas como

apontadores direcionados do pai para os filhos.

 Por questoes de implementação apontadores podem

existir também dos filhos para o pai

 O numero de filhos por nó diferenciam os vários tipos de arvores existentes.

 Cada nó da árvore encontra-se em determinado nível. A raiz encontra-se no nível zero.

Propriedade fundamental: só existe um caminho da raiz para um outro nó da árvore.

 Altura de uma árvore: comprimento do caminho mais longo da raiz até as folhas

(5)

5

Á

RVORE

(A

PLICABILIDADE

)

Representacao de expressoes aritméticas

 5*3 + 4/2

+

* /

5 3 4 2

9

E

XERCÍCIO

Qual a profundidade do nó 6?

Qual a altura da árvore?

Os nós 6 e 9 estão no mesmo nível? e 7 e 11?

Qual o grau do nó 7? E de 9? E de 4?

(6)

6

Á

RVORES

E

STRITAMENTE

B

INÁRIAS

 Cada nó possui grau 0 ou 2

 Quantos nós terá uma AEB com n folhas?

7

4

9

1

6

3

2

Desenhe diversas arvores e tente deduzir.

11

E

XERCÍCIO

 A árvore a seguir é estritamente binária? Justifique.

(7)

7

Á

RVORE

B

INÁRIA

C

OMPLETA

Todos os níveis são completos (folhas estão

no mesmo nível)

 Qual a relacao que existe entre a altura de uma árvore binária completa e o número de elementos em cada nível?

 Qual a relacao que existe entre a altura de uma árvore binária completa e o número de elementos no total?

nível 0 – nos:1 – total:1

nível 1 – nos:2 – total:3

nível 2 – nos:4 – total:7

nível 3 – nos:8 – total:15

13

Á

RVORE

B

INÁRIA

C

OMPLETA

Todos os níveis são completos (folhas estão

no mesmo nível)

 Qual a relacao que existe entre a altura de uma árvore binária completa e o número de elementos em cada nível?

 Qual a relacao que existe entre a altura de uma árvore binária completa e o número de elementos no total?

nível 0 – nos:1 – total:1

nível 1 – nos:2 – total:3

nível 2 – nos:4 – total:7

nível 3 – nos:8 – total:15

h 2h 2h+1 - 1

(8)

8

Á

RVORES

B

INÁRIAS

(P

ERCURSOS

)

 Formas de percurso em árvore binárias:

 Pré-ordem (RAIZ, ESQ, DIR)

Visita raiz

Percorre sub-árvore esquerda em pré-ordem

Percorre sub-árvore direita em pré-ordem

 Em-ordem (simétrica) (ESQ, RAIZ, DIR)

Percorre sub-árvore esquerda em ordem simétrica Visita raiz

Percorre sub-árvore direita em ordem simétrica  Pós-ordem (ESQ, DIR, RAIZ)

Percorre sub-árvore esquerda em pós-ordem

Percorre sub-árvore direita em pós-ordem Visita raiz

 Applet:

 http://www.cosc.canterbury.ac.nz/mukundan/dsal/BTree.html

15

A

RVORES BINÁRIAS

 Impressão em pré-ordem (R,E,D):

8

4 12

2

1 3

6

5 7

10 14

9 11 13 15

(9)

9

A

RVORES BINÁRIAS

 Impressão em pré-ordem:

8

4 12

2

1 3

6

5 7

10 14

9 11 13 15 8

17

A

RVORES BINÁRIAS

 Impressão em pré-ordem:

8

4 12

2

1 3

6

5 7

10 14

9 11 13 15 8,4

(10)

10

A

RVORES BINÁRIAS

 Impressão em pré-ordem:

8

4 12

2

1 3

6

5 7

10 14

9 11 13 15 8,4,2

19

A

RVORES BINÁRIAS

 Impressão em pré-ordem:

8

4 12

2

1 3

6

5 7

10 14

9 11 13 15 8,4,2,1

(11)

11

A

RVORES BINÁRIAS

 Impressão em pré-ordem:

8

4 12

2

1 3

6

5 7

10 14

9 11 13 15 8,4,2,1,3

21

A

RVORES BINÁRIAS

 Impressão em pré-ordem:

8

4 12

2

1 3

6

5 7

10 14

9 11 13 15 8,4,2,1,3,6

(12)

12

A

RVORES BINÁRIAS

 Impressão em pré-ordem:

8

4 12

2

1 3

6

5 7

10 14

9 11 13 15 8,4,2,1,3,6,5

23

A

RVORES BINÁRIAS

 Impressão em pré-ordem:

8

4 12

2

1 3

6

5 7

10 14

9 11 13 15 8,4,2,1,3,6,5,7

(13)

13

A

RVORES BINÁRIAS

 Impressão em pré-ordem:

8

4 12

2

1 3

6

5 7

10 14

9 11 13 15 8,4,2,1,3,6,5,7, 12

25

A

RVORES BINÁRIAS

 Impressão em pré-ordem:

8

4 12

2

1 3

6

5 7

10 14

9 11 13 15

8,4,2,1,3,6,5,7, 12,10

(14)

14

A

RVORES BINÁRIAS

 Impressão em pré-ordem:

8

4 12

2

1 3

6

5 7

10 14

9 11 13 15

8,4,2,1,3,6,5,7, 12,10,9

27

A

RVORES BINÁRIAS

 Impressão em pré-ordem:

8

4 12

2

1 3

6

5 7

10 14

9 11 13 15

8,4,2,1,3,6,5,7, 12,10,9,11

(15)

15

A

RVORES BINÁRIAS

 Impressão em pré-ordem:

8

4 12

2

1 3

6

5 7

10 14

9 11 13 15

8,4,2,1,3,6,5,7, 12,10,9,11,14

29

A

RVORES BINÁRIAS

 Impressão em pré-ordem:

8

4 12

2

1 3

6

5 7

10 14

9 11 13 15

8,4,2,1,3,6,5,7, 12,10,9,11,14,13

(16)

16

E

XERCÍCIO

 Qual a saída do caminhamento em pré ordem da árvore binária a seguir?

31

32

A

RVORES BINÁRIAS

 Impressão em ordem simétrica (E,R,D):

8

4 12

2

1 3

6

5 7

10 14

9 11 13 15

(17)

17

E

XERCÍCIO

 Qual a saída do percurso em ordem da árvore binária a seguir?

33

34

A

RVORES BINÁRIAS

 Impressão em pós-ordem (E,D,R):

8

4 12

2

1 3

6

5 7

10 14

9 11 13 15

(18)

18

E

XERCÍCIO

 Qual a saída do caminhamento em pós ordem da árvore binária a seguir?

35

Á

RVORE

B

INÁRIA

(I

MPLEMENTAÇÃO

)

De que é composta uma árvore binária?

Como implementar uma árvore binária?

(19)

19

Á

RVORE

B

INÁRIA

(I

MPLEMENTAÇÃO

)

De que é composta uma árvore binária?

Como implementar uma árvore binária?

public class BTNode<T> { protected T data;

protected BTNode<T> left; protected BTNode<T> right; protected BTNode<T> parent;

public boolean isEmpty(){ return this.data == null;

}

//getters, setters, equals, toString

}

37

Á

RVORE

B

INÁRIA

(I

MPLEMENTAÇÃO

)

De que é composta uma árvore binária?

Como implementar uma árvore binária?

public interface BT<T> { public BTNode<T> getRoot(); public boolean isEmpty(); public int height();

public BTNode<T> search(T elem); public void insert(T value);

public void remove(T key); public T[] preOrder(); public T[] order(); public T[] postOrder(); public int size();

}

(20)

20

Á

RVORE

B

INÁRIA

(I

MPLEMENTAÇÃO

)

 Como representar uma árvore vazia?

 O construtor default de BTNode já gera uma árvore vazia?

data = null

null null

null

39

Á

RVORE

B

INÁRIA

(I

MPLEMENTAÇÃO

)

 Como representar uma árvore vazia?

 O construtor default de BTNode já gera uma árvore vazia?

data = null

null null

null

=

NIL

O nó sentilena de uma árvore binária não contem dados

(21)

21

Á

RVORE

B

INÁRIA

(I

MPLEMENTAÇÃO

)

 Como representar uma árvore contendo apenas um nó?

data

NIL NIL

null

data

null

null

null null

null

null null

folha folha

41

Á

RVORE

B

INÁRIA DE

B

USCA

 Árvore binária de busca ou árvore binária de pesquisa é uma árvore bináriaonde todos os nós armazenam dados comparáveis

 todos nós da sub-árvore à esquerda contêm valores menores do que o nó raiz

 todos os nós da subárvore à direita contêm valores maiores do que o nó raiz.

 A principal utilização de árvores binárias são as árvores bináriade busca

x

< x > x

(22)

22

E

XEMPLO

2 Subárvores

>

>

>

<

<

O quanto isso reduz o espaço da busca a cada passo?

43

Á

RVORE

B

INÁRIA DE

B

USCA

(I

MPLEMENTAÇÃO

)

Uma BST é uma BT?

Como implementar isso em Java?

(23)

23

Á

RVORE

B

INÁRIA DE

B

USCA

(I

MPLEMENTAÇÃO

)

Uma BST é uma BT?

Como implementar isso em Java?

45

public class BSTNode<T extends Comparable<T>> extends BTNode<T> {

}

Á

RVORE

B

INÁRIA DE

B

USCA

(I

MPLEMENTAÇÃO

)

Uma BST é uma BT?

Como implementar isso em Java?

46

public interface BST<T extends Comparable<T>> extends BT<T> {

public BTNode<T> maximum(); public BTNode<T> minimum();

public BTNode<T> successor(BTNode<T> node); public BTNode<T> predecessor(BTNode<T> node);

(24)

24

P

ESQUISA

B

INÁRIA

Como saber se um dado/valor/chave está

na árvore?

 Se o nó é não-vazio

Verifica se o dado do nó é igual à chave dada

Se nao for

Se a chave dada for menor que o dado do nó, pesquisa na sub-árvore a esquerda

Senao pesquise na sub-árvore a direita

47

P

ESQUISA

B

INÁRIA

(I

MPLEMENTACAO

)

Qual o custo dos algoritmos?

(25)

25

Á

RVORE

D

ESBALANCEADA

 O que ocorre com a pesquisa binária se a árvore estiver desbalanceada?

42

88

94

95

x

< x

> x

49

Á

RVORE

D

ESBALANCEADA

 O que ocorre com a pesquisa binária se a árvore estiver desbalanceada?

42

88

94

95

O(n)

Solução: Outras árvores, como

AVL, que veremos depois.

x

< x

> x

(26)

26

M

INIMUM

Como buscar o elemento mínimo de uma

BST?

 Descer pela esquerda até que um NIL seja encontrado

51

M

AXIMUM

Como buscar o elemento máximo de uma

BST?

 Descer pela direita até que um NIL seja encontrado

(27)

27

S

UCESSOR

Como buscar o sucessor de um elemento

em uma BST?

 Sucessor é a menor das chaves maiores (menor descendente a direita)

53

S

UCESSOR

Como buscar o sucessor de um elemento

em uma BST?

 Sucessor é a menor das chaves maiores (primeiro ascendente maior)

(28)

28

P

REDECESSOR

Como buscar o predecessor de um

elemento em uma BST?

 Predecessor é a maior das chaves menores (maior descendente a esquerda). Simétrico ao sucessor

Tree-Predecessor(x) if left[x] != NIL

then return Tree-Maximum(left[x]) y = p[x]

while y != NIL and x = left[y] do x = y

y = p[y]

return y 55

P

REDECESSOR

Como buscar o predecessor de um

elemento em uma BST?

 Predecessor é a maior das chaves menores (primeiro ascendente maior). Simétrico ao sucessor

Tree-Predecessor(x) if left[x] != NIL

then return Tree-Maximum(left[x]) y = p[x]

while y != NIL and x = left[y] do x = y

y = p[y]

(29)

29

Á

RVORE

B

INÁRIA

(I

NSERÇÃO

)

 Acontece pela raiz (admitir elementos diferentes)

 Processar apenas chaves diferentes da raiz

 Se a chave for menor, insere no filho a esquerda

 Se a chave for maior insere no filho a direita

 Insercao sempre acontece em uma nova folha

57

E

XERCÍCIO

1

 Insira as chaves 46, 47, 44, 45

(30)

30

E

XERCÍCIO

1

 Insira as chaves 46, 47, 44, 45

59

46

E

XERCÍCIO

1

 Insira as chaves 46, 47, 44, 45

60

46

(31)

31

E

XERCÍCIO

1

 Insira as chaves 46, 47, 44, 45

61

46

47 44

E

XERCÍCIO

1

 Insira as chaves 46, 47, 44, 45

62

46

47 44

(32)

32

Á

RVORE

B

INÁRIA

(I

NSERCAO

)

 O procedimento recebe um nó mas poderia receber V

x guarda o nó onde inserir e

y guarda o pai

63

Á

RVORE

B

INÁRIA

(I

NSERCAO

)

 O procedimento recebe um nó mas poderia receber V

Para que serve?

(33)

33

Á

RVORE

B

INÁRIA

(I

NSERCAO

)

 O procedimento recebe um nó mas poderia receber V

Se a arvore é inicialmente vazia ou entao adiciona z como filho correto de y

65

Á

RVORE

B

INÁRIA

(I

NSERCAO

)

 O que o método a seguir faz?

XYZ(BSTNode node, T element){ if(node=NIL){

node.data = element node.left = NIL node.right = NIL }else{

if(element< node.data){ XYZ(node.left, element) }else if (element > node.data){ XYZ(node.right, element) }

} }

(34)

34

A

RVORES

B

INÁRIAS

(R

EMOCAO

)

 Remocoes em arvores binarias:

 Se o nó y (a ser removido) for uma folha entao remova-o.

 Se o nó y tem apenas um filho, então ligamos o pai de y ao filho de y

 Se tem dois filhos então traz o sucessor de y para o lugar dele e remove o sucessor

12

10 14

9 11 13 15

12

10 15

9 11 13 67

Á

RVORE

B

INÁRIA

(R

EMOÇÃO

)

tem ao maximo 1 filho

(35)

35

Á

RVORE

B

INÁRIA

(R

EMOÇÃO

)

Tem 2 filhos

69

Á

RVORE

B

INÁRIA

(R

EMOÇÃO

)

Guarda o filho a direita ou a esquerda

(36)

36

Á

RVORE

B

INÁRIA

(R

EMOÇÃO

)

Conecta o filho ao pai de y

71

Á

RVORE

B

INÁRIA

(R

EMOÇÃO

)

Se y é root entao x é novo root

(37)

37

Á

RVORE

B

INÁRIA

(R

EMOÇÃO

)

Senao seta x sendo o filho correto do pai de y

73

Á

RVORE

B

INÁRIA

(R

EMOÇÃO

)

Se o sucessor de z foi um nó diferente entao copia o conteudo dele para z.

(38)

38

A

RVORES

B

INÁRIAS

(R

EMOCAO

)

 Outras abordagens trabalham da seguinte forma:

 Se for folha remove

 Senao sobe o menor descendente a direita (sucessor)

 Se nao existir menor descendente a direita então sobe o maior descendente a esquerda (predecessor)

 Remove recursivamente o nó movido.

75

A

RVORES

B

INÁRIAS

(R

EMOCAO

)

76

(39)

39

A

RVORES

B

INÁRIAS

(R

EMOCAO

)

77

A

RVORES

B

INÁRIAS

(R

EMOCAO

)

78

(40)

40

A

RVORES

B

INÁRIAS

(R

EMOCAO

)

79

remover 30

40

A

RVORES

B

INÁRIAS

(R

EMOCAO

)

80

remover 50

(41)

41

A

RVORES

B

INÁRIAS

(R

EMOCAO

)

81

remover 90

40

90

A

RVORES

B

INÁRIAS

(R

EMOCAO

)

82

40

90

(42)

42

Á

RVORE

B

INÁRIA

(R

EMOCAO

)

if(node != NIL){ if(node is leaf){

node = NIL

}else if (node has one child){

if node != root if(node is left child){ if(node.left != NIL)

node.left is left child of node.parent else

node.right is left child of node.parent else //node is right child

if(node.left != NIL)

node.left is right child of parent else

node.right is right child of parent else

root = not NIL child of root

}else{

BSTNode sucessor = sucessor(node); node.value = sucessor.value; XYZ(sucessor);

}

} }

O que o metodo faz?

83

Á

RVORE

B

INÁRIA

(P

ERCURSO

)

 Algoritmo do percurso em pre-ordem

84

8

4 12

2

1 3

6

5 7

10 14

9 11 13 15

(43)

43

Á

RVORE

B

INÁRIA

(P

ERCURSO

)

 Algoritmo do percurso em pre-ordem

preOrder(BSTNode node){ if(node != NIL){

visit(node);

preOrder(node.left); preOrder(node.right); }

}

visit(BSTNode){ print(node.key); }

Poderia fazer qualquer outro processamento

85

Á

RVORE

B

INÁRIA

(P

ERCURSO

)

 Algoritmo do percurso em ordem

86

8

4 12

2

1 3

6

5 7

10 14

9 11 13 15

(44)

44

Á

RVORE

B

INÁRIA

(P

ERCURSO

)

 Algoritmo do percurso em ordem

order(BSTNode node){ if(node != NIL){ order(node.left); visit(node); order(node.right); }

}

87

Á

RVORE

B

INÁRIA

(P

ERCURSO

)

 Algoritmo do percurso em pós-ordem

88

8

4 12

2

1 3

6

5 7

10 14

9 11 13 15

(45)

45

Á

RVORE

B

INÁRIA

(P

ERCURSO

)

 Algoritmo do percurso em pós-ordem

postOrder(BSTNode node){ if(node != NIL){

postOrder(node.left); postOrder(node.right); visit(node);

} }

89

Á

RVORE

B

INÁRIA

 Como seria para calcular recursivamente o tamanho (quantidade de elementos) de uma árvore binária

90

1

size size

(46)

46

Á

RVORE

B

INÁRIA

 Como seria para calcular recursivamente o tamanho (quantidade de elementos) de uma árvore binária

int size(){

return size(root) }

int size(BSTNode node){ if(node.isEmpty) return 0 else

return 1 + size(node.left) + size(node.right) }

91

POSCOMP 2009

Nao necessariamente

balanceada!

(47)

47

POSCOMP 2009

93

POSCOMP 2009

(48)

48

POSCOMP 2009

95

R

EFERÊNCIAS

 Capítulo 13

Referências

Documentos relacionados

4.15 - Superfície de resposta e curva de contorno para a concentração residual de sacarose em função da concentração celular no inóculo e da concentração inicial de sacarose ...69

Trabalho de Conclusão de Curso apresentado ao curso de Agronomia, no Centro de Ciências Agrárias, da Universidade Federal de Santa Catarina, como requisito para

Visto que no Brasil esta aplicação em grande escala é praticamente nula, torna-se um atrativo acadêmico o estudo dos impactos da inserção de unidades

Puxe a alça lateral segurando pela fivela que você alcançou trazendo-a para baixo e cruzando suas costas até encontrar a outra parte da fivela que está no painel.. Feche a fivela

[r]

troca/substituição do display tem que ser realizada com atenção pois a placa está pronta para receber apenas esse tipo de display... Display

Gerir uma vila alentejana no século XV: as finanças municipais de Elvas em 1432-1433 FRAGMENTA

Constitui objeto do presente Edital a seleção e contratação de sociedade empresária especializada na execução de serviços de engenharia elétrica, visando a