Operações em Árvores Binárias

Loading...

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

0 comments

Post a comment

    Post a comment
    Embed Video
    Edit your comment Cancel

    Favorites, Groups & Events

    Operações em Árvores Binárias - Presentation Transcript

    1. Operações em Árvores Binárias
    2. Operações em Árvores Binárias
    3. 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
        • Um forma de fazer isso é comparar o número como todos os que o precedem
          • isto não é uma solução eficiente
    4. 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
    5. 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
    6. 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
    7. 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
    8. 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 * -
    9. 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
    10. Pré-ordem
      • pre_ordem (pt)
      • {
      • if (pt == NULL) return ();
        • visite(raiz);
        • pre_ordem (pt->esq);
        • pre_ordem (pt-> dir);
      • }
    11. em-ordem
      • em_ordem (pt)
      • {
      • if (pt == NULL) return ();
        • em_ordem (pt->esq);
        • visite(raiz);
        • em_ordem (pt-> dir);
      • }
    12. Pós-ordem
      • pos_ordem (pt)
      • {
      • if (pt == NULL) return ();
        • pos_ordem (pt->esq);
        • pos_ordem (pt-> dir);
        • visite(raiz);
      • }
    13. Árvore Binária Completa
      • r epresentação em lista sequencial
        • cada nó pode receber um número de 1 a N
        • um nó de número i está na posição i da lista
        • seus filhos da esquerda e da direita nas posições 2 i+1 e 2 i + 2, respectivamente
        • não necessita ponteiros
        • restringe um tamanho para a árvore
        • também chamada de representação seqüencial
    14. Árvore Binária quase Completa A B C D E F G H I
    15. 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)
    16. em -ordem
      • 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-> d ir ;
      • }
      • } while( pilha_não_vazia() || p != NULL );
      • }
      H I D E B C A
    17. Árvore Binária d e Busca
    18. Árvore Binária d e Busca
      • construída de tal forma que, para cada nó:
        • nós com chaves menores estão na sub- á rvore esquerda
        • nós com chaves maiores ( ou iguais ) estão na sub- á rvore direita
      • a inserção dos nós da árvore deve satisfazer a essa propriedade
    19. Árvore Binária d e Busca
      • para a busca de uma chave v na árvore binária de busca:
        • primeiro compare com a raiz
          • se menor , vá para a sub- árvore esquerda
          • se maior , para a sub-árvore direita
      • aplique o método recursivamente
    20. Árvore Binária d e Busca
    21. Árvore Binária d e Busca
      • a cada passo, garante-se que nenhuma outra parte da árvore contém a chave sendo buscada
      • o procedimento pára quando
        • o nó com v é encontrado
        • senão, chega-se a NULL
    22. Árvore Binária d e Busca
        • b usca_arvore _nao_recursivo (v , p t)
        • {
        • do {
        • if (v < pt -> info )
        • pt = pt -> e sq;
        • else pt = pt -> dir;
        • }while (pt != NULL) && (v != pt -> info ) ;
        • return( pt ) ;
        • }
    23. Inserindo em Árvore Binária de Busca
      • Para inserir um nó na árvore:
        • fazer uma busca com insucesso
        • alocar um novo nó
        • é necessário saber por qual nó se chegou a NULL
          • será o pai do novo nó
    24. Inserindo em Árvore Binária de Busca
    25. Inserindo em Árvore Binária de Busca
    26. Inserção Árvore Binária de Busca
      • i nsere_árvore (int v alor , tipo_nó * pt )
      • { tipo_nó * pai;
      • do { pai = pt ;
        • if (v alor < pt ->chave) pt = pt ->e sq ;
        • else pt = pt -> esq ;
      • } while( pt != NULL );
      • if (pt == NULL){
          • pt = aloca();
          • pt ->chave = v alor; pt ->e sq = NULL ; pt -> dir = NULL ;
          • if (v < p ai ->chave) p ai ->e sq = pt ;
          • else p ai -> dir = pt ;
          • return( pt );
        • }
      • }
    27. Inserção Árvore Binária de Busca
      • a árvore está classificada se percorrida da forma correta (pre, pos ou em-ordem?)
        • as chaves aparecem em ordem se lidas da esquerda para a direita
      • podemos ordenar uma sequência como se fosse uma série de inserções
        • o programa tem apenas os ponteiros para se preocupar
        • qual a diferença
    28. Remoção em Árvore Binária de Busca
      • até então, vimos que a implementação da operação de inserção é simples
      • a remoção de um elemento já é mais complexa
        • remoção de um nó folha
          • o s ponteiro s esquerdo e direito do pai são setados para NULL
        • se possui apenas um filho
          • o ponteiro apropriado do pai passa a apontar para o filho
        • se o nó possui dois filhos
          • se um desses dois filhos não possui filhos, use esse nó para substituir o nó removido
    29. Remoção em Árvore Binária de Busca
      • senão: substituir o valor do nó a ser removido
        • substitua este com o elemento cuja chave é imediatamente maior (ou menor)
          • é sempre folha?
        • senão for folha – vá repetindo o procedimento
        • algoritmo?
    30. Remoção em Árvore Binária de Busca
      • Removendo 5:
        • basta que o ponteiro a direita de 4 aponte para NULL
      2 3 5 4 8 7 10 9 6
    31. Remoção em Árvore Binária de Busca
      • Removendo 3:
        • basta que substituir o nó 3 pelo nó 2
        • continua valendo a regra de formação da árvore
      2 3 5 4 8 7 10 9 6
    32. Remoção em Árvore Binária de Busca
      • Removendo 4:
        • basta que o substituir 4 pelo 5
        • continua valendo a regra de formação da árvore
      2 3 5 4 8 7 10 9 6
    33. Remoção em Árvore Binária de Busca
      • Removendo 7 ( raiz ) :
        • substituir o 7 pelo imediatamente maior: 8 – como determinar?
        • resulta na remoção do elemento de chave 8
      2 3 5 4 9 8 1 2 11 10 7
    34. Árvore Binária de Busca
      • A árvore obtida depende da seqüência de inserção de nós
      • Para que a árvore binária de busca seja completa
        • completa tem altura mínima
        • o conjunto das chaves deve ser reordenado
        • árvore comum - O (n)
        • árvore completa - O (log n)
    35. Árvore Binária de Busca
      • uma árvore binária de busca completa
        • o conjunto das chaves deve ser re - ordenado
        • s ejam s o e s n+1 duas chaves fictícias e já inseridas
        • a cada passo inserir em T uma nova chave que seja de índice médio entre i e j - duas chaves já inseridas
    36. Árvore Binária de Busca
      • árvore completa : ótima para a busca
        • quando a freqüência de acesso aos nós é igual
      • n ormalmente estas freqüências são diferentes
      • é interessante construir uma árvore binária que seja a melhor possível no que diz respeito à busca para freqüências conhecidas
    37. Eficiência da Árvore de Busca
      • Depende da ordem original dos dados
      • Se o array original está ordenado (ascendente ou descendente), as árvores resultantes só tem filhos a direita ou a esquerda
        • a inserção do 1o. nó - 0 comparações
        • a inserção do 2o. nó - 2 comparações
        • a inserção do 3o. nó - 3 comparações
      • 2 + 3 +....+n = n*(n+1)/2 -1
      • Complexidade - O (n 2 ) - para inserir n nós
    38. Eficiência da Árvore de Busca
      • Se a lista original estiver organizad a, e se uma árvore completa (parecida com completa) for se formando :
        • complexidade da inserção = O ( n log n )
    39. Eficiência da Árvore de Busca
      • 12, 8, 17, 4, 16
      • A árvore é balanceada

    + adorepumpadorepump, 2 years ago

    custom

    575 views, 0 favs, 0 embeds more stats

    More info about this document

    © All Rights Reserved

    Go to text version

    • Total Views 575
      • 575 on SlideShare
      • 0 from embeds
    • Comments 0
    • Favorites 0
    • Downloads 7
    Most viewed embeds

    more

    All embeds

    less

    Flagged as inappropriate Flag as inappropriate
    Flag as inappropriate

    Select your reason for flagging this presentation as inappropriate. If needed, use the feedback form to let us know more details.

    Cancel
    File a copyright complaint
    Having problems? Go to our helpdesk?

    Categories