Estrutura de Dados I




                                          Árvores




Prof. Eder Stone Fontoura
Adaptação dos slides da Profa. Cristina Nunes       1
Árvores
   São estruturas de dados que caracterizam uma relação de hierarquia
    entre os dados
        um conjunto de dados é hierarquicamente subordinado a outro.
   Diferente das listas, não são estruturas de dados lineares.
   Podem representar: sistemas de arquivos, interfaces gráficas com o usuário
    (organização dos menus), organização das páginas de um site, organização
    hierárquica de cargos ou setores de um empresa, etc.
        Exemplo:



                                  Presidente


             Diretoria           Diretoria de            Diretoria
            Financeira            Marketing             De Vendas


                                                                                 2
Definição
       Normalmente é um conjunto finito T de um ou mais nodos tal que:
             existe um nodo denominado raiz da árvore;
             os demais nodos formam m ≥ 0 subconjuntos disjuntos t1, t2, ..., tm, onde cada um
              desses subconjuntos é uma árvore.
             as árvores ti (1 ≤ i ≤ M) recebem a denominação de sub-árvore.




D = Raiz
C e E = sub-árvores                               D




                                  C                         E




                             A          B                        F
                        t1                         t2


                                                                                                  3
Definição
   Um mesmo nodo não aparece em mais de uma sub-árvore ao mesmo
    tempo nunca teremos sub-árvores interligadas.




                       A

                  B          C       Não é árvore!!!


                        D




                                                                   4
Definição
   Se X é um nó que antecede um nó Y, X é pai de Y ou Y é filho de X.
   Nodos que possuem um mesmo pai são ditos irmãos
   A raiz é o único nodo que não possui pai


                                                     Raiz


                                                     G é pai de H
                                                     H é filho de G



                                                        A e B são irmãos
                                                                           5
Terminologia
   Floresta: Se retirarmos o nodo raiz de uma árvore que contém sub-
    árvores estaremos criando uma floresta. Os filhos da raiz original serão
    as raizes das novas árvores.
                                   D

                           C               G
                                   E


                       A       B       F       H




                           C       E       G
                                                   Floresta

                       A       B       F       H


                                                                          6
Terminologia
   Nó externo ou folha: nodos que não possuem filhos.

                                 D

                         C           E



                    A        B           F



   Nó interno ou galho: nodos que não são folhas e nem raiz.
                                 D

                         C           E



                     A       B           F

                                                                7
Terminologia
   Grau de um Nodo: número de sub-árvores de um nodo.
                                    D

              Grau = 2    C                   E       Grau = 1


                      A       B                   F

   Nível de um Nodo: número de linhas que liga o nó à raiz. O
    nível do nodo raiz é 0.
                                    D   Nível = 0

              Nível = 1   C                   E       Nível = 1


           Nível = 2 A        B   Nível = 2       F    Nível = 2

                                                                   8
Terminologia
   Altura da árvore: nível mais alto da árvore.
                                      Altura = 2
                                  D

                          C              E



                      A       B              F

   Árvore ordenada: quando existe uma ordem linear definida
    para os filhos de uma árvore.




                                                               9
Formas de Representação
          Por adjacência (ou contiguidade)
                 Armazenamento da árvore em um vetor.
                 Cada posição por vetor pode, por exemplo, conter, além da
                  informação do nodo, referências aos nodos filhos.




                 Índice onde está o nodo

Representação:




                                           Ou guardar apenas a informação e o grau no nodo:


                                                                                              10
Formas de Representação
   Registro fixo
         Se o grau da árvore for baixo e/ou a variabilidade do grau entre os nodos
          for pouca.
                                           A


           B                    nulo       C                              D                 nulo

                                                    nulo nulo

E                     F                    G                    H                   I
    nulo nulo nulo        nulo nulo nulo       nulo nulo nulo           nulo nulo       nulo nulonulo

                                                                J
                                                                    nulonulo nulo
         Problema:
                  No caso de árvores “genéricas”, em que cada nodo pode ter uma quantidade de
                   sub-árvores diferentes, é necessário limitar o número máximo de sub-árvores que
                   cada nodo deve conter.
                  Nodos de uma mesma árvore são todos do mesmo tipo.


                                                                                                        11
Árvores Binárias
       Estruturas do tipo árvore, onde o grau de cada nodo é sempre
        menor ou igual a 2.
       Caso especial de árvore em que nenhum nodo tem mais que
        dois filhos.
       Existe um senso de posição: distingue-se entre uma sub-árvore
        esquerda e uma sub-árvore direita.

                         D

             B                       E



        A        C                        F
                                                     Não é árvore binária
sub-árvore da esquerda       sub-árvore da direita



                                                                            12
Propriedades
   O número máximo de nodos no K-ésimo nível de uma árvore
    binária é 2k.
        Ex.: no nível 2 podemos ter no máximo 22 = 4 nodos.
   O número máximo de nodos em uma árvore binária com altura
    K é 2K+1 - 1, para K ≥ 0.
   Árvore completa: árvore de altura K com 2K+1 - 1 nodos.

                                 D               Altura = 2
                                                 Nodos = 7
                         B               F



                     A       C       E       G




                                                               13
Árvores Genéricas -> Árvores Binárias
   A transformação de uma árvore binária produz uma alteração
    na estrutura física da mesma, o que pode provocar uma
    interpretação errônea da relação hierárquica existente na árvore
    original.
   Para se interpretar corretamente a hierarquia de uma árvore
    transformada em árvore binária, deve-se ter em mente a
    transformação havida. Assim, a sub-árvore da esquerda de um
    nó é o filho deste nó, enquanto que a sub-árvore da direita é o
    seu irmão.
   A transformação de uma árvore em árvore binária oferece a
    vantagem de não requerer conhecimento prévio da mesma,
    para fins de alocação encadeada. A desvantagem em relação à
    primeira alternativa reside no fato de não se ter acesso direto
    de um nó pai para qualquer um dos filhos, já que para acessar o
    i-ésimo filho é necessário acessar os (i - 1) anteriores.

                                                                 14
Árvores Genéricas -> Árvores Binárias
   Transformar uma árvore genérica em binária:
        Etapa1: Conecta-se os nodos irmãos;
        Etapa2: Desconecta-se o nodo pai dos nodos filhos, exceto do 1º filho.




                                                                                  15
Árvores Genéricas -> Árvores Binárias
   Redesenhando




                                            16
Representação
       Nodos de uma árvore binária terão (no mínimo):
                Informação                           typedef   struct nodo{
                                                         char   info;
                referência para o nodo da esquerda      nodo   * esquerda;
                                                         nodo   * direita;
                referência para nodo da direita.     }nodo;




    A

B

         C

E                 D

    F        G
                                                                               17
Ávore de busca binária (Árvore Ordenada)
   Uma árvore binária, cuja raiz armazena o elemento R, é
    denominada árvore de busca binária se:
        todo elemento armazenado na sub-árvore esquerda é menor que R;
        todo elemento armazenado na sub-árvore direita é maior que R;
        as sub-árvores esquerda e direita também são árvores de busca
         binária

                                D

                        B               F



                    A       C       E       G




                                                                   18
Operações Básicas
   Criar a árvore
   Inserir nodos na árvore
   Pesquisar nodos na árvore
   Excluir nodos da árvore
   Determinar a altura da árvore
   Determinar o nível de um nodo
   Caminhar em uma árvore




                                    19
Inserção
   Novos nodos inseridos entram sempre na condição de folhas
        um nodo não pode entrar numa árvore e já “assumir” filhos.
   Para inserir um elemento C
        Começamos pelo nodo raiz.
        Como C é menor que E, tomamos a sub-árvore da esquerda.
        Comparando com a nova raiz temos C > B e conclui-se que o elemento
         deve ser armazenado na sub-árvore direita.
        O processo se repete até chegarmos a uma sub-árvore nula.
        Nesse momento, uma folha é alocada para armazenar o novo elemento e
         entra como raiz da sub-árvore nula.
                                                                     E
                       E
                                        C
                                                             B           F
               B           F        Inserindo C

                                                         A       D           G
           A       D           G


                                                             C                   20
Pesquisa
   Dado um elemento X a ser procurado entre os nodos da árvore, temos
    quatro possibilidades a considerar:
        É uma árvore nula, portanto não há nada a fazer;
        A raiz armazena o elemento X;
        O valor de X é menor que aquele armazenado na raiz: deve-se prosseguir
         com a busca na sub-árvore esquerda;
        O valor de X é maior ou igual que aquele armazenado na raiz: deve-se
         prosseguir com a busca na sub-árvore direita.




                                                                             21
Exercícios
   Implementar um programa para criar
    árvores binárias de busca. Desenvolver
    as seguintes funções:
       Adicionar elementos
       Apresentar a informação de todos os
        elementos
       O nó com a informação “x” encontra-se na
        árvore?
       Nível do nó com a informação “x”
       “x” é um nó externo ou interno?        22
Caminhamentos
   Forma de percorrer a árvore.
        Visitar cada nodo apenas uma vez.
   Tipos
        Pré-fixado (ou pré-ordem)
        Central (ou em-ordem)
        Pós-fixado (ou pós-ordem)




                                             23
Caminhamento Pré-fixado
   Passos:
        Primeiro: Visita Raiz
        Segundo: Percorre sub-árvore da esquerda
        Terceiro: Percorre sub-árvore da direita




   Ordem de visita nos nodos: 1, 2, 4, 5, 3, 6 e 7




                                                      24
Caminhamento Central
   Passos:
        Primeiro: Percorre sub-árvore da esquerda
        Segundo: Visita Raiz
        Terceiro: Percorre sub-árvore da direita




   Ordem de visita nos nodos: 4, 2, 5, 1, 6, 3 e 7.




                                                       25
Caminhamento Pós-ordem
   Passos
        Primeiro: Percorre sub-árvore da esquerda
        Segundo: Percorre sub-árvore da direita
        Terceiro: Visita Raiz




   Ordem de visita nos nodos: 4, 5, 2, 6, 7, 3 e 1




                                                      26
Exemplo
                                     -


                             *               /



                    +            C       D            -



                A        B                       E        F




PRÉ: - * + a b c / d - e f
CENTRAL: (expressão original) a + b * c - d / e - f
PÓS: (notação polonesa) a b + c * d e f - / -
                                                              27
Alternativas de Árvores Binárias
   Aspecto fundamental do estudo de árvores de busca:
        o custo de acesso a uma informação desejada.
   Alternativas:
        Árvore balanceada
        Árvore-B




                                                         28
Árvore Balanceada
   Idéia: manter os ramos da árvore sempre "no mesmo nível".
        custo para manipular uma informação na árvore se mantém
         semelhante tanto para os ramos à esquerda quanto para os ramos
         à direita.
   As suas sub-árvores à esquerda e à direita possuem a mesma
    altura.
   Quando uma árvore cresce muito para um dos lados ela é dita
    degenerada (ou desbalanceada).

                    Árvore balanceada       Árvore degenerada




                                                                    29
Árvore Balanceada
   O processo de balanceamento pode se tornar muito pesado
    quando a árvore contém muitos nós e várias inserções são feitas.
   Em 1962, dois matemáticos russos (Adelson Velskii e Landis)
    introduziram um conceito menos rigoroso de árvores
    balanceadas.
        Uma árvore é considerada balanceada quando, para cada nó n, as
         alturas das sub-árvores à esquerda e à direita diferem no máximo de
         1.
        A esta diferença chamamos de "fator de balanceamento de n”
         (FatBal(n)).
        Este algoritmo é conhecido como árvore AVL.




                                                                       30
Árvore Balanceada
   Características
        Diferença da altura da sub-árvore esquerda e direita é no máximo 1
        Se um nodo raiz não satisfaz a condição de altura, então ele é
         considerado desbalanceado.
   Exemplo




         Árvore AVL                           Árvore desbalanceada
Altura(100) = Altura(SD) – Altura(SE)   Altura(150) = Altura(SD) – Altura(SE)
Altura(100) = 2 – 1 = 1                 Altura(150) = 2 – 0 = 2
                                                                                31
Árvore Balanceada
   Balanceamento
       Processo que busca a distribuição equilibrada dos nodos de
        modo a otimizar a operação de consulta, isto é, minimizar o
        número médio de comparações necessárias para localizar
        uma chave.
       É desejável que as chaves mais solicitadas estejam
        próximas à raiz.
       Uma árvore é completamente balanceada se a distância
        média dos nodos até a raiz for mínima.




                                                                 32
Árvore-B
   São árvores balanceadas projetadas para trabalhar com
    dispositivos de armazenamento secundário como discos
    magnéticos por exemplo.
   Visam otimizar as operações de entrada e saída nos
    dispositivos.
        O tempo de acesso às informações em um disco é prejudicado
         principalmente pelo tempo de posicionamento do braço de leitura.
        Uma vez que o braço esteja posicionado no local correto, a leitura
         pode ser feita de forma bastante rápida.
   Diferente das árvores binárias, cada nó em uma árvore B pode
    ter muitos filhos
        o grau de um nó pode ser muito grande.




                                                                         33
Árvore-B
   Definição
       Uma árvore B de ordem d é uma árvore com as seguintes
        características:
            A raiz tem no mínimo uma chave e dois filhos;
            Uma folha tem no mínimo d chaves e não tem filhos;
            Todos os outros nós têm no mínimo d chaves e d+1 filhos;
            Todos os nós têm, no máximo, 2d chaves e 2d+1 filhos.
       A ordem d indica a quantidade máxima e mínima de chaves
        dentro dos nodos.




                                                                        34
Árvore-B
   Estrutura
        Os nodos são compostos por chaves, ponteiros e informações.
        Para cada chave está associada somente uma informação.
        Pode-se ter informações adicionais que facilitam a manipulação
         dos nodos
             Ex.: um campo para guardar o endereço do nodo pai e o número de
              chaves ativas dentro dos nodos
        Existe um ponteiro externo que aponta para raiz, indicando o início
         da árvore.




                                                                            35
Árvore-B
   Exemplo
       Árvore B de ordem 2 (d = 2)
            O nodo raiz pode conter no mínimo 1 chave e 2 apontadores e no
             máximo 4 chaves com 5 apontadores.
            Os nodos internos poderão conter no mínimo 2 chaves com 3
             apontadores e no máximo 4 chaves com 5 apontadores.




                                                                              36
Árvore-B
   Principais Vantagens:
       A utilização de memória é de no mínimo 50%.
       As operações realizadas sobre a árvore-B tem como conseqüência
        uma ordenação natural das chaves.
       Ótima para operações do tipo:
            recuperar um determinado número de registros a partir de uma chave
             ou encontrar sucessores e predecessores




                                                                             37
Árvore-B
   As árvores-B diminuem e aumentam de uma única forma:
        através da divisão de um nodo em dois irmãos ou através da união
         de dois irmãos em um único nodo.
   O aumento ou diminuição da árvore são processos que sempre
    iniciam nos nodos folha e podem propagar-se até a raiz.
   Operações:
        Pesquisa:
             Análoga ao percurso em árvores binárias de busca.
             Numa pesquisa binária, os ramos da árvore tomados para um nodo
              dependem da comparação entre a chave pesquisada e a chave
              armazenada no nodo.
             Se a chave pesquisada é menor é tomado o braço esquerdo, se for
              maior o direito.

         Consultar: http://www.lcad.icmc.usp.br/~nonato/ED/B_arvore/btreebusca.htm


                                                                                     38
Árvore-B
   Inserção:
         É feita uma pesquisa até a folha apropriada para ser feita a inserção.
         Existem 3 possibilidades:
               se existir espaço na folha, o dado é simplesmente inserido;
               se não houver espaço no nodo, verifica-se no irmão adjacente se há
                espaço. Se houver, toma-se a chave mais a direita do nodo a inserir e
                promove a "chave pai". A "chave pai" anterior é inserida no irmão
                adjacente. Desta forma, abre-se um espaço no nodo em que a chave deve
                ser inserida;
               se não houver espaço no irmão adjacente, deve ocorrer a cisão do nodo
                em que a chave deve ser inserida . Neste caso, total de chaves em um
                nodo é dividido d, ficando assim as d menores chaves em um nodo e as d
                maiores chaves em outro. A chave mais à esquerda das d maiores chaves
                é promovida a "chave pai" (é inserida no nodo pai) dos nodos criados na
                cisão. Deste modo é criado um espaço nas folhas para ocorrer a inserção.
                Se o nodo pai está cheio, o mesmo processo é aplicado para ele, e assim
                consecutivamente

Consultar: http://www.lcad.icmc.usp.br/~nonato/ED/B_arvore/btreeinsercao.htm

                                                                                    39
G     M     P    X



A C D E               N O                Y Z
          J K                    R S T U V
                Inclusão da Chave B
            G    M     P    X



A B C D E
  C D E              N O                Y Z
          J K                    R S T U V

                                               40
Chavei–1[x]         Chavei[x]
                  .....      .....       N       W



    P     Q        R           S         T        U       V         N=7
                    Inclusão da Chave O

                                Chavei[x]
                     Chavei–1[x]          Chavei+1[x]
          .....      .....           N       S
                                             W       W



O
P   Q R
    P Q   R
          S        T      U          V           T    U   V
          N=4                                                 N=3
                                                                          41
A        D       F    H         L        N    P
                                                               N=7
       A1   A2       A3      A4       A5    A6       A7   A8
                         Inclusão da Chave E


    N=1          H



   A    D   E
            F    F
                 H       L   N    P        L     N   P


A1 A2 A3 A4 A5 A6 A7 A8                    A1 A2 A3 A4         N=3
                 N=4
                                                                 42
Árvore-B
   Exclusão:
        Pesquisa para localizar o nodo correto;
        Existem 2 possibilidades:
             a chave a ser excluída está em um nodo folha
                   simplesmente excluída;
             a chave a ser excluída não está em um nodo folha
                   uma chave adjacente é procurada e transferida para o local onde encontra-
                    se a chave a ser excluída.
                   esta chave pode ser a primeira chave da folha mais à esquerda da sub-
                    árvore à direita ou a última chave da folha mais à direita da sub-árvore à
                    esquerda.
                   a chave substituta é retirada de uma folha, o que nos leva a uma retirada
                    em folha.




                                                                                           43
Árvore-B
   Verificar se a retirada "quebrou" a definição de árvore B:
        caso a folha, após a retirada, tenha ficado com menos de d chaves:
              verificamos a ordem dos irmãos adjacentes.
        se existir um irmão adjacente com mais de d chaves:
              é feita uma redistribuição.
              A chave mais a esquerda do irmão adjacente é promovida a "chave pai" e a
               "chave pai" anterior é inserida no nodo em que a chave foi retirada
               (semelhante a inserção).
        Se o irmão adjacente tem d chaves
              é feita uma concatenação.
              Juntar em um único nó as chaves dos irmãos adjacentes mais a "chave
               pai", eliminado um nodo folha e uma chave (a "chave pai") do nodo pai.
              Dependendo do número de chaves do nodo pai, pode resultar em uma
               nova redistribuição ou em uma nova concatenação.

Consultar: http://www.lcad.icmc.usp.br/~nonato/ED/B_arvore/btreeremocao.htm




                                                                                        44
Árvore-B
            50    70

  25   30   55    60     80

            Remover 80

            50    60
                  70

  25   30   55    60     70
                         80



                              45

Arvores

  • 1.
    Estrutura de DadosI Árvores Prof. Eder Stone Fontoura Adaptação dos slides da Profa. Cristina Nunes 1
  • 2.
    Árvores  São estruturas de dados que caracterizam uma relação de hierarquia entre os dados  um conjunto de dados é hierarquicamente subordinado a outro.  Diferente das listas, não são estruturas de dados lineares.  Podem representar: sistemas de arquivos, interfaces gráficas com o usuário (organização dos menus), organização das páginas de um site, organização hierárquica de cargos ou setores de um empresa, etc.  Exemplo: Presidente Diretoria Diretoria de Diretoria Financeira Marketing De Vendas 2
  • 3.
    Definição  Normalmente é um conjunto finito T de um ou mais nodos tal que:  existe um nodo denominado raiz da árvore;  os demais nodos formam m ≥ 0 subconjuntos disjuntos t1, t2, ..., tm, onde cada um desses subconjuntos é uma árvore.  as árvores ti (1 ≤ i ≤ M) recebem a denominação de sub-árvore. D = Raiz C e E = sub-árvores D C E A B F t1 t2 3
  • 4.
    Definição  Um mesmo nodo não aparece em mais de uma sub-árvore ao mesmo tempo nunca teremos sub-árvores interligadas. A B C Não é árvore!!! D 4
  • 5.
    Definição  Se X é um nó que antecede um nó Y, X é pai de Y ou Y é filho de X.  Nodos que possuem um mesmo pai são ditos irmãos  A raiz é o único nodo que não possui pai Raiz G é pai de H H é filho de G A e B são irmãos 5
  • 6.
    Terminologia  Floresta: Se retirarmos o nodo raiz de uma árvore que contém sub- árvores estaremos criando uma floresta. Os filhos da raiz original serão as raizes das novas árvores. D C G E A B F H C E G Floresta A B F H 6
  • 7.
    Terminologia  Nó externo ou folha: nodos que não possuem filhos. D C E A B F  Nó interno ou galho: nodos que não são folhas e nem raiz. D C E A B F 7
  • 8.
    Terminologia  Grau de um Nodo: número de sub-árvores de um nodo. D Grau = 2 C E Grau = 1 A B F  Nível de um Nodo: número de linhas que liga o nó à raiz. O nível do nodo raiz é 0. D Nível = 0 Nível = 1 C E Nível = 1 Nível = 2 A B Nível = 2 F Nível = 2 8
  • 9.
    Terminologia  Altura da árvore: nível mais alto da árvore. Altura = 2 D C E A B F  Árvore ordenada: quando existe uma ordem linear definida para os filhos de uma árvore. 9
  • 10.
    Formas de Representação  Por adjacência (ou contiguidade)  Armazenamento da árvore em um vetor.  Cada posição por vetor pode, por exemplo, conter, além da informação do nodo, referências aos nodos filhos. Índice onde está o nodo Representação: Ou guardar apenas a informação e o grau no nodo: 10
  • 11.
    Formas de Representação  Registro fixo  Se o grau da árvore for baixo e/ou a variabilidade do grau entre os nodos for pouca. A B nulo C D nulo nulo nulo E F G H I nulo nulo nulo nulo nulo nulo nulo nulo nulo nulo nulo nulo nulonulo J nulonulo nulo  Problema:  No caso de árvores “genéricas”, em que cada nodo pode ter uma quantidade de sub-árvores diferentes, é necessário limitar o número máximo de sub-árvores que cada nodo deve conter.  Nodos de uma mesma árvore são todos do mesmo tipo. 11
  • 12.
    Árvores Binárias  Estruturas do tipo árvore, onde o grau de cada nodo é sempre menor ou igual a 2.  Caso especial de árvore em que nenhum nodo tem mais que dois filhos.  Existe um senso de posição: distingue-se entre uma sub-árvore esquerda e uma sub-árvore direita. D B E A C F Não é árvore binária sub-árvore da esquerda sub-árvore da direita 12
  • 13.
    Propriedades  O número máximo de nodos no K-ésimo nível de uma árvore binária é 2k.  Ex.: no nível 2 podemos ter no máximo 22 = 4 nodos.  O número máximo de nodos em uma árvore binária com altura K é 2K+1 - 1, para K ≥ 0.  Árvore completa: árvore de altura K com 2K+1 - 1 nodos. D Altura = 2 Nodos = 7 B F A C E G 13
  • 14.
    Árvores Genéricas ->Árvores Binárias  A transformação de uma árvore binária produz uma alteração na estrutura física da mesma, o que pode provocar uma interpretação errônea da relação hierárquica existente na árvore original.  Para se interpretar corretamente a hierarquia de uma árvore transformada em árvore binária, deve-se ter em mente a transformação havida. Assim, a sub-árvore da esquerda de um nó é o filho deste nó, enquanto que a sub-árvore da direita é o seu irmão.  A transformação de uma árvore em árvore binária oferece a vantagem de não requerer conhecimento prévio da mesma, para fins de alocação encadeada. A desvantagem em relação à primeira alternativa reside no fato de não se ter acesso direto de um nó pai para qualquer um dos filhos, já que para acessar o i-ésimo filho é necessário acessar os (i - 1) anteriores. 14
  • 15.
    Árvores Genéricas ->Árvores Binárias  Transformar uma árvore genérica em binária:  Etapa1: Conecta-se os nodos irmãos;  Etapa2: Desconecta-se o nodo pai dos nodos filhos, exceto do 1º filho. 15
  • 16.
    Árvores Genéricas ->Árvores Binárias  Redesenhando 16
  • 17.
    Representação  Nodos de uma árvore binária terão (no mínimo):  Informação typedef struct nodo{ char info;  referência para o nodo da esquerda nodo * esquerda; nodo * direita;  referência para nodo da direita. }nodo; A B C E D F G 17
  • 18.
    Ávore de buscabinária (Árvore Ordenada)  Uma árvore binária, cuja raiz armazena o elemento R, é denominada árvore de busca binária se:  todo elemento armazenado na sub-árvore esquerda é menor que R;  todo elemento armazenado na sub-árvore direita é maior que R;  as sub-árvores esquerda e direita também são árvores de busca binária D B F A C E G 18
  • 19.
    Operações Básicas  Criar a árvore  Inserir nodos na árvore  Pesquisar nodos na árvore  Excluir nodos da árvore  Determinar a altura da árvore  Determinar o nível de um nodo  Caminhar em uma árvore 19
  • 20.
    Inserção  Novos nodos inseridos entram sempre na condição de folhas  um nodo não pode entrar numa árvore e já “assumir” filhos.  Para inserir um elemento C  Começamos pelo nodo raiz.  Como C é menor que E, tomamos a sub-árvore da esquerda.  Comparando com a nova raiz temos C > B e conclui-se que o elemento deve ser armazenado na sub-árvore direita.  O processo se repete até chegarmos a uma sub-árvore nula.  Nesse momento, uma folha é alocada para armazenar o novo elemento e entra como raiz da sub-árvore nula. E E C B F B F Inserindo C A D G A D G C 20
  • 21.
    Pesquisa  Dado um elemento X a ser procurado entre os nodos da árvore, temos quatro possibilidades a considerar:  É uma árvore nula, portanto não há nada a fazer;  A raiz armazena o elemento X;  O valor de X é menor que aquele armazenado na raiz: deve-se prosseguir com a busca na sub-árvore esquerda;  O valor de X é maior ou igual que aquele armazenado na raiz: deve-se prosseguir com a busca na sub-árvore direita. 21
  • 22.
    Exercícios  Implementar um programa para criar árvores binárias de busca. Desenvolver as seguintes funções:  Adicionar elementos  Apresentar a informação de todos os elementos  O nó com a informação “x” encontra-se na árvore?  Nível do nó com a informação “x”  “x” é um nó externo ou interno? 22
  • 23.
    Caminhamentos  Forma de percorrer a árvore.  Visitar cada nodo apenas uma vez.  Tipos  Pré-fixado (ou pré-ordem)  Central (ou em-ordem)  Pós-fixado (ou pós-ordem) 23
  • 24.
    Caminhamento Pré-fixado  Passos:  Primeiro: Visita Raiz  Segundo: Percorre sub-árvore da esquerda  Terceiro: Percorre sub-árvore da direita  Ordem de visita nos nodos: 1, 2, 4, 5, 3, 6 e 7 24
  • 25.
    Caminhamento Central  Passos:  Primeiro: Percorre sub-árvore da esquerda  Segundo: Visita Raiz  Terceiro: Percorre sub-árvore da direita  Ordem de visita nos nodos: 4, 2, 5, 1, 6, 3 e 7. 25
  • 26.
    Caminhamento Pós-ordem  Passos  Primeiro: Percorre sub-árvore da esquerda  Segundo: Percorre sub-árvore da direita  Terceiro: Visita Raiz  Ordem de visita nos nodos: 4, 5, 2, 6, 7, 3 e 1 26
  • 27.
    Exemplo - * / + C D - A B E F PRÉ: - * + a b c / d - e f CENTRAL: (expressão original) a + b * c - d / e - f PÓS: (notação polonesa) a b + c * d e f - / - 27
  • 28.
    Alternativas de ÁrvoresBinárias  Aspecto fundamental do estudo de árvores de busca:  o custo de acesso a uma informação desejada.  Alternativas:  Árvore balanceada  Árvore-B 28
  • 29.
    Árvore Balanceada  Idéia: manter os ramos da árvore sempre "no mesmo nível".  custo para manipular uma informação na árvore se mantém semelhante tanto para os ramos à esquerda quanto para os ramos à direita.  As suas sub-árvores à esquerda e à direita possuem a mesma altura.  Quando uma árvore cresce muito para um dos lados ela é dita degenerada (ou desbalanceada). Árvore balanceada Árvore degenerada 29
  • 30.
    Árvore Balanceada  O processo de balanceamento pode se tornar muito pesado quando a árvore contém muitos nós e várias inserções são feitas.  Em 1962, dois matemáticos russos (Adelson Velskii e Landis) introduziram um conceito menos rigoroso de árvores balanceadas.  Uma árvore é considerada balanceada quando, para cada nó n, as alturas das sub-árvores à esquerda e à direita diferem no máximo de 1.  A esta diferença chamamos de "fator de balanceamento de n” (FatBal(n)).  Este algoritmo é conhecido como árvore AVL. 30
  • 31.
    Árvore Balanceada  Características  Diferença da altura da sub-árvore esquerda e direita é no máximo 1  Se um nodo raiz não satisfaz a condição de altura, então ele é considerado desbalanceado.  Exemplo Árvore AVL Árvore desbalanceada Altura(100) = Altura(SD) – Altura(SE) Altura(150) = Altura(SD) – Altura(SE) Altura(100) = 2 – 1 = 1 Altura(150) = 2 – 0 = 2 31
  • 32.
    Árvore Balanceada  Balanceamento  Processo que busca a distribuição equilibrada dos nodos de modo a otimizar a operação de consulta, isto é, minimizar o número médio de comparações necessárias para localizar uma chave.  É desejável que as chaves mais solicitadas estejam próximas à raiz.  Uma árvore é completamente balanceada se a distância média dos nodos até a raiz for mínima. 32
  • 33.
    Árvore-B  São árvores balanceadas projetadas para trabalhar com dispositivos de armazenamento secundário como discos magnéticos por exemplo.  Visam otimizar as operações de entrada e saída nos dispositivos.  O tempo de acesso às informações em um disco é prejudicado principalmente pelo tempo de posicionamento do braço de leitura.  Uma vez que o braço esteja posicionado no local correto, a leitura pode ser feita de forma bastante rápida.  Diferente das árvores binárias, cada nó em uma árvore B pode ter muitos filhos  o grau de um nó pode ser muito grande. 33
  • 34.
    Árvore-B  Definição  Uma árvore B de ordem d é uma árvore com as seguintes características:  A raiz tem no mínimo uma chave e dois filhos;  Uma folha tem no mínimo d chaves e não tem filhos;  Todos os outros nós têm no mínimo d chaves e d+1 filhos;  Todos os nós têm, no máximo, 2d chaves e 2d+1 filhos.  A ordem d indica a quantidade máxima e mínima de chaves dentro dos nodos. 34
  • 35.
    Árvore-B  Estrutura  Os nodos são compostos por chaves, ponteiros e informações.  Para cada chave está associada somente uma informação.  Pode-se ter informações adicionais que facilitam a manipulação dos nodos  Ex.: um campo para guardar o endereço do nodo pai e o número de chaves ativas dentro dos nodos  Existe um ponteiro externo que aponta para raiz, indicando o início da árvore. 35
  • 36.
    Árvore-B  Exemplo  Árvore B de ordem 2 (d = 2)  O nodo raiz pode conter no mínimo 1 chave e 2 apontadores e no máximo 4 chaves com 5 apontadores.  Os nodos internos poderão conter no mínimo 2 chaves com 3 apontadores e no máximo 4 chaves com 5 apontadores. 36
  • 37.
    Árvore-B  Principais Vantagens:  A utilização de memória é de no mínimo 50%.  As operações realizadas sobre a árvore-B tem como conseqüência uma ordenação natural das chaves.  Ótima para operações do tipo:  recuperar um determinado número de registros a partir de uma chave ou encontrar sucessores e predecessores 37
  • 38.
    Árvore-B  As árvores-B diminuem e aumentam de uma única forma:  através da divisão de um nodo em dois irmãos ou através da união de dois irmãos em um único nodo.  O aumento ou diminuição da árvore são processos que sempre iniciam nos nodos folha e podem propagar-se até a raiz.  Operações:  Pesquisa:  Análoga ao percurso em árvores binárias de busca.  Numa pesquisa binária, os ramos da árvore tomados para um nodo dependem da comparação entre a chave pesquisada e a chave armazenada no nodo.  Se a chave pesquisada é menor é tomado o braço esquerdo, se for maior o direito. Consultar: http://www.lcad.icmc.usp.br/~nonato/ED/B_arvore/btreebusca.htm 38
  • 39.
    Árvore-B  Inserção:  É feita uma pesquisa até a folha apropriada para ser feita a inserção.  Existem 3 possibilidades:  se existir espaço na folha, o dado é simplesmente inserido;  se não houver espaço no nodo, verifica-se no irmão adjacente se há espaço. Se houver, toma-se a chave mais a direita do nodo a inserir e promove a "chave pai". A "chave pai" anterior é inserida no irmão adjacente. Desta forma, abre-se um espaço no nodo em que a chave deve ser inserida;  se não houver espaço no irmão adjacente, deve ocorrer a cisão do nodo em que a chave deve ser inserida . Neste caso, total de chaves em um nodo é dividido d, ficando assim as d menores chaves em um nodo e as d maiores chaves em outro. A chave mais à esquerda das d maiores chaves é promovida a "chave pai" (é inserida no nodo pai) dos nodos criados na cisão. Deste modo é criado um espaço nas folhas para ocorrer a inserção. Se o nodo pai está cheio, o mesmo processo é aplicado para ele, e assim consecutivamente Consultar: http://www.lcad.icmc.usp.br/~nonato/ED/B_arvore/btreeinsercao.htm 39
  • 40.
    G M P X A C D E N O Y Z J K R S T U V Inclusão da Chave B G M P X A B C D E C D E N O Y Z J K R S T U V 40
  • 41.
    Chavei–1[x] Chavei[x] ..... ..... N W P Q R S T U V N=7 Inclusão da Chave O Chavei[x] Chavei–1[x] Chavei+1[x] ..... ..... N S W W O P Q R P Q R S T U V T U V N=4 N=3 41
  • 42.
    A D F H L N P N=7 A1 A2 A3 A4 A5 A6 A7 A8 Inclusão da Chave E N=1 H A D E F F H L N P L N P A1 A2 A3 A4 A5 A6 A7 A8 A1 A2 A3 A4 N=3 N=4 42
  • 43.
    Árvore-B  Exclusão:  Pesquisa para localizar o nodo correto;  Existem 2 possibilidades:  a chave a ser excluída está em um nodo folha  simplesmente excluída;  a chave a ser excluída não está em um nodo folha  uma chave adjacente é procurada e transferida para o local onde encontra- se a chave a ser excluída.  esta chave pode ser a primeira chave da folha mais à esquerda da sub- árvore à direita ou a última chave da folha mais à direita da sub-árvore à esquerda.  a chave substituta é retirada de uma folha, o que nos leva a uma retirada em folha. 43
  • 44.
    Árvore-B  Verificar se a retirada "quebrou" a definição de árvore B:  caso a folha, após a retirada, tenha ficado com menos de d chaves:  verificamos a ordem dos irmãos adjacentes.  se existir um irmão adjacente com mais de d chaves:  é feita uma redistribuição.  A chave mais a esquerda do irmão adjacente é promovida a "chave pai" e a "chave pai" anterior é inserida no nodo em que a chave foi retirada (semelhante a inserção).  Se o irmão adjacente tem d chaves  é feita uma concatenação.  Juntar em um único nó as chaves dos irmãos adjacentes mais a "chave pai", eliminado um nodo folha e uma chave (a "chave pai") do nodo pai.  Dependendo do número de chaves do nodo pai, pode resultar em uma nova redistribuição ou em uma nova concatenação. Consultar: http://www.lcad.icmc.usp.br/~nonato/ED/B_arvore/btreeremocao.htm 44
  • 45.
    Árvore-B 50 70 25 30 55 60 80 Remover 80 50 60 70 25 30 55 60 70 80 45