Escolar Documentos
Profissional Documentos
Cultura Documentos
Faculdade de Ciências
Departamento de Matemática Ano lectivo de 2020 Semestre: II
Curso : Licenciatura em Informática
Introdução
Vamos discutir três problemas que podem ser estudadas usando árvores. O primeiro problema é:
Como itens em uma lista devem ser armazenados de modo que um item seja, facilmente, localizado?
O segundo problema é: Qual série de decisões devem ser feitos para encontrar um objecto com uma
certa propriedade de uma colecção de objectos de um determinado tipo? O terceiro problema é:
Como deve ser, um conjunto de caracteres, eficientemente codificados por cadeias de bits?
Definição de árvore
Uma árvore é um grafo simples conexo e aciclico.
Solução: Os grafos e são árvores pois são conexos simples e aciclicos. No entatnto, o grafo
G3, apesar de ser simples e conexo, não é aciclico, portanto não é árvore. O grafo G4 não é árvore
porque não é conexo.
Teorema
Uma árvore com vértices tem arestas.
Demonstração: Pela indução matemática, suponhamos que a árvore consiste de um vertice é obvio
que terá nenhuma áresta, de acordo com a definição da árvore.
A hipótese indutiva afirma que todas as árvores com k vértices tem – arestas, onde é um número
inteiro positivo. Suponhamos que uma árvore tem vértices e que v é uma folha de (que deve
existir porque a árvore é finito), e seja w o pai do v. Removendo do T do vértice v e a aresta conectando
para produz uma árvore com vértices, porque o gráfo resultante ainda é conexo e não tem ciclos
simples. Pela hipótese indutiva, tem de arestas. Segue-se que tem arestas porque tem mais do
que uma aresta , A extremidade de ligação e . Isto completa o passo indutivo.
Exemplo 1: Formar uma árvore de busca binária para as palavras mathematics, Physics, geography,
zoology, meteorology, geology, psicology e Chemistry (usando ordem alfabética).
Solução: A Figura 1 mostra os passos utilizados para construir esta árvore de busca binária. A
palavra mathematic é a chave da raiz. Porque a physics vem depois de mathematics (em ordem
alfabética), adicione um filho à direita da raiz com a physics. Porque a geography vem antes de
mathematics, adicione uma filho à esquerda da raiz com a chave geography. Em seguida, adicione
um filho à direita do vértice com a physic, e atribuí-lo a chave zoology, porque zoology vem depois
de mathematics e physic. Da mesma forma, adicionar um filho esquerdo do vértice com a physic e
atribuir este novo vértice da chave meteorology . Adicionar um filho à direita do vértice com a chave
geography e atribuir este novo vértice a chave geology. Adicionar um filho à esquerda do vértice
com chave zoology e atribuí-lo a chave psicology. Adicionar um filho à esquerda do vértice com a
chave geography e atribuí-lo a chemistry.
Figura 1: Construindo uma árvore de pesquisa binária
Exemplo 2: Use Algoritmo 1 para inserir a palavra oceanography na árvore de busca binária no
Exemplo 1.
Solução: Algoritmo 1 começa com V, o vértice sob exame, igual à raiz de T, de modo etiqueta (v) =
matemática. Porque rótulo v? = Null e (v) = matemática <oceanografia, nós próxima examinar o
filho direita da raiz. Existe esse filho à direita, por isso, definir v, o vértice sob exame, a ser este filho
à direita. Nesta etapa temos v? = Null e etiqueta (v) = physics> oceanography, portanto, examinar o
filho à esquerda do v. Esse filho esquerdo existe, por isso, definir v, o vértice em análise, a este filho
da esquerda. Nesta etapa, também temos v? = Null e etiqueta (v) = metereology <oceanography,
então tentamos examinar o filho à direita de v. No entanto, este filho da direita não existe, por isso,
acrescentar um novo vértice como o direito filho de v (que neste momento é o vértice com a chave
metereology) e montamos v: = null. Agora, saimos do loop while porque v = null. Uma vez que a
raiz de T não é nula e v = nulo, usamos o else if no final do algoritmo para marcar o novo vértice
com o chave Oceanography.
Agora vamos determinar a complexidade computacional deste procedimento. Suponha que temos
uma árvore binária de busca T para uma lista de n items. Podemos formar uma árvore binária U
completa de T, adicionando vértices não marcados sempre que necessário, de modo que cada vértice
com uma chave tem dois filhos. Isto é ilustrada na Figura 2. Uma vez que tenhamos feito isso,
podemos facilmente localizar ou adicionar um novo item como uma chave sem adição de um
vértice.
A maioria das comparações necessárias para adicionar um novo item é o comprimento do caminho
mais longo a partir de L a raiz de uma folha. Os vértices internos de L são os vértices de T. Daqui
resulta que L tem n interna vértices. Podemos concluir que U tem folhas. Vemos que a altura
de U é maior do que ou igual a . Por conseguinte, é necessário realizar pelo
menos comparações para adicionar algum item. Observe que, se L é equilibrada, a sua
altura é de Assim, se uma árvore binária de pesquisa é equilibrado, localizar ou
adicionar um item não requer mais de comparações. Uma árvore de busca binária
pode tornar-se desequilibrada do jeito como os itens são adicionados a ele.
Árvore de decisão
Árvores com raiz podem ser usadas para modelar problemas nos quais uma série de decisões leva a
uma solução. Por exemplo, uma árvore de pesquisa binária pode ser usado para localizar artigos com
base numa série de comparações, onde cada comparação nos diz se temos localizado o item, ou se
devemos ir à direita ou à esquerda em uma sub-árvore. Uma árvore com raiz no qual cada vértice
interno corresponde a uma decisão, com uma sub-árvore nesses vértices para cada resultado possível
da decisão, é chamado de uma árvore de decisão. As possíveis soluções para o problema
correspondem aos caminhos para as folhas desta árvore com raiz. Exemplo 3 ilustra uma aplicação
da árvore de decisão.
Exemplo: Suponha que há sete moedas, todas com o mesmo peso, e uma moeda falsa que pesa
menos do que as outras. Quantas pesagens são necessários utilizando uma balança para determinar
qual das oito moedas é a falsa? Dê um algoritmo para encontrar uma moeda falsificada.
Solução: Existem três possibilidades de cada um pesando em uma escala de equilíbrio. As duas
panelas de lata têm igual peso, a primeira panela pode ser mais pesado, ou o segunda panela pode ser
mais pesado. Consequentemente, a árvore de decisão para a sequência de pesagens é uma árvore 3-
ário. Existem, pelo menos, oito folhas na árvore de decisão porque existem oito resultados possíveis
(porque cada uma das oito moedas pode ser a falsificação de moeda mais leve), e cada resultado
possível deve ser representado por pelo menos em folha. O maior número de pesagens necessários
para determinar a moeda falsa é a altura de a árvore de decisão. A altura da árvore de decisão é, pelo
menos, . Assim, são necessários, pelo menos, duas pesagens. É possível determinar a
moeda falsa usando duas pesagens. A árvore de decisão que ilustra como isto é feito é mostrado na
Figura 3.
Teorema 1: Um algoritmo de ordenação com base em comparações binárias requer pelo menos
comparações.
Exercícios
1. Criar uma árvore de busca binária para o palavras banana, pêssego, maçã, pêra, coco, manga,
papaia e usando ordem alfabética.
2. Criar uma árvore binária de pesquisa para as palavras enologia, frenologia, campanology,
ornitologia, ictiologia, limnologia, a alquimia, astrologia e usando ordem alfabética.
3. Quantas comparações são necessários para localizar ou para adicionar cada uma dessas
palavras na árvore de busca de Exercício 1, começando do zero de cada vez?
a) Pêra b) Banana c) laranja
4. Quantas comparações são necessários para localizar ou para adicionar cada uma das palavras
na árvore de busca de Exercício 2, começando do zero de cada vez?
a) Quiromancia b) etimologia c) paleontologia d) glaciologia
5. Usando ordem alfabética, construir uma árvore de busca binária para as palavras na frase "A
ligeira raposa marrom ataca sobre o cão preguiçoso. "
6. Quantas pesagens de uma escala de balança são necessárias para encontrar uma moeda falsa
mais leve entre os quatro moedas? Descreva um algoritmo para encontrar a moeda mais leve
usando este número de pesagens.
7. Quantas pesagens de uma escala de balança são necessárias para encontrar uma moeda falsa
entre as quatro moedas, se a moeda falsa pode ser maior ou menor do que os outros?
Descreva um algoritmo para encontrar a moeda falsa usando este número de pesagens.
8. Quantas pesagens de uma escala do balança são necessárias para encontrar uma moeda falsa
entre as oito moedas, se a moeda falsa é mais pesado ou mais leve do que os outros?
Descreva um algoritmo para encontrar a moeda falsa usando este número de pesagens.
9. Quantas pesagens de uma escala de balança são necessárias para encontrar uma moeda falsa
entre as 12 moedas se a moeda falsa é mais leve do que os outros? Descreva um algoritmo
para encontrar a moeda mais leve usando este número de pesagens.
10. Encontre o menor número de comparações necessárias para classificar quatro elementos e
elaborar um algoritmo que classifica esses elementos usando este número de comparações.
1. Construir o sistema universal de endereços para uma dada árvore com raiz e ordenada.
Em seguida, usar isso para encomendar seus vértices usando a ordem lexicográfica de
seus rótulos.
5. Determinar a ordem em que um percurso preorder visita os vértices da árvore com raiz e
ordenada.
6. Em que ordem são os vértices da árvore com raiz do exercício anterior são visitados
através de um percurso em inorder?
7. Em que ordem são os vértices da árvore com raiz do exercício anterior são visitados
através de um percurso em postorder?
8.
a) Representa a expressão usando uma árvore
binária. Escreva esta expressão em
b) notação prefix
c) notação postfix .
d) notação infix .
9.
a) Representa as expressões e usando um
árvores binárias.Escreva estas expressões em
b) notação prefix
c) notação postfix .
d) notação infix .
10. Desenhar a árvore enraizada ordenada correspondente a cada uma destas expressões
aritméticas escritas em notação prefix. Em seguida, escrever cada expressão usando a
notação de infix.
a) + * + - 5 4 3 2 1
b) ↑ + 2 3 - 1 5
c) * / 9 * 3 + 2 4 - 6 7
11. Qual é o valor de cada uma destas expressões escritas na notação prefix?
a) - * 2/4 3 8
b) ↑ - * 3 * 4 3 5 2
c) + - ↑ ↑ 2 3 2 3/6 - 4 2
d) * + 3 + 3 + 3 ↑ 3 3 3
12. Qual é o valor de cada uma destas expressões escritas na notação posfix?
a) 5 2 1 4 1--3 * ++
b) 9 3/5 + 7 2 - *
c) 3 2 * 2 ↑ 5 3 - 8 4 / * -
14. Mostram que o percurso preorder dos duas árvores enraizadas apresentados abaixo
produziem a mesma lista de vértices.
15. Mostre que que o percurso postorder destas duas árvores enraizadas produzem a mesma
lista de vértices.