Árvores Binárias de Busca - PDF
Download "Árvores Binárias de Busca"
Marcelo Palma Ávila
1 Árvores Binárias de Busca Uma Árvore Binária de Busca T (ABB) ou Árvore Binária de Pesquisa é tal que ou T = 0 e a árvore é dita vazia ou seu nó contém uma chave e: 1. Todas as chaves da sub-árvore esquerda são menores que a chave da. 2. Todas as chaves da sub-árvore direita são maiores que a chave.. As sub-árvores direita e esquerda são também Árvores Binárias de Busca. Tabelas de Palavras reservadas de um compilador Java: for case while else if class private new switch Em algoritmo de busca a medida de eficiência é dada pelo número de comparações necessárias para se localizar uma chave, ou descobrir que ela não existe Numa lista linear com n chaves, temos que, no pior caso fará n comparações. O número de comparações cresce linearmente em função do número de chaves. Um percurso em-ordem nessa árvore resulta na seqüência de valores em ordem crescente. Uma árvore de busca criada a partir de um conjunto de valores não é única: o resultado depende da seqüência de inserção dos dados. A grande utilidade da árvore binária de busca é armazenar dados contra os quais outros dados são freqüentemente verificados (busca!) Uma árvore de busca binária é dinâmica e pode sofrer alterações (inserções e remoções de nós) após ter sido criada Busca Binária Pesquisa realizada se informação está armazenada de forma ordenada e em seqüência (em um vetor). 1
2 Qual a eficiência do Algoritmo de busca binária? - Para n = 8 posições, o pior caso é quando precisamos chegar à posição 1 ou 8. - A cada divisão, desprezamos toda a porção maior ou menor que a chave (posição do meio a cada iteração). Com busca binária obtemos a melhor eficiência possível em um vetor, mas ficamos limitados à representação seqüencial (deslocamentos, previsão de memória, etc.). Podemos utilizar a Árvore Binária de Busca e obteremos o mesmo desempenho anterior - desde que a altura seja mínima. É a característica de altura mínima que garante que estamos tomando a chave do meio da porção pesquisada! Com Árvore Binária de Busca Perfeitamente Balanceada temos altura mínima. O número de comparações será igual a: h min = menor inteiro maior ou igual a log 2 (n+1) Para garantir o desempenho ótimo temos que garantir que a árvore seja balanceada durante a construção e que o balanceamento seja mantido em inserções e eliminações! Operações em uma Árvore Binária de Busca As operações básicas em uma Árvore Binária de Busca são: inserção remoção busca Inserção Passos do algoritmo de inserção: Procure um local para inserir o novo nó, começando a procura a partir do nó-; Para cada nó- de uma sub-árvore, compare; se o novo nó possui um valor menor do que o valor nó (vai para sub-árvore esquerda), ou se o valor é maior que o valor no nó- (vai para sub-árvore direita); Se uma referência (filho esquerdo/direito de um nó ) nula é atingida, coloque o novo nó como sendo filho do nó-. Exemplo Para entender o algoritmo considere a inserção do conjunto de números, na seqüência:,,, 1,,, 0 1. No início a ABB está vazia! 2. O número será inserido tornando-se o nó ; Erro!. A inserção do inicia-se na. Compara-se com. Como >, deve ser colocado na sub-árvore direita do nó contendo (sub-árvore direita, inicialmente, nula); 2
3 4. A inserção do inicia-se na. Compara-se com. Como <, deve ser colocado na sub-árvore esquerda do nó contendo. Já que o nó não possui descendente esquerdo, é inserido na árvore nessa posição. 5. Para inserir o valor 1, repete-se o procedimento. 1<, então será inserido na sub-árvore esquerda. Chegando nela, encontra-se o nó, 1<, então ele será inserido na sub-árvore esquerda de Para inserir o valor, repete-se o procedimento. <, então será inserido na sub-árvore esquerda. Chegando nela, encontra-se o nó, <. Chegando à sub-árvore esquerda encontra-se o nó 1, >1, então ele será inserido na sub-árvore esquerda de Repete-se o procedimento para inserir o elemento : > (vai para a direita) e > (vai para a direita); 1 8. Repete-se o procedimento para inserir o elemento 0: 0 > (vai para a direita) 0 > (vai para a direita) 0 > (vai para a direita) 1 0
4 Busca Passos do algoritmo de busca 1. Comece a busca a partir do nó-; 2. Para cada nó- de uma sub-árvore compare: Se o valor procurado é menor que o valor no nó- (continua pela sub-árvore esquerda), ou se o valor é maior que o valor no nó- (sub-árvore direita); Caso o nó contendo o valor pesquisado seja encontrado, retorne o nó; caso contrário retorne nulo. Por exemplo, para encontrar a chave, o caminho de busca é representado a seguir: 1 Encontrou o nó 0 Exercícios 1. Implemente o método de inserção para a Árvore de Busca Binária, que armazene valores inteiros. 2. Implemente o método que realiza a busca de um elemento dentro de uma Árvore de Busca Binária. Obs: Para os métodos pedidos, faça a implementação no modo iterativo e recursivo! 4
5 Remoção Para a remoção de um nó em uma árvore binária, devem ser considerados três casos: Caso 1: o nó é folha O nó pode ser retirado sem problema; Caso 2: o nó possui uma sub-árvore (esq./dir.) O nó- da sub-árvore (esq./dir.) ocupa o lugar do nó retirado; Caso : o nó possui duas sub-árvores O nó contendo o menor valor da sub-árvore direita pode ocupar o lugar; ou o maior valor da sub-árvore esquerda pode ocupar o lugar Exemplos Caso 1: Remoção do nó 1 Ele pode ser removido sem problema, pois não requer ajustes posteriores. Os nós 0, e também podem ser removidos sem problemas! 1 0 Caso 2: Remoção do nó Como ele possui apenas a sub-árvore direita, o nó contendo o valor pode ocupar o lugar do nó removido. 1 0 Caso : Remoção do nó Neste caso, existem 2 opções: - O nó com valor 0 pode ocupar o lugar do nó-, ou - O nó com valor pode ocupar o lugar do nó
6 Este caso também se aplica ao nó : - O nó com valor pode ocupar o lugar do nó-, ou - O nó com valor pode ocupar o lugar do nó Importante: Uma vez definida a regra de escolha do nó substituto, ela deve ser a mesma para todas as operações de remoção! Custo da busca em ABB Pior caso: número de passos é determinado pela altura da árvore. A altura da Árvore de Busca Binária depende da seqüência de inserção das chaves. Considere, por exemplo, o que acontece se uma seqüência ordenada de chaves é inserida. Seria possível gerar uma árvore balanceada com essa mesma seqüência, se ela fosse conhecida a priori. A busca pode ser considerada eficiente se a árvore estiver razoavelmente balanceada. 6