250 likes | 448 Views
Árvore Binária de Busca. seja uma árvore binária de busca T , para um conjunto de chaves S= { S 1 , S 2 , ....S n } qual o número total de comparações efetuadas para se localizar uma chave em S ? para buscar uma chave S k , o algoritmo percorre o caminho da raiz até S k
E N D
Árvore Binária de Busca • seja uma árvore binária de busca T, para um conjunto de chaves S= { S1, S2, ....Sn} • qual o número total de comparações efetuadas para se localizar uma chave em S? • para buscar uma chave Sk, o algoritmo percorre o caminho da raiz até Sk • número de comparações nível de Sk • seja nivel (Sk) = Lk e seja nivel(raiz) = 1 1
Árvore Binária de Busca • o número total de comparações necessárias para o acesso a todas as chaves de S é : 1kn Lk • definição: • comprimento de caminho interno de T I(T) = 1kn Lk 2
Árvore Binária de Busca • o total de comparações em buscas realizadas com sucesso: • O comprimento de caminho interno • buscas sem sucesso • comparações também são realizadas • termina obrigatoriamente em uma subárvore vazia 3
Árvore Binária de Busca • As buscas sempre irão até um nó interno que fica em um nível imediatamente superior a um nó externo • Seja L’k o nível do nó externo • As buscas cessam no nível L’k - 1 • E(T) - Comprimento de Caminho Externo 1kn(L’k - 1) 4
Árvore Binária de Busca • I(T) e E(T) mostram a qualidade da árvore no problema de busca • Os valores I(T)/n e E(T)/(n+1) representam os números médios de comparações efetuadas em operações de busca com e sem sucesso, respectivamente. 5
Árvore Binária de Busca • I(T) = 19 • em média I(T)/n = 2.71 • E(T) = 26 • em média E(T)/(n+1) = 3.25 6
Árvore Binária de Busca • Relação entre os comprimentos de caminho interno e externo E(T) = I(T) + n • Se n = 1 , I(T) = 1 e E(T) = 1 + 1 = 2 • Suponha verdadeiro para ávores com n-1 nós • Seja T com n nós internos ( n+1 nós externos ) • T’ é obtida de T retirando-se um nó v folha substitui-se v e dois nós externos em T por um nó externo • T’ tem n-1 nós internos e n nós externos 7
Árvore Binária de Busca • E(T’) = I(T’) + n-1 mas • I(T’) = I(T) - Lv • E(T’) = E(T) - Lv - Lv + Lv -1 então • E(T) = I(T) + n 8
ABB com frequências diferenciadas • Seja S um conjunto de chaves S = {s1, s2, ..., sn } • Associado a sk • nível lk • frequência de acesso fk • Mas na busca: • intervalos R = {R0,R1, R2, ..., Rn } 9
ABB com frequências diferenciadas s5 s7 s3 s2 s4 s6 s8 R2 R3 R4 R6 R8 R5 R7 s1 R1 R0 10
ABB com frequências diferenciadas • Associado a Rk • nível l´k • frequência de acesso f´k 11
ABB com frequências diferenciadas • Busca com sucesso a sk: • lk comparações • total de comparações de todo o processo considerando a frequência de acesso da chave? • e considerando as buscas com sucesso de todas as chaves? 12
ABB com frequências diferenciadas • Busca sem sucesso – atinge um dado Rk: • l´k - 1 comparações. Por que? • total de comparações de todo o processo considerando a frequência de acesso da chave? • e considerando as buscas com sucesso de todas as chaves? 13
ABB com frequências diferenciadas • Custo da ABB T(n) com frequências de acesso: comprimento do caminho interno ponderado + comprimento do caminho externo ponderado C(T) = fk lk + f´k (l´k -1) 14
ABB ponderada ótima • A ABB ótima – aquela com o custo mínimo • para achá-la: programação dinâmica sk < sk > sk T´ T” R0 ... Rk-1 Rk ... Rn 15
ABB ponderada ótima • Lema: As subárvores de uma árvore binária ótima também são ótimas • prova? • Se T é ótima, T´e T” também são, conhecendo a raiz sk • como conhecer sk ? • como determinar T´e T” ? 16
ABB ponderada ótima • tentar todo sk e para cada um, tentar T´e T” ? • fazer recursivamente para cada subárvore até chegar ao caso trivial • caso base: subárvore vazia – conjunto de chaves vazia 17
ABB ponderada ótima • Seja T(i,j) a árvore ótima com: • chaves { si+1, ..., sj} • intervalos { Ri, ..., Rj} • Seja F(i,k) = fk + f´k 18
ABB ponderada ótima • Lema: Seja T(i,j) a ABB ótima de raíz sk correspondentes as chaves { si+1, ..., sj}. Então: • c(T(i,j)) = c(T(i,k-1)) + (T(k,j)) + F(i,j) • Prova • utilizar a função de custo ótima e separar as frequencias, considerando a raiz sk 19
Construção da ABB ponderada ótima • Calcular c(T(0,n)) recursivamente • base da recursão: c(T(i,i)) = 0 • árvore vazia • mas..... • repetição de cálculos • muitas subárvores a serem testadas • exponencial? 20
Construção da ABB ponderada ótima • Solução: • utilização de tabelas, para calcular o custo de cada subárvore somente uma vez • cálculo de forma não recursiva • das árvores menores para maiores • para cada subárvore T(i,j), testa-se todas as suas chaves { si+1, ..., sj} para ser candidata a raiz • escolha: a de menor custo 21
Construção da ABB ponderada ótima • ABB_ótima () { for j = 0, ..., n {c[j,j] = 0; F[j,j] = f´j;} for d = 1, ..., n • for i = 0, ..., n – d { • j = i+d; • F[i,j] = F[i,j-1] + fj + f´j; • c[i,j] = min { c [i,k-1] + c [k, j]} + F[i,j]; • i<k j } • } 22
Construção da ABB ponderada ótima • Entrada 23