Árvores
Matemá'ca Discreta II (Kenneth Rosen, Cap. 10)Slides baseados no material da profa. Anjolina Grisi de Oliveira (Cin-‐UFPE)
Árvores
• Uma árvore é um grafo conexo não orientado e sem circuitos simples
Floresta
• Uma floresta é um grafo cujas componentes conexas são árvores
Teorema
• Um grafo não orientado é uma árvore se e somente se existe um único caminho simples entre qualquer par de vér'ces.
• Prova
• Assuma que G é uma árvore. Logo G é um grafo conexo e sem circuitos simples. Sejam x e y dois nós de G. Logo, como G é conexo, existe um caminho simples entre x e y. Adicionalmente, esse caminho é único, pois se exis'sse um outro caminho, o caminho formado através da combinação do caminho de x até y com o segundo caminho começando por y e chegando a x formaria um circuito, o que contraria a hipótese de que G é uma árvore.
Árvore Enraizada
Uma árvore T = (V,E) é denominado enraizada quando algum vértice v é escolhido como especial. Esse vértice v é a raiz da árvore.
Árvore Enraizada
Usualmente representamos graficamente a raiz no topo. Podemos transformar uma árvore sem raiz numa árvore enraizada simplesmente escolhendo um vértice como raiz.
Árvore Enraizada
ancestrais de j={e,c} descendentes de j={i,k} pai de j=e filhos de j={i,k} nível de j=2 altura da árvore =3 folhas={b,a,i,k,f,h,d} Raiz = cÁrvore Enraizada
O nível de um vértice é o tamanho do único caminho da raiz até ele.nível de j=2
A altura da árvore é o maior nível entre os nós. É o tamanho do maior caminho da raiz até uma das folhas.
altura da árvore =3 Raiz = c
Árvore Enraizada
• A raiz de uma árvore não possui pai, e todo vér'ce v diferente de r, possui um único pai.
• Uma folha é um vér'ce que não possui filhos.
• Vér'ces que possuem filhos são chamados de vér'ces internos.
• Quando a raiz é o único nó do grafo ela é uma folha.
• O nível da raiz é zero, de seus filhos é 1.
• O nível de um nó é igual ao nível de seu pai mais um.
• Para dois vér'ces irmãos v e w, nível(v)=nível(w).
• A altura de uma árvore é o valor máximo de nível(r) para todo vér'ce v de T.
Subárvore
Seja T(V,E) uma árvore enraizada e v ∈ V.
Uma subárvore Tv de T é uma árvore enraizada cuja raiz é v, definida pelo subgrafo induzido pelos descendentes de v mais o próprio v.
A subárvore de raiz v é única para cada v ∈ V.
s v x w t u x v w
Árvore m-ária
• Uma árvore enraizada é chamada de m-‐ária se todo nó interno não possui mais que m filhos. A árvore é chamada árvore m-‐ária cheia se todo nó interno possui exatamente m filhos. Uma árvore m-‐ária com m=2 é chamada de árvore binária.
3-ária Binária
Árvore m-‐ária
• A árvore é chamada árvore m-‐ária cheia se todo nó interno possui exatamente m filhos. Uma árvore m-‐ ária com m=2 é chamada de árvore binária.
Binária cheia s x w t u v z -
Árvore m-‐ária
• Uma árvore enraizada m-‐ária de altura h é balanceada se todas as folhas estão no nível h ou
h-‐1.
Árvore Balanceada?
h=3 Nível(a) =1 Não está balanceada
Árvore Enraizada Ordenada
• Na definição de árvore enraizada, é irrelevante aordem em que os filhos de cada vér'ce v são considerados.
• Caso a ordenação seja relevante a árvore é denominada enraizada ordenada.
• Assim, para cada vér'ce v pode-‐se iden'ficar o primeiro filho de v (o mais a esquerda), o segundo filho (o segundo mais a esquerda), etc.
Árvore enraizada ordenada
• No caso de árvores binárias, se um nó interno possuidois filhos, temos o filho da esquerda e o filho da
direita
• A árvore cuja raiz é o filho da esquerda de um vér'ce é chamada de subárvore da esquerda desse vér'ce.
a d c b e b d e Subárvore da esquerda de a
Teorema
• Uma árvore com n nós possui n-‐1 arestas.
Prova
Definimos uma bijeção entre as arestas e os vértices diferentes da raiz, de forma que associamos cada vértice terminal de uma aresta com ela própria. Como existem n-1 nós além da raiz, logo existem n-1 arestas na árvore.
Teorema
• Uma árvore m-‐ária cheia com i nós internos contem
n = mi + 1 nós.
Prova
Cada vértice com exceção da raiz é filho de um nó interno. Como cada um dos i nós internos possui m filhos, existem mi nós na árvore além da raiz. Consequentemente, a árvore contem n = mi + 1 nós.
Teorema
• Uma árvore m-‐ária cheia com
I. n nós possui i=(n-‐1)/m nós internos e f = ((m-‐1)n +1)/m folhas
I. i nós internos possui n = mi + 1 nós e f= (m-‐1)i + 1
folhas
II. f folhas possui n = (mf – 1)/(m-‐1) nós e
i= (f-‐1)/(m-‐1) nós internos
Teorema -‐ Prova
• Uma árvore m-‐ária cheia com n nós possui i=(n-‐1)/m nós internos e f = ((m-‐1)n +1)/m folhas
• Vimos que n= mi + 1, logo i = (n-‐1)/m.
• Temos também que n = i + f, onde f é o número de folhas.
• Logo, f = n – i;
• f = n – (n-‐1)/m = (mn – (n-‐1))/m = (mn – n + 1)/m = ((m-‐1)n + 1)/m
Exemplo
• Suponha que alguém iniciou uma corrente de cartas.
Cada pessoa que recebe a carta é convidada a enviá-‐ la para outras quatro pessoas. Quantas pessoas receberam a carta, incluindo a pessoa que iniciou a corrente, se nenhuma pessoa recebeu mais que uma carta e se a corrente acabou depois que 100 pessoas leram a carta e não mais a enviaram? Quantas pessoas enviaram a carta?
Solução
A corrente pode ser representada usando uma
árvore 4-ária. Os nós internos correspondem às
pessoas que enviaram a carta, e as folhas às pessoas que não a enviaram.
Temos que 100 pessoas não enviaram a carta. Assim o número de folhas f é igual a 100.
Temos n = i + f e n = mi + 1.
Logo: 100 + i = 4.i + 1 => 3.i = 99 => i = 33
Resposta: 33 pessoas enviaram a carta
e (33*4+1)=133 pessoas a receberam
Teorema
Existem no máximo m
hfolhas em uma árvore
m-ária de altura h.
Prova: por indução sobre a altura
≤ h-1 ≤ h-1 ≤ h-1
Cada uma dessas
subárvores possui altura no máximo h-1. Portanto, pela H.I. existem no máximo mh-1
folhas em cada uma delas. Como existem no máximo m dessas subárvores, cada uma com no máximo mh-1
folhas, então existem no máximo m.mh-1 = mh folhas.
Aplicações: Árvore binária de busca
• Busca de itens numa lista.
• Cada vér'ce é rotulado por uma chave de forma que
a chave de um vér'ce é maior do que as chaves de todos os nós da subárvore da esquerda e menor do que as chaves dos nós da subárvore da direita.
55 30 80 45 90 32 35 20
Construindo uma árvore binária de
busca
• Procedimento recursivo que recebe uma lista de itens.
• O primeiro item da lista é a raiz da árvore.
• Para adicionar um novo item:
• Compare-‐o com os nós que já estão na árvore: comece pela raiz e siga para a esquerda se o item é menor que o item que rotula o nó que está sendo comparado ou siga para a direita, caso contrário.
• Quando o novo item é menor que um item cujo nó não tem filho da esquerda, adicione-‐o como filho da esquerda desse nó. Analogamente, quando o item é maior que o item cujo nó não tem filho da direita, adicione-‐o como filho da direita desse nó,
Construindo uma árvore binária de
busca
• Construa uma árvore binária de busca a par'r da seguinte lista: • 55,30,80,90,35,32,20,45 55 30 80 45 90 32 35 20
Exemplo: árvore binária de busca
• Use a ordem alfabé'ca para construir uma árvorebinária de busca com as palavras: mathema4cs,
physics, geography, zoology, meteorology, geology, psychology, e chemistry
Caminhado em árvores enraizadas e
ordenadas
• Procedimento universal para ordenar os seus nós:
1. Rotule a raiz com o inteiro 0. Em seguida rotule seus k filhos da esquerda para direita com 1,2,3,....,k.
2. Para cada vér'ce v no nível n com rótulo A, rotule
seus k filhos da esquerda para a direita com A.1, A.2, ...A.k.
Exemplo
0 3.1 3.2 3 2 1.1.1 1.1 1 1.2 1.1.2 1.1.2.3 1.1.2.1 3.1.2 3.3 3.1.1Procedimento universal para ordenar
os nós
• Podemos ordenar os nós usando a ordem lexicográfica de seus rótulos.
• Os vér'ces x1.x2...xn < y1.y2...ym se
• existe um i, 0 ≤ i ≤ n, com x1= y1, x2=y2, ...xi-‐1 = yi-‐1 e xi< yi;
Ordem lexicográDica
• Exemplo n < m e xi=yi, para i =1,2,...,n. 1.2.2 < 1.2.2.1 ? n=3 < m=4 e 1=1, 2=2, 2=2 x1.x2....xn < y1.y2....ym se existe um i, 0 ≤ i ≤ n,com x1= y1, x2=y2, ...xi-1 = yi-1 e xi< yi
1.2.1 < 1.2.2 ?
i=3: 1=1, 2=2 e 1<2
Algoritmos de caminhamento em
árvores
• Procedimentos para visitar sistema'camente todos os vér'ces de uma árvore
• Pré-‐ordem
• Ordem
• Pós-‐ordem
Caminhamento em pré-‐ordem
• Seja T uma árvore enraizada e ordenada com raiz r.• Se T possui apenas r, então o caminhamento em pré-‐ordem de T é r.
• Caso contrário, sejam T1, T2,... Tn as subárvores de r
da esquerda para a direita. O caminhamento em pré-‐ordem começa visitando r e con'nua fazendo um caminhamento em pré-‐ordem em T1, em
seguida em T2, e assim sucessivamente até que Tn
seja percorrida em pré-‐ordem.
Exemplo
a g h d c j e b f k p o n m i lParalelamente
Caminhamento em ordem
•
Seja T uma árvore enraizada e
ordenada com raiz r.
• Se T possui apenas r, então o
caminhamento em ordem de T é r. • Caso contrário, sejam T1, T2,... Tn as
subárvores de r da esquerda para a direita. O caminhamento em ordem começa fazendo um percurso em ordem em T1, em seguida visita r, e continua fazendo um caminhamento em ordem em T2, em T3 , e finalmente em Tn .
Exemplo
Caminhamento em pós-ordem
•
Seja T uma árvore enraizada e
ordenada com raiz r.
•
Se T possui apenas r, então o
caminhamento em pós-ordem de T é r.
•
Caso contrário, sejam T
1, T
2,... T
nas
subárvores de r da esquerda para a
direita. O caminhamento em pós-ordem
começa percorrendo T
1em pós-ordem,
em seguida T
2, T
3, ... T
n, e finaliza
visitando r.
Exemplo
Resumo: caminhamento em árvores
• Pré-‐ordem
• Primeira vez que a seta passa pelo vér'ce
• a, b, d, h, e, i, j, c, f, g, k • Ordem
• Folhas na primeira vez e vér'ces internos na segunda vez
• h, d, b, i, e, j, a, f, c, k, g
• Pós-‐ordem
• Segunda vez que passa pelo vér'ce (subida)
• h, d, i, j, e, b, f, k, g, c, a
Notação inDixa, pré-‐Dixa e pós-‐Dixa
• Podemos representar expressões complicadas, taiscomo proposições compostas, combinações de conjuntos, e expressões aritmé'cas usando árvores enraizadas ordenadas.
• O nós internos representam operações
• As folhas representam as variáveis ou valores
• As operações são executadas na subárvore da esquerda e depois na direita
Notação infixa: exemplo
Árvore que representa a expressão ((x+y)^2) + ((x-4)/3):
• A árvore binária é construída de baixo para cima.
• Construímos a subárvore (x+y), depois a incorporamos como parte de uma subárvore maior que representa (x+y)^2.
+
x y
+ 2
Notação infixa:
((x+y)^2) + ((x-4)/3)• Do mesmo modo a subárvore (x-4) é construída e incorporada à subárvore maior de (x-4)/3
+ x y + x y 2 ^ - x 4 - x 4 3 /
Notação infixa:
((x+y)^2) + ((x-4)/3)Por último as subárvore de ((x+y)^2) e de
((x-4)/3) são combinadas para formar a expressão
toda + x y 2 ^ - x 4 3 / +
Caminhamento em ordem:
((x+y)^2) + ((x-4)/3) + x y 2 ^ - x 4 3 / +Notação polonesa
• O operador precede seus dois operandos
• Ex: + x y à x+y
• Expressão pode ser avaliada da direita para a esquerda
• Quando encontrar um operador, realizar a
operação com os dois operandos imediatamente a direita
• Não necessita de parênteses
Qual é a forma pré-fixa (notação polonesa) da expressão
((x+y)^2) + ((x-4)/3) ?
Fazemos um caminhamento em pré-ordem
+ ^ + x y 2 / - x 4 3 + x y 2 ^ - x 4 3 / +
Qual o valor da expressão
+ - * 2 3 5 / ^2 3 4 ?+ - * 2 3 5 / ^2 3 4
+ - * 2 3 5 / 8 4
+ - * 2 3 5 / 8 4
+ - * 2 3 5 2
3
2
* 2 3 5 2
+ -
6 5 2
+ -
6 5 2
+ -
1
- 6 5
+
+
2
1
+
2
Qual é a forma pós-fixa da expressão
((x+y)^2) + ((x-4)/3) ?Fazemos um caminhamento em pós-ordem
x y + 2 ^ x 4 – 3 / + + x y 2 ^ - x 4 3 / +
- Notação polonesa reversa - Interpretada da esquerda para direita
Qual o valor da expressão em notação
pós-fixa?
7 2 3 * - 4 ^9 3 / +
Encontre a árvore enraizada ordenada que representa a seguinte proposição composta (¬(pΛq))↔(¬p v ¬q) Λ p q ↔ p v ¬ q ¬ Λ p q ¬ p ¬ q ¬ p v ¬ q ¬ Λ p q ¬
Forneça a notação pré-fixa e pós-fixa dessa expressão (¬(pΛq))↔(¬p v ¬q) ↔ p v ¬ q ¬ Λ p q ¬ Pré-fixa: ↔¬Λpqv¬p¬q Pós-fixa: pqΛ¬p¬q¬v↔
A expressões em notação pré-fixa e pós-fixa não são ambíguas. Por esse motivo, são utilizadas em computação. Especialmente na construção de compiladores
Desenhe a árvore enraizada ordenada da seguinte expressão aritmética escrita usando a notação pré-fixa.
+ * + - 5 3 2 1 4
Em seguida, escreva a mesma expressão em notação infixa. - 2 + 1 * 4 + ((((5-3)+2)*1)+4)
Mais aplicações de árvores
• Árvores de decisão• Importantes para extração de regras / aprendizagem de máquina
• Código de prefixo
• Pode ser usado em compactação de arquivos ou criptografia
• Sequências de bits menores para caracteres mais frequentes
• Considere o problema em que letras são codificadas por sequências de bits
• Uma maneira de garan'r que nenhuma sequência de bits corresponde a mais de uma sequência de letras, é escolher códigos de forma que a cadeia de bits para uma letra nunca
Código de preDixo
Exemplo
• Decodificação
• Percorrer a sequência de bits até encontrar uma folha
• Decodificar a sequência:
• 11111011100
Huffman Codes
• U'liza a frequência dos símbolos em uma sequência (probabilidade de ocorrência) e a codifica u'lizando a menor quan'dade possível de bits, dentre todos os códigos de prefixo possíveis
• U'lizado em compressão de textos, imagens e áudio
Huffman Codes
• Algoritmo:• Inicia com uma floresta de árvores com apenas um vér'ce, cada qual representando um símbolo
• Cada vér'ce tem a ele associado um peso (frequência)
• A cada passo, combinar duas árvores contendo o
menor peso total, introduzindo uma nova raiz
• Colocar a árvore com maior peso a esquerda e a de menor peso a direita
• Atribuir à árvore gerada a soma dos pesos das árvores compostas
Huffman Codes
Exemplo
• Codificar os seguintes símbolos de acordo com suas frequências:
• A: 0.08, B: 0.10, C: 0.12, D: 0.15, E: 0.20, F: 0.35. • Qual o número médio de bits usado para codificar
um caractere?
• A grosso modo, precisaríamos de:
• 6 valores è 3 bits (23=8)
• U'lizando o algoritmo de huffman, temos:
• A:111 • B:110 • C:011 • D:010 • E:10 • F:00
• O tamanho médio de bits é:
3*0.08 + 3 .0.10 + 3 .0.12 + 3 .0.15 + 2 . 0.20 + 2 . 0.35 = 2.45.