Árvores.

Slides:



Advertisements
Apresentações semelhantes
Árvores CC/EC/Mestrado Teoria dos Grafos ‏ 1.
Advertisements

Motivação para listas duplamente encadeadas e circulares
Geometria Computacional Galeria de Arte
Análise de Decisão Aplicada a Gerência Empresarial – UVA Grafos - V
AULA 8 Profa. Sandra de Amo GBC053 – BCC
Marco Antonio Montebello Júnior
Exercícios PAA- Grafos
Exercícios PAA- Grafos
Estruturas de Dados Árvores Binárias
Pesquisa em profundidade
Estrutura de Dados e Algoritmos e Programação e Computadores II
Prof. M.Sc. Fábio Francisco da Costa Fontes Abril
Série de Exercícios.
Árvore Binária de Busca
1 Complexidade de Algoritmos Complexidade de pior caso Complexidade de melhor caso de uso bem menos freqüente em algumas situações específicas Complexidade.
1 MergeSort Seja uma lista A de n elementos. O algoritmo consiste das seguintes fases Dividir A em 2 sub-listas de tamanho n/2 Conquistar: ordenar cada.

Arquivos Seqüenciais Inhaúma Neves Ferraz
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
Pesquisa em Árvores Digitais
David Menotti Estruturas de Dados I DECOM – UFOP
Pesquisa em Memória Primária – Árvores de Busca
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
Pesquisa em Memória Primária – Árvores de Busca
Árvores Introdução e Aplicações Árvores de Busca Binária Fundamentos
Classificação e Pesquisa de Dados
Árvores e Árvores Binárias
Estruturas de Dados II Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Lista Encadeada Circular Lista Duplamente Encadeada
Robson Godoi / Sandra Siebra
Listas Encadeadas.
Prof. Ernesto Lindstaedt
Árvore Geradora Mínima
Fundamentos sobre Árvores
Árvore Binária de Busca
Buscas em Grafos Prof. André Renato 1º Semestre/2012
Grafos Msc. Cintia Carvalho Oliveira Doutoranda em Computação – UFU
Grafos Árvores Geradoras.
Pesquisa em Memória Primária
Árvores binárias de pesquisa com balanceamento
Exercícios PAA- Grafos
Estruturas de Dados com Jogos
Principais operações em Listas TPA Listas Simples Inserção no Final 1.void insereNofinalDaLista(Lista *l, Elemento e){ 2.Lista paux,p; 3. p.
Árvores Binárias de Pesquisa
Algorítmos e estrutura de dados III
Algorítmos e estrutura de dados III Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Introdução e Busca Cega
Rotação Simples e Dupla Katia Guimarães
Listas de Prioridades Em muitas aplicações, dados de uma coleção são acessados por ordem de prioridade A prioridade associada a um dado pode ser qualquer.
Conceitos básicos em grafos
Á R V O R E S.
Árvore Binária de Busca
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática
Árvores Prof. Dr. rer. nat. Daniel Duarte Abdala DAS 5102 – Fundamentos da Estrutura da Informação 1.

Árvores Binárias Profa. Patrícia A. Jaques Luiz Gonzaga Jr
Estruturas de Dados Aula 15: Árvores
Prof. Hilton Cardoso Marins Junior ÁRVORES BINÁRIAS.
© 2011 Pearson Prentice Hall. Todos os direitos reservados.slide 1 © 2011 Pearson Prentice Hall. Todos os direitos reservados.slide 1 © 2011 Pearson Prentice.
Prof. Hilton Cardoso Marins Junior

Universidade do Vale do Rio dos Sinos - São Leopoldo -
Introdução a Árvores e Árvores Binárias
Prof. Daniel Morais dos Reis
Árvores (introdução) Anjolina Grisi de Oliveira Obs: vários slides foram cedidos por Adolfo Almeida Duran (UFBA)
Árvores e Árvores Binárias
Árvores Estrutura de dados que se caracteriza por uma relação de
BANCO DE DADOS II Árvore de Dados. FATEC - GUARATINGUETÁ Professor: Eduardo Barbosa Adiel Lemos Ana Renata Bruno Michael Jéssica Fernanda Layla Monique.
Árvores.
Transcrição da apresentação:

Árvores

Árvores utilizada em muitas aplicações modela 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 2

Árvores um conjunto finito de elementos onde um elemento é chamado de raiz os outros são divididos em subconjuntos disjuntos, onde cada um define uma árvore cada elemento é um nó ou vértice da árvore arcos ou arestas conectam os vértices 2

Árvores uma coleção não vazia de vértices e ramos que satisfazem a certos requisitos vé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 7

Terminologia e Propriedades cada vértice (exceto a raiz) tem exatamente um antecessor imediato ou pai cada 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ãos nós com pelo menos um filho  não-terminais ou internos 9

Terminologia e Propriedades caminho em uma árvore: é uma lista de vértices distintos e sucessivos, conectados por arcos (arestas) da árvore nó raiz existe exatamente um caminho entre a raiz e cada um dos nós da árvore se existir mais de um caminho ou nenhum grafo 6

Terminologia e Propriedades grau é o número de subárvores não vazias 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 12

Árvores A única diferença entre as duas árvores é a ordem das sub-árvores Uma á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 13

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 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 16

Terminologia Altura de uma árvore Floresta 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 17

Árvore Binária é um conjunto finito de elementos que é ou vazio ou composto de três conjuntos disjuntos o primeiro contém um único elemento, a raiz os outros dois subconjuntos são árvores binárias as sub-árvores da esquerda e da direita As sub-árvores da esquerda ou da direita podem estar vazias 18

Árvore Binária A B C D E F H I G

Árvores Binárias considerando que os dois filhos de cada nó interno são ordenados: o filho da esquerda e o filho da direita Cada nó interno tem que ter filho da direita ou da esquerda, sendo que um ou ambos podem ser nós externos 21

Árvores Binárias uma árvore binária vazia: consiste de nenhum nó interno e um nó externo uma árvore binária é uma árvore ordenada, na qual cada nó tem 0, 1, ou 2 filhos cada filho corresponde a uma árvore binária árvores estão diretamente ligadas a recursão (veremos a seguir)a forma mais simples de definir árvores é recursivamente como se segue: "uma árvore é um único nó ou um nó raiz conectado a um conjunto de árvores" 23

Árvores Binárias O número de sub-árvores a esquerda e a direita vazias em uma árvore binária com n nós é de n+1 se n = 1 então 2 subárvores vazias se n = 2 então 3 subárvores vazias Se vale para n – 1 então, em uma árvore com n nós uma subárvore vazia foi substituído por um vértice interno e 2 subárvores vazias o número de subárvores vazias é então: n -1+2 = n +1 árvores estão diretamente ligadas a recursão (veremos a seguir)a forma mais simples de definir árvores é recursivamente como se segue: "uma árvore é um único nó ou um nó raiz conectado a um conjunto de árvores" 24

Árvores Binárias Definição de Árvores uma árvore é um único nó ou um nó raiz conectado a um conjunto de árvores Definição de Árvores Binárias uma árvore binária é um nó externo ou um nó raiz (interno) conectado a esquerda e a direita a árvores binárias 25

Árvore Binária Estrita todo nó não folha possui filhos a esquerda e a direita  Árvore Binária Estrita Uma árvore binária estrita com n folhas sempre contém 2n-1 nós 26

Árvore Binária Estrita 27

Árvore Binária Estrita 28

Árvore Binária Estrita árvore binária estrita com: 1 folha  um nó 2 folhas  3 nós hipótese: n folhas  2n-1 nós + 1 folha acrescentar dois filhos de uma folha da árvore melhor dois novos nós são folhas antigo nós folha passa a ser interno Total de nós: 2n-1 +2 = 2n+1 = 2(n+1)-1 29

Árvore Binária Nível: A raiz tem nível 0 A raiz de outro nó é o nível do nó pai +1. A profundidade de uma árvore é o maior nível para todas as folhas Markeson: raiz tem nível 1 Langsan : raiz tem nível 0 30

Árvore Binária árvore binária cheia de nível d: árvore binária estrita com todas as folhas no nível d árvore binária completa de nível d: uma árvore binária estrita com todas as folhas no nível d ou no nível d-1 31

Árvore Binária Completa 32

Árvore Binária Cheia 33

Árvore Binária Para muitas aplicações, é importante a relação entre altura e número de nós 35

Representando Árvores Binárias typedef struct { int info; tipo_no * esq; tipo_no * dir; } tipo_no; A C B 59

Representando Árvores Binárias Typedef struct { char info; tipo_no * esq; tipo_no * dir; tipo_no * pai; } tipo_no A C B 60

Representando Árvores Binárias Na representação nós externos podem ser NULL ponteiro para o próprio nó A C B 61

Representando Árvores Binárias 62

Representando Florestas árvores binárias possuem dois ponteiros em cada nó interno, um para cada filho, e portanto sua representação é imediata o que fazer para árvores gerais ou florestas, com um número arbitrário de filhos por nó, que requerem um número arbitrário de ponteiros Representação depende da Aplicação 63

Representando Florestas se não é necessário caminhar para os níveis de baixo da árvore mas só para os de cima percorre-se a ávores dos nós terminais para os não terminais e por último a raiz B C A 64

Representando Florestas typedef struct { char info; tipo_no * filho; tipo_no * irmão; } tipo_no A B C D E 65

Representando Florestas se é necessário caminhar para os níveis mais altos empregar uma lista encadeada conectando o nó com seus irmãos e outra com seus filhos ao invés de empregar um nó dummy para terminar cada lista pode-se apontar de volta para seu pai permitindo mover para cima ou para baixo esses ponteiros para pai tem que estar marcados para poder ser distingui-los dos ponteiros para irmãos alternativamente pode-se armazenar o nome do pai de forma que a busca pára quando o nó for revisitado para representar uma floresta com processamento de cima para baixo, necessita-se de uma forma de tratar filhos de cada nó sem prealocar um número específico de nós esse é exatamente a restrição das listas encadeadasjá estudadas. Pode-se usar uma lista encadeada para os filhos de um dado nó. uma lista conectando o nó com seus irmãos e outra com seus filhos (ver fig 4.7)‏ ao invés de um nó dummy para terminar cada lista, fazemos ela apontar de volta para seu pai para poder se mover para cima ou para baixo (esses links para pai tem que estar marcados para poder ser distiguidos dos links para irmãos) Reconhecer fim da lista de irmãos alternativamente pode-se armazenar o nome do pai de forma que a busca pára quando o nó for revisitado 66

Representando Florestas Essa representação cada nó possui exatamente dois ponteiros 1 para filho e 1 para um irmão Onde está a diferença entre essa estrutura e uma árvore binária?? não existe 67

Operações em Árvores Binárias 68

Operações em Árvores Binárias 69

Aplicações Com Árvores Binárias É uma estrutura útil quando uma de duas decisões devem ser tomadas no decorrer do processo. Encontrar todas as duplicatas em uma lista de números Uma forma de fazer isso é comparar o número como todos os que o precedem isto não é uma solução eficiente 70

Aplicações Com Árvores Binárias Solução: empregar uma árvore binária Armazenam-se os números na árvore de forma a: o 1º número é armazenado na raiz de uma árvore com apenas um nó interno cada um dos próximos números na lista é comparado com a raiz: caso seja igual é uma duplicata caso seja menor, é armazenado na sub-árvore da direita seguindo-se recursivamente o mesmo procedimento caso seja maior, é armazenado na sub-árvore da esquerda seguindo-se recursivamente o mesmo procedimento 71

Aplicações Com Árvores Binárias 14, 18, 4, 9, 7, 15, 3, 5, 17, 4, 20, 9, 5 3 5 7 9 4 17 15 20 18 14 72

Aplicações com Árvores Binárias outra aplicação comum é atravessar a árvore binária, visitando cada nó como sistematicamente visitaremos cada nó? operação é trivial para listas lineares para árvores, existem diferentes formas de proceder os métodos diferem conforme a ordem em que se visitam os nós, o problema sendo resolvido 73

Atravessando Árvores Binárias Métodos pré-ordem:visite a raiz, então visite a subárvore da esquerda, depois a subárvore da direita em-ordem ou ordem simétrica: visite a subárvore da esquerda, então visite a raiz, depois a subárvore da direita pós-ordem: visite a subárvore da esquerda, então visite a subárvore da direita, depois a raiz 74

Atravessando Árvores Binárias pré-ordem: - * a b * + f g e em-ordem: a*b - f+g * e pós-ordem: a b * f g + e * - 75

Atravessando Árvores Binárias implementação simples dos métodos - recursiva como se visita uma subárvore de cada vez, seguindo-se a regra recursiva , cada subárvore é visitada começando pela raiz 76

Pré-ordem pre_ordem (pt)‏ { if (pt == NULL) return (); visite(pt); pre_ordem (pt->esq); pre_ordem (pt-> dir); }

em-ordem em_ordem (pt)‏ { if (pt == NULL) return (); em_ordem (pt->esq); visite(pt); em_ordem (pt-> dir); } outra forma de visitar é inorder traversal (serve para escrever as exp. de forma infixa) => de forma similar a preorder a inorder é definida recursivamente: "visite a subárvore da esquerda, visite a raiz e depos a subárvore da direita" também é chamada de ordem simétrica a implementação baseada em pilha é quase idêntica ao acima (guardo link para a raiz , isso se a implementação de árvore não fornecer)‏ 77

Pós-ordem pos_ordem (pt)‏ { if (pt == NULL) return (); pos_ordem (pt->esq); pos_ordem (pt-> dir); visite(pt); } 78

Exercícios implementar os procedimentos pré-ordem, em-ordem e pós-ordem de forma não recursiva calcular a altura de cada nó de uma árvore binária (exercício do livro texto)‏ 82

em-ordem p = raiz; do { /* segue pelo ramo da esq. até NULL */ H I D E B C A p = raiz; do { /* segue pelo ramo da esq. até NULL */ while (p != NULL) { push(p); p=p->esq; } /* verifica se já processou toda árvore */ if (pilha_não_vazia()){ p = pop(); visite(p); p = p->dir; } while(pilha_não_vazia() || p != NULL); 83