Árvores - instituto de física da ufrgsthielo/arvores1.pdf · Árvores um conjunto finito de...

57
ÁRVORES

Upload: lethuan

Post on 14-Nov-2018

215 views

Category:

Documents


0 download

TRANSCRIPT

ÁRVORES

SUMÁRIOFundamentosÁrvores BináriasÁrvores Binárias de Busca

2

ÁRVORESUtilizadas em muitas aplicações Modelam uma hierarquia entre elementosárvore genealógica

Diagrama hierárquico de uma organização

Modelagem de algoritmos

* O conceito de árvores está diretamente ligado à recursão *

3

ÁRVORESum conjunto finito de elementos ondeum elemento é chamado de raiz

os outros são divididos em subconjuntos disjuntos, onde cada um define uma árvorecada elemento é um nó ou vértice da árvore

arcos ou arestas conectam os vértices

4

ÁRVORESuma coleção não vazia de vértices e ramos que satisfazem a certos requisitosvértice (ou nó):é um objeto simples que pode ter um nome e mais alguma outra informação associada

arco ou aresta (direcionado ou não):é uma conexão entre dois nós

5

REPRESENTAÇÃO

6

Á r v o r e

E F

B

G H I

C

L M

O

S

P Q R

N

K

J

C

A

EXEMPLO

7

TERMINOLOGIA E PROPRIEDADESCada vértice (exceto a raiz) tem exatamente um antecessor imediato ou paiCada vértice tem nós sucessores imediatos ou filhos, a não ser:nós sem filhos : terminais ou folhas

Filhos de um mesmo pai - irmãosNós com pelo menos um filho : não-terminais ou internos

8

TERMINOLOGIA E PROPRIEDADEScaminho em uma árvore:é uma lista de vértices distintos e sucessivos, conectados por arcos (arestas) da árvore

nó raizexiste exatamente um caminho entre a raiz e cada um dos nós da árvorese existir mais de um caminho ou nenhum grafo

9

TERMINOLOGIA E PROPRIEDADESgrau é o número de subárvores de um nó

no exemplo: grau de A é 3; de N é 4; de J é 1

qualquer nó é a raiz de uma sub-árvore consistindo dele e dos nós abaixo

10

ÁRVORES

11

Á r v o r e ( 1 )

E F

B C

G

D

A

Á r v o r e ( 2 )

C

G

D

E F

B

A

ÁRVORESA única diferença entre as duas árvores é a ordem das sub-árvoresUma árvore ordenada é definida como uma árvore onde as sub-árvore formam um conjunto ordenado

Em uma árvore ordenada define-se o primeiro, segundo e último irmão, de acordo com alguma propriedade

12

TERMINOLOGIA os vértices da árvore estão classificados em níveisé o número de nós no caminho entre o vértice e a raiz

13

E F

B

G H I

C

L M

O

S

P Q R

N

K

J

D

A

 nível da raiz é zero

 nível de  C é 1

 nível  de K é 3

 nível de um nó =     nível de seu pai + 1

 nível de P é 5

TERMINOLOGIAAltura de uma árvore corresponde ao maior nível

maior distância entre a raiz e qualquer nó

Floresta um conjunto de árvores

se removemos a raiz e os arcos que a ligam às sub-árvores, ficamos com uma floresta

14

ÁRVORES BINÁRIAS15

DEFINIÇÃOÁrvore Binária T é um conjunto finito de elementos denominados nós ou vértices, tal que:

T = 0 e a árvore é dita vazia ou

Existe um nó r, chamado raiz de T, e os nós restantes podem ser divididos em dois subconjuntos disjuntos, Tre e Trd, que são as sub-árvores esquerda e direita de r, respectivamente e as quais, por sua vez, também são árvores binárias. 16

VANTAGENSPossuem um número constante de sub-árvores em cada nóLimitação do número de ponteiros usados

Algoritmos eficientes para o tratamentoA forma de armazenar os nós surge naturalmente de sua definição:Ponteiro para o nó raiz (como nas listas lineares)

Ponteiros para os filhos: esq e dir

Necessita de 2n+1 ponteiros para representar n nós.

17

VISUALIZAÇÃO DA ÁRVORE BINÁRIA USANDO PONTEIROS

raiz

esq dir

A

B C

E FD

G H I

18

OPERAÇÕES BÁSICAS DA ÁRVORE BINÁRIA (INTERFACE DO TIPO ÁRVORE)Criar uma árvore vaziaCriar uma árvore não vaziaVerificar se a árvore está vaziaVerificar se um elemento pertence a árvoreLiberar uma árvoreImprimir os nós da árvore

19

IMPLEMENTAÇÃO DE ÁRVORES BINÁRIASO acesso a uma árvore se dará através de um ponteiro para o nó raizA estrutura de um nó deve ser composta por: um campo que guarda a informação e dois ponteiros: um para a sub-árvore da esquerda e um para a sub-árvore da direitaFunções são implementadas utilizando definição recursiva da estrutura 20

IMPLEMENTAÇÃO DE ÁRVORES BINÁRIAS

21

Arv* arv_criavazia() { return NULL;}

Arv* arv_cria(char c, Arv* sae, Arv* sad) { Arv* a = (Arv*) malloc (sizeof(Arv)); // ou, em C++: // Arv* a = new Arv; a-> info = c; a-> esq=sae; a-> dir = sad; return a;}

IMPLEMENTAÇÃO DE ÁRVORES BINÁRIASFunção que verifica se elemento pertence a árvore

22

IMPLEMENTAÇÃO DE ÁRVORES BINÁRIASFunção que libera a estrutura da árvore

Função que verifica se uma árvore está vazia

23

IMPLEMENTAÇÃO DE ÁRVORES BINÁRIASFunção que imprime elementos da árvore

24

EXEMPLO DE CRIAÇÃO DE UMA ÁRVORE

25

EXEMPLO DE USO DA IMPRESSÃO

26

INSERINDO UMA SUB-ÁRVORE NUMA ÁRVOREDada a árvore

Inserir a sub-árvore

A esquerda do nó b

27

LIBERANDO UMA SUB-ÁRVORE NUMA ÁRVOREDada a árvore

Liberar a sub-árvore e

28

CRIAÇÃO E LIBERAÇÃONote que a definição de árvore, por ser recursiva, não faz distinção entre árvores e sub-árvores. Assim, a função “cria” pode ser utilizada para acrescentar (enxertar) uma sub-árvore em um ramo de uma árvore, e libera pode ser usada para remover (“podar”) uma sub-árvore qualquer de uma árvore dada.

29

PERCURSOS EM ÁRVORES BINÁRIASA busca nada mais é do que um percurso em uma árvoreO percurso em uma árvore visitando cada nó uma única vez gera uma seqüência linear de nósAssim, passa a ter sentido falar em sucessor e predecessor de um nó segundo um determinado percursoHá três maneiras recursivas de se percorrer árvores binárias:Percurso em pré-ordem

Percurso em pós-ordem

Percurso em ordem 30

PERCURSO EM PRÉ-ORDEMAlgoritmo básico:Se árvore vazia : fim

visitar o nó raiz (imprimí-lo)

percorrer em pré-ordem a sub-árvore esquerda

percorrer em pré-ordem a sub-árvore direita

ABDCEGFHI

31

PERCURSO EM EM ORDEM Algoritmo básico:Se árvore vazia : fim

percorrer em ordem a sub-árvore esquerda

visitar o nó raiz (imprimí-lo)

percorrer em ordem a sub-árvore direita

DBAEGCHFI

32

PERCURSO EM PÓS-ORDEM Algoritmo básico:Se árvore vazia : fim

percorrer em ordem a sub-árvore esquerda

percorrer em ordem a sub-árvore direita visitar o nó raiz (imprimí-lo)

DBGEHIFCA

33

IMPLEMENTAÇÕES DAS OPERAÇÕES

Diversas operações se utilizam desses algoritmos de percurso em árvore durante sua execução:Inserção, Remoção, nível, etc...

Exemplo: Operação Esvaziar: esvaziar toda a árvore

Operação Nível: Implementar uma função para retornar o nível de um elemento na árvore

Observações:Supõe-se que todas as chaves sejam diferentes

34

ALTURA DE UMA ÁRVOREPropriedade Fundamental de ÁrvoresSó existe um caminho da raiz para qualquer nó

Definição de Altura de ÁrvoreÉ o comprimento do caminho mais longo da raiz até uma das folhas.A altura de uma árvore com um único nó é 0;

A altura da árvore vazia é –1;

A raiz está no nível 0 e seus filhos diretos no nível 1, e assim por diante;

O último nível é o h (que é a altura da árvore)

35

ÁRVORE CHEIAÁrvore é dita cheia se todos os seus nós internos têm 2 sub-árvores associadas e todos os nós folhas estão no último nível.O número total de nós de uma árvore cheia é dado por 2h+1- 1Uma árvore binária cheia com n nós tem uma altura proporcional a log n

36

ÁRVORE CHEIA

37

ÁRVORE DEGENERADAÁrvore é dita degenerada se todos os seus nós internos têm uma única sub-árvore associada.A estrutura hierárquica se degenera em uma estrutura linearUma árvore degenerada de altura h tem h + 1 nósAltura de uma árvore degenerada com n nós é proporcional a n

38

ÁRVORE DEGENERADA

39

POR QUÊ CALCULAR A ALTURA?A altura de uma árvore é uma medida de avaliação da eficiência com que visitamos os nós de uma árvoreUma árvore binária com n nós tem uma altura mínima proporcional a log n (caso a árvore seja cheia) e uma altura máxima proporcional a n (caso a árvore seja degenerada)A altura indica o esforço computacional necessário para alcançar qualquer nó da árvore;Em árvores binárias de busca, é importante manter a altura pequena, ou seja, manter a árvore com distribuição dos nós próxima à da árvore cheia. 40

POR QUÊ CALCULAR A ALTURA?Exemplo de árvore binária de buscaValor da raiz sempre maior que o da sub-árvore da esquerda e menor que o da sub-árvore da direita

Busca de elemento é otimizada

41

FUNÇÃO PARA CÁLCULO DA ALTURAFunção auxiliar para calcular o máximo entre dois inteiros

Função recursiva para calcular a altura

42

ÁRVORE BINÁRIA DE BUSCA

ÁRVORES DE BUSCA BINÁRIAAs árvores de busca binária têm uma propriedade fundamental:o valor associado à raiz é sempre maior que o valor associado a qualquer nó da sub-árvore à esquerda (sae), e é sempre menor que o valor associado a qualquer nó da sub-árvore à direita (sad).

Essa propriedade garante que, quando a árvore é percorrida em ordem infixada (sae - raiz - sad), os valores são encontrados em ordem crescente.

44

ÁRVORE DE BUSCA BINÁRIA

45

INTRODUÇÃOPara procurar um valor numa árvore, comparamos o valor que buscamos com o valor associado à raiz.Em caso de igualdadeo valor foi encontrado;

Se o valor procurado for menor que o valor da raiza busca continua na sae;

Se o valor procurado for maior que o valor da raiza busca continua na sad.

46

TIPO DA ÁRVORE BINÁRIA

47

OPERAÇÃO DE BUSCA

48

OPERAÇÃO DE INSERÇÃO

49

OPERAÇÃO DE REMOÇÃOEssa operação é um pouco mais complexa que a de inserção. Existem três situações possíveis.A primeira é quando se deseja retirar um elemento que é folha da árvore.A segunda situação acontece quando o nó a ser retirado possui um único filho.A terceira situação ocorre quando o nó a ser retirado tem dois filhos.

50

OPERAÇÃO DE REMOÇÃO- 1ª E 2ª SITUAÇÕES

51

OPERAÇÃO DE REMOÇÃO- 1ª E 2ª SITUAÇÕES A primeira, e mais simples, é quando se deseja retirar um elemento que é folha da árvore. Neste caso, basta retirar o elemento da árvore e atualizar o pai, pois seu filho não existe mais.

A segunda situação, ainda simples, acontece quando o nó a ser retirado possui um único filho. Para retirar esse elemento é necessário antes acertar o ponteiro do pai, “pulando” o nó: o único neto passa a ser filho direto. 52

OPERAÇÃO DE REMOÇÃO - 3ª SITUAÇÃO

Localiza o nó a ser eliminado (nó 6)Encontra o nó mais a direita da sub-árvore da esquerda (nó 4)Trocar os valores entre o nó a ser eliminado e o nó encontrado.Localiza novamente o nó a ser eliminado (nó 6)

53

OPERAÇÃO DE REMOÇÃO - 3ª SITUAÇÃO Para poder retirar esse nó da árvore, devemos proceder da seguinte forma:encontramos o elemento que precede o elemento a ser retirado na ordenação. Isto equivale a encontrar o elemento mais à direita da sub-árvore à esquerda;

trocamos a informação do nó a ser retirado com a informação do nó encontrado;

retiramos novamente o nó encontrado (que agora contém a informação do nó que se deseja retirar).

Observa-se que retirar tal nó agora é trivial, pois esse é um nó folha ou um nó com um único filho. 54

OPERAÇÃO DE REMOÇÃO – 3ª SITUAÇÃO

55

OPERAÇÃO DE REMOÇÃO – 3ª SITUAÇÃO

56

OPERAÇÃO DE REMOÇÃO – 3ª SITUAÇÃO

57