1. Qual a relação entre as arvores AVL e as arvores rubro-negras?
Ambas são um tipo de árvore binária balanceada, a diferença é que a árvore AVL usa a altura de suas sub-árvores, e a árvore rubro-negra utiliza um esquema de coloração de nós para manter o balanceamento da árvore.
2. Escreva a declaracao do registro, em C, para composicao de arvores rubro-negras?
struct no{
struct no{
int info;
struct no *esq;
struct no *dir;
int cor;
};
Grupo 7 – Iury Patrick Góis Santos, Letícia Aragão de Freitas, Thiago Santos França, Vitor Neves Varjão:
3. Qual o custo das operações sobre arvores rubro-negras? (a) em inserções (b) em remoções (c) em consulta especifica (d) em consulta total.
O custo de todas as operações são Log(n), exceto a consulta total que é linear o(n)
4. Que critério usar para decidir se aplicar AVL ou rubro-negra numa aplicação? Justifique.
Se o objetivo for armazenamento de dados usa-se rubro negra, se for busca, usa-se AVL.
Grupo 8 – Glenio Andrade, Cristiano Lima, João Victor Andrade Rodrigues, Brenda Martins Barros de Almeida.
5. Por que usar ponteiro para ponteiro para manter a raiz da arvore rubro-negra? Justifique.
Grupo 9 – Mateus Cardoso da Silva, Natanael Oliveira Gois, Osni Mario Vieira Araujo:
Grupo 8 – Glenio Andrade, Cristiano Lima, João Victor Andrade Rodrigues, Brenda Martins Barros de Almeida.
5. Por que usar ponteiro para ponteiro para manter a raiz da arvore rubro-negra? Justifique.
O uso de um ponteiro para ponteiro é para o caso em que a raiz necessitar ser alterada, como nos processos de rebalanceamento.
6. Qual a definição de arvore rubro-negra?
É uma árvore binária de busca que contém um bit adicional em sua estrutura, o que indica a cor.
As propriedades são:
As propriedades são:
- Todo nó da árvore é vermelho ou preto;
- A raiz é preta;
- Toda folha (nil) é preta;
- Se um nó é vermelho, então ambos os filhos são pretos;
- Para todo nó, todos os caminhos do nó até as folhas descendentes contêm o mesmo número de nós pretos.
Grupo 9 – Mateus Cardoso da Silva, Natanael Oliveira Gois, Osni Mario Vieira Araujo:
7. Na implementação de arvore rubro-negra, por que definir a cor das folhas (null), ou seja, apontadores aterrados.
Devido a todo nó folha (null) ser preto, sendo esta terceira propriedade da árvore rubro negra que satisfaz e todos os caminhos a partir da raiz até qualquer folha passa pelo mesmo número de nós pretos.
8. A melhor forma de se implementar o campo cor na implementação dos nos de composição de arvores rubro-negras e por meio do tipo boolean? Justifique.
Sim, pois a função de mudança de cor trabalha com inversões constantemente, com uso de um tipo boolean esta operação de inversão torna-se bem mais fácil.
Grupo 10 – Carlos Gabriel Santos de Melo, Wendel Lima Oliveira, Dayvid Wesley Lopes dos Santos, Lucas Santana de Oliveira.
Sim, pois a função de mudança de cor trabalha com inversões constantemente, com uso de um tipo boolean esta operação de inversão torna-se bem mais fácil.
Grupo 10 – Carlos Gabriel Santos de Melo, Wendel Lima Oliveira, Dayvid Wesley Lopes dos Santos, Lucas Santana de Oliveira.
9. Apresentar a construção da arvore rubro-negra composta pelos itens 13 – 23 – 35 – 43 – 52 – 63 – 99.
10. A arvore dada eh rubro-negra? Justifique sua resposta.
Não pois o nó s, filho esquerdo da raiz é preto, mas deveria ser vermelho.
CORREÇÃO:
1. Questão 1 - Correta e completa.
2. Questão 2 - Correta e completa.
3. Questão 3 - Contém erro. Apresentou a notação de forma incorreta (usou Log(n) quando deveria ser O(log n)), mas considerando como um erro ao digitar, a resposta foi correta.
4. Questão 4 - Correta mas poderia ser mais detalhada. Poderia ter explicado o porque da Rubro negra ser mais eficiente em inserção/remoção e a AVL mais eficiente em consultas.
5. Questão 5 - Correta mas poderia ser mais detalhada. Poderia ter dito o porque usar o ponteiro para ponteiro para essa alteração da raiz.
6. Questão 6 - Correta e completa.
7. Questão 7 - incorreta. A resposta foi confusa e usou um dos critérios para justificar a folha (null) ser preta, mas a árvore pode ser abstraída de forma a desconsiderar os ponteiros aterrados e sendo assim a resposta não justifica o motivo.
8. Questão 8 - Correta e completa. Considerando uma linguagem que tenha o tipo booleano.
9. Questão 9 - Incorreta. Já na raiz quebra o critério que diz que "para todo nó, todos os caminhos do nó até as folhas descendentes contêm o mesmo número de nós pretos".
10. Questão 10 - Incorreta. Tornando o filho esquerdo da raiz um nó vermelho (como sugerido) o critério de que todo caminho de um nó até uma folha deve ter o mesmo número de nós pretos, seria quebrado.

Já que não serão realizadas operações aritméticas com a cor há economia de tamanho caso o tipo usado para este dado seja char, em vez de int.
ResponderExcluirA aplicação do tipo boolean em C é basicamente duas opções de int "0" ou "1" sendo assim, acredito que haja pouca diferença se dermos algum define para limitar as cores em vermelho caso 1 e preto caso 0, mas como Reinaldo comentou, o tipo char se mostra a melhor opção caso não ajam operações aritméticas com a cor.
ResponderExcluirAchei a árvore rubro-negra uma estrutura melhor de se trabalhar no quesito complexidade, na AVL a todo momento
ResponderExcluiro programador tem que se preocupar com cálculo de balanços por nó e balanço geral da árvore, já na rubro-negra aparenta ser
algo mais direto com a atribuição das cores vermelho e preto.
Sobre a questão 8:
ResponderExcluirDe fato, como já comentado, em C não existe um tipo primitivo boolean. Mas levando em conta que na questão 8 nenhuma linguagem específica é citada, creio que a maior vantagem de se usar boolean não está nas inversões, mas sim no espaço utilizado, uma vez que um boolean ocupa apenas 1 bit.
Realmente parece ser mais simples de se trabalhar do que as árvores AVL. Mostra-se uma boa alternativa para situações em que a prioridade é o armazenamento de dados. O fato de fazermos no máximo 3 rotações para balancear a árvore é uma vantagem.
ResponderExcluirApesar dessa maior facilidade em haver a rotação, também é preciso se atentar ao fato de que pode ser necessário mudar a cor dos nós durante o processo para manter a árvore dentro das propriedades (pode acontecer, por exemplo, de numa rotação o nó vermelho ficar com um filho também vermelho, tendo assim que mudar suas cores)
ExcluirÉ interessante ressaltar que apesar de possuir bons "pior-caso", as implementações e a compreensão de como funciona uma árvore rubro-loira não são tarefas triviais.
ResponderExcluirPensando nisso, existe uma variante desta árvore que é a "árvore rubro-negra caída para esquerda". Esta variante possui as mesmas complexidades e obedece as mesmas regras da árvore rubro-negra padrão, com a regra adicional de que todo nó vermelho é sempre filho esquerdo de seu pai. Esse aspecto desta árvore torna a implementação das funções de remoção e inserção mais fácil.
A altura máxima da arvore é dada pela operação:
ResponderExcluirHmax= máximo de nós pretos + máximo de nós vermelhos
=Log2 (n+1)+ Log2 (n+1)
= 2 Log2 (n+1)
O que mostra que a altura máxima é Olog(n) em que n é o número total de nós.(Obs: n é determinado pela operação n=2^(k+1)-1 sendo (k+1) a profundidade do nó da árvore que se trata do número de ancestrais do nó pai que o nó possui).
A arvore AVL por serem "mais equilibradas" podemos afirma que ela é mais rápida para busca , já arvore rubro-negra é mais rápida para inserção e remoção por que precisaria fazer no máximo 3 rotações , enquanto a AVL faria O(Log n).
ResponderExcluirEste comentário foi removido pelo autor.
ResponderExcluirEm relação as propriedades descritas na questão 6, podemos perceber por que elas garantem que a árvore seja balanceada, basta observar que nenhum caminho pode ter dois nós vermelhos sucessivos, devido à propriedade 4. O caminho mais curto possível tem todos os nós pretos, e o caminho mais longo possível alterna entre nós vermelhos e pretos. Desde que todos os caminhos máximos tenham o mesmo número de nós pretos, pela propriedade 5, isto mostra que nenhum caminho é mais do que duas vezes mais longo que qualquer outro caminho.
ResponderExcluirAlém dos ponteiros tornarem menos complexos os processos de balanceamento, eles permitem que a árvore, independente de ser rubro negra ou AVL não tenham limite teórico de tamanho, o que torna, principalmente a rubro negra, ideal para inserções, uma boa estrutura de dados.
ResponderExcluir