Escolar Documentos
Profissional Documentos
Cultura Documentos
Árvore binária
Uma árvore binária é uma estrutura de dados que tem por característica possuir
um elemento raiz e dois subelementos, a subárvore da esquerda e a da direita. Ela
pode ser representada, também, por arcos de S(sim) e N(não) em cada uma dos nós
raízes (DEITEL; DEITEL, 2010).
Quando um nó não terminal de árvore possui questionamento ou condições de
resposta direta (Sim ou Não) e é possível fazer ordenação das folhas por meio da
aplicação de um algoritmo, podemos dizer que se trata de uma árvore de decisão
(PUGA; RISSETI, 2009).
As árvores de decisão são muito aplicadas no cotidiano do usuário. Aplicativos
como ChatBot fazem uso da tabela de decisão para determinar qual orientação deve
ser dada ao usuário que apresenta determinado problema/solicitação.
Essa estrutura também é aplicada ao aprendizado de máquinas para a
classificação das informações; para visualizar regras de negócios que especificam
grupos de indivíduos; ou no processo de classificação das informações (taxonomia).
Uma característica das árvores binárias é o uso da técnica de recursividade
(DEITEL; DEITEL, 2010). Por causa desse aspecto, elas são muito usadas na
computação, principalmente para fazer buscas. É também por causa da recursividade
que o algoritmo de busca por inserção pode ser implementado na estrutura de uma
árvore binária.
A profundidade de uma árvore é determinada pela distância de um de seus nós
até a raiz. Os nós que têm a mesma profundidade pertencem ao mesmo nível. A
distância do menor nível de nó até a raiz resulta na altura da árvore.
Uma árvore que não contem nó ou que apresenta dois nós em todos os seus
níveis é ‘estritamente binária’, pois possui um balanceamento em toda a sua estrutura.
Quando todos os nós de uma árvore têm paridade de sub nós, dizemos que essa
árvore é completa.
É possível fazer a varredura de uma árvore binária por meio de diversas
técnicas de busca (PUGA; VISSETI, 2009). Dentre elas, podemos destacar três:
1) Esquerda-raiz-direta (ERD) ou em-ordem: A varredura é feita pela
esquerda para, em seguida, retornar para a raiz e, por fim, recomeçar pelo lado
direito.
2) Raiz-esquerda-direita (RED) ou pré-ordem: A varredura tem início na
raiz, passa para a esquerda e recomeça pela direita.
3) Esquerda-direita-raiz (EDR) ou pós-ordem: A varredura começa no
lado esquerdo, passa para a direita e retorna à raiz.
Árvores binárias balanceadas possuem, aproximadamente, a mesma altura,
considerando a igualdade dos nós do lado esquerdo e direito. Pode-se considerar que
uma árvore binária com balanceamento com n nós, possui uma altura próxima de log
n.
Classificação
As árvores binárias podem ser classificadas em:
• Binária: quando cada nó possui nenhum, um ou dois nós filhos
e cada filho tem somente um pai;
• Binária cheia: quando cada nó possui dois filhos;
• Binária perfeita: quando as folhas estão todas no mesmo nível;
• Binária completa: quando os nós se encontram o mais à
esquerda possível e seus níveis são todos preenchidos, com exceção
do último;
• Binária equilibrada: quando os subníveis da árvore possui no
máximo um nível de profundidade de diferença;
• Degenerada: todos os nós têm somente um nó filho;
• Binária ordenada: quando cada sub árvore (esquerda/direita) de
cada nó, contém somente valores menores/maiores do que nó
analisado.
Detalhes da figura:
• Arco direcionado: ligação entre um nó pai e um nó filho;
• Nó raiz: é o primeiro elemento da árvore, portanto não possuí nó
pai;
• Folha: Nó que não tem filhos;
• Profundidade do nó: distancia da raiz até o nó em questão;
• Nível: conjunto de nós a uma profundidade. O menor nível é o nó
raiz;
• Tamanho do nó: número de nós descendentes + 1(o próprio nó);
• Nós irmãos (siblings): quando os nós tem o mesmo pai;
• Nó pai: quando possui nós descendentes;
• Nó filho: nó descendente de um nó pai;
• Grau de entrada (in-degree): número de arcos que chegam em
um nó;
• Grau de saída (out-degree): número de arcos que partem de um
nó.
O entendimento de estrutura de dados tipo árvore é tão fundamental que
diversas áreas computação aplicam esse conceito de hierarquia em suas definições.
Esse é o caso de Document Objetc Model (DOM) (DEITEL; DEITEL, 2008).
O World Wide Web consortium (w3c) é um consórcio internacional que
determina todos os padrões de desenvolvimento na Web e especifica que, sempre
que uma página for carregada, todos os elementos que estão na linguagem de
marcação HTML serão reconhecidos pelo navegador de maneira hierárquica.
Semelhante a uma estrutura de árvore, os elementos da página web são
posicionados hierarquicamente em níveis e podem ser facilmente encontrados por
linguagens como JavaScript por meio de Document Object Model (DOM) (LEMAY,
2002).
Ao se tornar capaz de manipular e controlar esses elementos, passa a ser
possível desenvolver e páginas interativas e abertas para feedback que tornam a
navegação intuitiva e prazerosa para o usuário. Veja, a seguir, a árvore de elementos
de uma página HTML.
HTML
HEAD BODY
DIV DIV
IMG LI A LI
Tabelas de símbolos
Tipos abstratos de dados (TAD) são estruturas que comportam um conjunto de
elementos. Alguns dos tipos mais comuns de TADs incluem vetores, listas e árvores.
Um tipo abstrato possui um valor e uma operação (V e O). Essas estruturas
fazem uso de interfaces, pois, por meio delas, pode-se realizar diversas operações
específicas.
Em computação, uma interface é um objeto que contém a assinatura de um
método, mas não a sua implementação. Em outras palavras, diz o que cada operação
deve fazer, mas não como ela deverá ser implementada (LIMA, 2016).
Figura – Interface
Funções hashing
Divisão
A função de divisão é a maneira mais fácil de se usar o hash. Nela, usa-se o
módulo de divisão (h(k) = k mod TSize), sendo TSize o tamanho da tabela (h) e k o
número de itens. Essa técnica é escolhida sempre que o conjunto de chaves é
desconhecido.
Enlaçamento
Nesse método, a chave é dividida em diversas partes que são combinadas ou
enlaçadas juntas e com a frequência transformada para criar o endereço alvo.
Podemos usar como exemplo um código de pessoa física (cpf) que possui quatro
partes. Os itens poderiam ser somados e o resultado dividido pelo tamanho do item
(11) e adicionado a uma tabela como referência. Existem dois tipos de enlaçamento.
O deslocado e o limite.
Extração
Nesse método, somente uma parte da chave é usada para calcular o endereço.
Por exemplo, em redes de computadores, o endereço físico de uma placa de rede é
composto por 12 dígitos em formato hexa. Considere uma tabela com propriedade e
número de série. Os seis primeiros determinam o fabricante e os seis últimos o número
de série da placa de rede.
Tabela hash
Também conhecida como tabela de dispersão, trata-se de um vetor (tabela) de
tamanho fixo. Nela, os elementos são alocados em posições determinadas por uma
função hash. A forma mais simples de sua representação é um vetor de registro. Ele
contém uma chave para cada linha dessa tabela, ou seja, a cada elemento do vetor.
Figura– Tabela com vetor simples
Por padrão, a chave é do tipo inteiro, entretanto ela pode ser associada a uma
de valores alfanuméricos. Esse segundo tipo de dados é chamado de chave
associativa. Ela deve ser um identificador para cada registro que conterá mais
informações sobre o item procurado. A ideia é fazer a varredura do vetor em busca do
item procurado de forma fácil e veloz. A tabela também pode ser usada com listas ao
invés de valores.
Técnicas de colisões
Sempre que dois dados distintos entram em uma função hash, espera-se que
as saídas sejam diferentes. Quando isso não ocorre, ou seja, as entradas são
diferentes, mas as saídas são iguais, tem-se uma colisão.
Em algumas situações, essas colisões são totalmente intoleráveis. Como
exemplo prático, podemos mencionar situações que envolvem segurança da
informação e criptografia.
Um outro exemplo de colisão pode estar relacionado à tabela American
Standard Code for Information Interchange (ASCII). Imagine uma função de dispersão
aplicada a nomes que retorna o valor da tabela ASCII da primeira letra de cada nome.
Todos os nomes que começam com a mesma letra serão referenciados com a mesma
chave da tabela. Desta forma, colisões ocorrem e existem técnicas para a sua
resolução:
Encadeamento Separado