Carregar apresentação
A apresentação está carregando. Por favor, espere
PublicouYago Merlos Alterado mais de 9 anos atrás
1
1. Se este nó é raiz de uma árvore QuasiEquilibrada de ordem k, e
Prova Definição: Uma árvore binária é dita QuasiEquilibrada de ordem k se o módulo da diferença entre a altura da sua sub-árvore esquerda e a altura da sua sub-árvore direita for menor ou igual k, onde k é um parâmetro dado. (Altura de uma árvore é o número de arestas no maior caminho da raiz até uma folha qualquer desta árvore.) Escreva em linguagem estruturada um algoritmo recursivo eficiente para identificar, para cada nó v de uma árvore dada: 1. Se este nó é raiz de uma árvore QuasiEquilibrada de ordem k, e 2. Quantas sub-árvores existem na árvore de raiz v que são QuasiEquilibradas, incluindo a própria árvore de raiz v, se for o caso.
2
Esta informação deve ser colocada em dois campos chamados: QE (de tipo Booleano) e qtd-desc-QE (de tipo inteiro), dentro da estrutura do nó. ENTRADA: Apontador para a raiz r de uma árvore binária. SAÍDA: A informação deixada no nós após cada visita. DICA IMPORTANTE: Cada aresta só pode ser percorrida de cima para baixo uma única vez. Note que esta informação usa a altura da árvore, deve fluir no sentido bottom-up. Cada nó v no retorno da chamada deve devolver a seu pai duas informações: Qual a sua altura da árvore da qual v é raiz, e Quantos nós na árvore de raiz v, incluindo o próprio v, são raízes de sub-árvores QuasiEquilibradas.
3
Class Retorno{ int altura;
int qtd; Retorno(int a, int q){ altura = a, qtd = q} } Retorno metodo(No raiz, int k){ SE(raiz == null) return Retorno(0, 0); Retorno esquerda, direita; esquerda = metodo(raiz.esquerda, k); direita = metodo(raiz.direita, k); raiz.QE = FALSE;
4
int altura, diferenca; SE(direita.altura > esquerda.altura){ diferenca = direita.altura – esquerda.altura; altura = direita.altura; } SENAO{ diferenca = esquerda.altura – direita.altura; altura = esquerda.altura; } SE(diferenca <= k) raiz.QE = TRUE; raiz.qtd-desc-QE = direita.qtd + esquerda.qtd + raiz.QE; return Retorno(altura+1, raiz.qtd-desc-QE); }
5
2007.2 Questão 6: Mostre as configurações da estrutura de dados após a execução de cada uma das operações abaixo, e mostre as respostas retornadas pelas operações de Find-Set. Use representação por lista ligada, com as heurísticas União por Ranking e Compressão de Caminhos. para i = 1 até 16 faça Make-Set (i) i = 1 enquanto i < 16 faça Union(xi, xi+1) i = i + 2 enquanto i < 13 faça Union(xi, xi + 2) i = i + 4 Union(x1, x5) Union(x11, x13) Union (x1, x10) Find-set(x2) Find-Set(x9)
6
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 i = 1 enquanto i < 16 faça Union(xi, xi+1) i = i + 2 i = 1 enquanto i < 13 faça Union(xi, xi + 2) i = i + 4
7
Union(x1, x5)
8
Union(x11, x13)
9
Union (x1, x10)
10
Find-set(x2) Find-Set(x9)
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.