A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Prova 2008.1 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.

Apresentações semelhantes


Apresentação em tema: "Prova 2008.1 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."— Transcrição da apresentação:

1 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 SE(diferenca <= k) raiz.QE = TRUE; raiz.qtd-desc-QE = direita.qtd + esquerda.qtd + raiz.QE; return Retorno(altura+1, raiz.qtd-desc-QE); } 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; }

5 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 i = 1 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 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)


Carregar ppt "Prova 2008.1 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."

Apresentações semelhantes


Anúncios Google