Estrutura de Dados Árvores. Prof. Robinson Alves



Documentos relacionados
O que é uma árvore. Computadores Zen. Brasil. Internacional. Europa Asia Canada

ESTRUTURAS DE DADOS II MSc. Daniele Carvalho Oliveira

Árvores. Algoritmos e Estruturas de Dados 2005/2006

Estruturas de Dados. Prof. Gustavo Willam Pereira Créditos: Profa. Juliana Pinheiro Campos

Métodos Computacionais. Árvores

INF 1007 Programação II

INF1007: Programação 2 10 Árvores Binárias. (c) Dept. Informática - PUC-Rio 1

Estruturas de Dados Árvores

Linguagem C: Árvores Binarias

EAD Árvore árvore binária

Árvores Binárias. Observação: Material elaborado a partir do material do Professor Marcos Costa.

FACULDADE CAMPO LIMPO PAULISTA MESTRADO EM CIÊNCIA DA COMPUTAÇÃO. Projeto e Análise de Algoritmos II Lista de Exercícios 2

Busca. Pesquisa sequencial

Estruturas de Dados I

ALGORITMOS E ESTRUTURAS DE DADOS CES-11 CES-11 CES-11

Árvore Binária de Busca

Algoritmos e Estrutura de Dados III. Árvores

Algoritmos e Estrutura de Dados. Aula 13 Estrutura de Dados: Árvores de Pesquisa Binária Prof. Tiago A. E. Ferreira

Figura 13.1: Um exemplo de árvore de diretório.

Árvores Binárias de Busca

Árvores Binárias de Busca

PROGRAMAÇÃO II 4. ÁRVORE

Árvores Binárias e Busca. Jeane Melo

EAD Árvore - representação usando listas ligadas

Pesquisa em Memória Primária. Algoritmos e Estruturas de Dados II

Árvores e Árvores Binárias

Estruturas de Dados. Árvores Parte II: O TAD Árvore. EDs & Algoritmos. Operações Genéricas: Operações de Consulta: Operações de Acesso:

BC1424 Algoritmos e Estruturas de Dados I. Aula 16: Árvores (introdução) Prof. Jesús P. Mena-Chalco. jesus.mena@ufabc.edu.br

Estruturas de Dados Aula 15: Árvores 17/05/2011

UFSC-CTC-INE INE Estruturas de Dados. Árvores. Prof. Ronaldo S. Mello 2002/2. Árvore

Pesquisa em Memória Primária. Prof. Jonas Potros

INF PROGRAMAÇÃO II LISTA DE EXERCÍCIOS 15

1. Introdução Definição Conceitos relacionados... 2

Sumário. 5COP096 Teoria da Computação Aula 8 Pesquisa em Memória Primária

Pesquisa em Memória Primária. Prof. Jonas Potros

Algoritmos e Estruturas de Dados 2

Aula T20 BCC202 Pesquisa (Parte 2) Árvores de Pesquisa. Túlio Toffolo

ESTRUTURA DE DADOS DCC013

Algoritmos e Estruturas de Dados: Árvore Binária

Mo:vação. Árvore AVL. Caracterís:cas. Origem. Exemplo. Exercício 1 Qual é a altura dos nodos 50 e 44?

Pesquisa Sequencial e Binária

Estruturas de Dados Pilhas, Filas e Deques

AED 2002/2003 p.1/21. Estrutura de dados elementar Métodos de travessia de árvores Procura em árvores binárias. Exemplos de clientes

2ª Lista de Exercícios

26/08/2013. Árvore. Árvore. Árvore. Floresta :: Exemplo. Floresta ÁRVORES

ESTRUTURAS DE DADOS I. Notas de Aula. Prof. Dr. Gilberto Nakamiti

Árvores AVL. Prof. Othon M. N. Batista Estrutura de Dados

Árvores Balanceadas. Árvore binária completamente balanceada. Ocorre quando a árvore está cheia ou quase cheia com o nível n-1 completo

ESTRUTURA DE DADOS PILHA

ESTRUTURAS DE DADOS AVANÇADAS (INF 1010) (a) Seja um TAD definido por uma lista circular implementada em um vetor.

- UNIVERSIDADE DO VALE DO RIO DOS SINOS CIÊNCIAS EXATAS E TECNOLÓGICAS Curso: Informática / Ciência da Computação

INF 1010 Estruturas de Dados Avançadas

Coleções Avançadas. Programação Orientada a Objetos Java. Prof. Anselmo Cardoso Paiva Prof. Geraldo Braz Junior

Coleções. Page 1. Coleções. Prof. Anderson Augustinho Uniandrade

Análise de complexidade

Árvores de Suporte de Custo Mínimo

- UNIVERSIDADE DO VALE DO RIO DOS SINOS CIÊNCIAS EXATAS E TECNOLÓGICAS Curso: Informática / Ciência da Computação

Árvore B UNITINS ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 3º PERÍODO 43

Árvore Binária de Busca. Algoritmos e Estrutura de Dados II. Operações Busca e Sucessor. Árvore Binária de Busca. Árvores Rubro-Negras

Árvores Binárias Balanceadas

Tabela de símbolos: tabelas de espalhamento

CT-234. Análise de Algoritmos e Complexidade Estrutural. Carlos Alberto Alonso Sanches

Tabela de Símbolos. Análise Semântica A Tabela de Símbolos. Principais Operações. Estrutura da Tabela de Símbolos. Declarações 11/6/2008

Pedro Vasconcelos DCC/FCUP. Programação Funcional 15 a Aula Árvores de pesquisa

Árvores Binárias - continuação

struct arv { char info; struct arv* esq; struct arv* dir; };

Índice. Capítulo 2 Estrutura de Dados sequencial com armazenamento sequencial

ESTRUTURAS DE DADOS II

BSI UFRPE Prof. Gustavo Callou

Pilhas Filas e Listas

Geração de código intermediário. Novembro 2006

TIPOS ABSTRATOS DE DADOS DEFINIÇÃO E EXEMPLOS. Bruno Maffeo Departamento de Informática PUC-Rio

FUNDAÇÃO EDUCACIONAL DE ITUIUTABA

Métodos Os métodos de uma classe podem ser classificados como construtores, destrutores, funções ou procedimentos.

Estruturas de Armazenamento e Indexação. Rafael Lage Moreira Barbosa

Portas Lógicas Básicas Prof. Rômulo Calado Pantaleão Camara. Carga Horária: 2h/60h

Estruturas de Dados. Parte dos slides a seguir são adaptações, extensões e traduções para C dos originais:

Métodos de Pesquisa 472

Algoritmos e Programação Conceitos e Estruturas básicas (Variáveis, constantes, tipos de dados)

;(define conta-folhas ; (lambda ( ) ; (cond ; ( ( ) ) ; ( (and ) ) ; ( else ; ) ) ))

Complexidade de Algoritmos

Pointer Jumping. odg(v) e idg(v): graus de saída e entrada do vértice v V. um vértice r tal que. O vértice r é dita raíz de T

Árvores Binárias de Pesquisa. Programação II Prof. Mateus Raeder. Árvores Binárias de Pesquisa. Árvores Binárias de Pesquisa. Classe Nodo Binário

Introdução ao SQL. Aécio Costa

Curso: Ciência da Computação Disciplina: Construção de Compiladores Período: Prof. Dr. Raimundo Moura

Projeto e Análise de Algoritmos. Profa. Juliana Kaizer Vizzotto. Projeto e Análise de Algoritmos - Aula 1

Lista de Exercícios. Vetores

Árvores. Fabio Gagliardi Cozman. PMR2300 Escola Politécnica da Universidade de São Paulo

Processamento e Otimização de Consultas

DAS5102 Fundamentos da Estrutura da Informação

Laboratório de Programação. Aula 13 Java 5COP088. Aula 13 Genéricos e Conjuntos Java Prof. Dr. Sylvio Barbon Junior. Sylvio Barbon Jr barbon@uel.

Árvores. Thiago Martins, Fabio Gagliardi Cozman. PMR2300 / PMR3201 Escola Politécnica da Universidade de São Paulo

Orientação a Objetos

Pesquisa Sequencial e Binária. Introdução à Programação SI2

BCC204 - Teoria dos Grafos

FACULDADE DE IMPERATRIZ - FACIMP BACHARELADO EM SISTEMAS DE INFORMAÇÃO ESTRUTURA DE DADOS 2. Vieira Lima Junior. Everson Santos Araujo

Fila de Prioridade. Siang Wun Song - Universidade de São Paulo - IME/USP. MAC Estruturas de Dados

Linguagem algorítmica: Portugol

Árvores Trie e Patricia. Márcio Bueno ed2tarde@marciobueno.com / ed2noite@marciobueno.com

Transcrição:

Estrutura de Dados Árvores Prof. Robinson Alves

O que é uma árvore Em Computação, é um modelo abstrato de uma estrutura hierárquica Uma árvore consiste de nós com uma relação pai-filho Brasil Vendas Internacional Computadores Zen Laptops Construção Desktops P&D Europa Asia Canada

Motivação Uma das estrutura de dados não-lineares mais importantes da computação. Diversas aplicações necessitam de estruturas mais complexas que as listas estudadas até agora, como listas e filas. Diversos problemas podem ser modelados através de árvores. Permitem uma gama de algoritmos muito mais rápidos do que no uso de estruturas de dados lineares, tais como listas.

Aplicações Relação de hierarquia entre classes Java e.net Sistemas de arquivos Representação de documentos (livro, capítulo,...) Respostas a questões sim/não: árvore de decisão Expressões aritméticas Relacionamento entre tabelas em um banco de dados (grupos, subgrupos, produtos)

Terminologia de árvore Raiz (root): Nó sem pai (A) Nó interno: Nó com, pelo menos, um filho (A, B, C, F) Nó externo: Nó sem filhos (E, I, J, K, G, H, D) Ancestral de um nó: pai, avô, bisavô, etc. Profundidade de um nó: Número de ancestrais Altura de um árvore: Profundidade máxima (3) Descendente de um nó: filho, neto, bisneto, etc. E Sub-árvore: árvore formada por um nó e seus descendentes B F I J K A G C H sub-árvore D

TAD árvore Métodos genéricos: integer size() integer height() boolean isempty() Iterator elements() Iterator nos() Métodos de acesso: No root() No parent(no) Iterator children(no) Métodos de consulta: boolean isinternal(no) boolean isexternal(no) boolean isroot(no) integer depth(no) Métodos de atualização: Object replace(no, o) Métodos adicionais podem ser definidos pela estrutura que extende/implementa o TAD árvore

Operações de Acesso Métodos genéricos: integer size() retorna o número de nós da árvore integer height() Retorna a altura boolean isempty() indica se a árvore é vazia Iterator elements() retorna um iterador para os elementos da árvore Iterator nos() retorna um iterador para os nós da árvore

Operações de Acesso Métodos de acesso: No root() retorna o nó raiz No parent(no) retorna o nó pai de um nó Iterator children(no) retorna um iterador para os filhos de um nó

Operações de Acesso Métodos de consulta: boolean isinternal(no) Verifica se o Nó é interno boolean isexternal(no) Verifica se o Nó é externo ou folha boolean isroot(no) Verifica se o Nó é Raiz integer depth(no) Retorna a profundidade de um No Métodos de atualização: Object replace(no, o) Altera o objeto armazenado em um Nó Métodos adicionais podem ser definidos pela estrutura que extende/implementa o TAD árvore

Profundidade A profundidade de um nó v pode ser definida recursivamente como: Se v for raiz, então a profundidade é 0 Senão, a profundidade é 1 mais a profundidade do pai de v Algoritmo depth(v) se (isroot(v)) retorne 0 senão retorne 1+depth(parent(v))

Altura A altura de um nó v pode ser definida recursivamente como: Se v for externo, então a altura é 0 Senão, a altura é 1 mais a maior altura de um filho de v Algoritmo altura(v) O(n) se (isexternal(v)) retorne 0 senão h=0 para cada w em children(v) h=max(h,altura(w)) retorne 1+h Algoritmo altura(v) O(n 2 ) h=0 para cada w em nos() se (isexternal(w)) h=max(h,depth(w)) retorne h

Travessia pré ordem Uma travessia visita os nós de uma árvore de uma forma sistemática Em uma travessia pré-ordem, um nó é visitado antes de seus descendentes Aplicação: imprimir um documento estruturado 3 2 Ganhar dinheiro rápido 1. Motivações 2. Métodos Referências 4 1.1 Semente 1.2 Atividade 1 2.1 Fraudar estoque Algoritmo preorder(v) visite(v) para cada filho w de v preorder (w) 5 6 7 8 2.2 Esquema Ponzi 2.3 Roubar banco 9

Travessia pós ordem Em uma travessia pós-ordem, um nó é visitado depois de seus descendentes Aplicação: Computar o espaço usado por diretórios, subdiretórios e arquivos Algoritmo postorder(v) para cada filho w of v postorder (w) visite(v) 9 g.71.014/ 3 exercicios/ 7 programas/ 8 afazer.txt 1K 1 2 4 5 6 Exercicio1.pdf 3K Exercicio2.pdf 2K Alcance.java 10K Estoques.java 25K Bolha1.java 20K

Árvore binária Uma árvore binária é uma árvore com as seguintes propriedades: Cada nó interno tem, no máximo, dois filhos Arvore binária própria é aquela em que cada nó tem exatemente zero ou dois filhos Os filhos de um nó é um par ordenado Chamamos os filhos de um nó de filho da esquerda e filho da direita Podemos, também, definir uma árvore binária recursivamente como: uma árvore consistindo de um único nó, ou Uma árvore cuja raiz tem um par ordenado de filho, cada um dos quais é uma árvore binária D Aplicações: Expressões aritméticas Processo de decisão busca B H E I A F C G

Árvore de expressões aritméticas Árvore binária associada com uma expressão aritmética Nós internos: operadores Nós externos: operandos Exemplo: árvore da expressão aritméticapara a expressão (2 (a - 1) + (3 b)) + 2 - a 1 3 b

Árvore de decisão Árvore binária associada com um processo de decisão Nós internos: questões com respostas sim/não Nós externos: decisões Exemplo: Onde jantar Refeição rápida? Sim Que tal um café? Não Pode ser caro? Sim Não Sim Não Cantina Shopping Abade Tábua de carne

Propriedades de AB (BT) Notação n número de nós e número de nós externos i número de nós internos h altura (height) Propriedades: e = i + 1 n = 2e - 1 h i h (n - 1)/2 e 2 h h log 2 e h log 2 (n + 1) - 1

Propriedades de AB (BT) Nível 0 1 2 3 Nós 1 2 4 8 Número máximo de nós em um nível h é 2 h Número total de nós é, no máximo é 2 h+1-1

TAD Árvore Binaria O TAD ArvoreBinaria possui os métodos de árvore. Métodos adicionais: Nó leftchild(v) Retorna o filho esquerdo de V Nó rightchild(v) Retorna o filho esquerdo de V Nó hasleft(v) Retorna se V tem filho esquerdo Nó hasright(v) Retorna se V tem filho direito Métodos de atualização podem ser definidos por estruturas de dados que implementam o TAD ArvoreBinaria

Travessia em ordem Na travessia inorder, um nó é visitado depois do filho da esquerda e antes do filho da direita Aplicação: Desenhar uma árvore binária x(v) = colocação de v y(v) = profundidade de v 2 6 Algoritmo inorder(v) se (isinternal (v)) inorder (leftchild (v)) visite(v) se ( isinternal (v)) inorder (rightchild (v)) 8 1 4 7 9 3 5

Impressão de expressões aritm. Especialização de uma travessia inorder Imprime operando/operador quando visita o nó imprime ( antes de visitar o filho da esquerda imprime ) depois de visitar o filho da direita + Algoritmo printexpression(v) se (isinternal (v)) print( ( ) inorder (leftchild (v)) print(v.element ()) se (isinternal (v) ) inorder (rightchild (v)) print ( ) ) 2 - a 1 3 b ((2 (a - 1)) + (3 b))

Avaliação de expressões aritm. Especialização da travessia pós-ordem Método recursivo retorna o valor de uma subárvore Ao visitar um nó interno, combina os valores das subárvores + Algoritmo evalexpr(v) se (isexternal (v) ) return v.element () senão x evalexpr(leftchild (v)) y evalexpr(rightchild (v)) operador em v return x y 2-5 1 3 2

Estrutura de dados para árvores Um nó é um objeto que armazena Elemento Nó pai Nós Filhos (Sequência, Vector, Array, etc) Objetos nós B B A D F A D F C E C E

Estrutura de dados para AB Um nó é um objeto que armazena Elemento Nó pai Filho da esquerda Filho da direita Objetos nós B B A D A D C E C E

Estrutura de dados para AB Podemos usar um array 1 a 3 2 b c 4 5 6 7 d e f g 8 9 10 11 12 13 14 15 h i j k l m n o a b c d e f g h i j k l m n o 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

Árvore de pesquisa binária Uma árvore de pesquisa binária é uma árvore binária armazenando chaves (ou itens) em seus nós internos e satisfazendo a seguinte propriedade: Seja u, v e w três nós tais que u é nó esquerdo de v e w é o nó direito. Temos key(u) key(v) key(w) Nós externos não armazenam itens (null) Uma travessia em ordem visita as chaves em ordem crescente 2 1 4 8 6 9

Busca Para procurar uma chave k, procuramos a partir da raiz comparando com a chave do nó. O próximo nó depende da comparação da chave pesquisada com a chave do nó atual Se chegar em uma folha e não encontrar a chave, retorna-se null Exemplo: find(4): chama algoritmo TreeSearch(4,root) Algoritmo TreeSearch(k, v) se T.isExternal (v) retorne v se k < key(v) retorne TreeSearch(k, T.left(v)) senão se k = key(v) retorne v senão { k > key(v) } retorne TreeSearch(k, T.right(v)) 2 < > 1 4 = 8 6 9

inserção Para executar inser(k, o), procura-se pela chave k Assumindo que k ainda não está na árvore, w será a folha encontrada pela busca Inserimos k no nó w Exemplo: inserir 5 6 < 2 > 1 4 8 w 6 2 1 4 8 w 5 > 9 9

remoção Para executar remove(4), procuramos pela chave 4 6 < 2 > 1 4 v 8 w 5 9 2 1 5 8 6 9

remoção Para executar remove(2), procuramos pela chave 2 Fazemos um caminhamento em ordem na subárvore direita do nó 2 e até encontrar o primeiro nó 2 1 4 8 w v 3 3 < 1 4 8 5 5 6 6 9 9

Desempenho Considere um dicionário com n itens, implementado com uma árvore binária de pesquisa de altura h o espaço usado é O(n) métodos find, insert e remove executam em tempo O(h) A altura h é O(n) no pior caso e O(log n) no melhor caso

Dúvidas