Descrição Detalhada
template<class T>
class persistence::red_black_tree::RedBlackTree< T >
Árvore rubro-negra (ARN) parcialmente persistente.
Feita utilizando o método de Node copying, por Driscoll et. al. [1] , para tornar a estrutura persistente e baseado na implementação (não persistente) de Cormen et. al. CormenRedBlack .
O tipo T deve ser comparável usando o operador <.
Ao criar a árvore, esta tem versão 0 e está vazia. Cada operação de modificação (Insert, Remove) modifica a versão mais nova da árvore e cria uma nova versão. As operações de acesso (Find) podem ser realizadas qualquer versão já criada da ARN.
Biblioteca Pública | |
Estas funções podem ser usadas mesmo sem saber a estrutura por trás, como em um set, que é implementado usando uma ARN mas cujas funções não dependem disso e podem ser implementadas com outras estruturas. As funções servem como uma ED que armazena um conjunto de elementos, parcialmente persistente, com inserção e remoção em tempo logaritmico. | |
| const T * | Find (const T &x, int version) |
| Busca por um valor em dada versão da ARN. Mais... | |
| void | Insert (const T &value) |
| Inserção de valor na ARN. Mais... | |
| const T * | Remove (const T &value) |
| Remoção de valor na ARN. Mais... | |
| int | current () |
| Versão atual da ARN. Mais... | |
Campos, Construção e Acesso | |
| std::vector< Node< T > * > | roots |
| Raízes de todas as versões. Mais... | |
| RedBlackTree () | |
| Construtor. Mais... | |
| ~RedBlackTree () | |
| Destrutor. Mais... | |
| Node< T > * | Child (Node< T > *u, bool side, int version) const |
| Retorna um filho de um nó em dada versão. Mais... | |
Funções Auxiliares de Modificação | |
As seguintes funções são auxiliares e usadas internamente durante operações de modificação. Estas funções sempre recebem um nó Todas as funções terão então a pre-condição: "u ou sua cópia são ativos". Como sempre queremos modificar ou acessar a versão mais nova do nó | |
| Node< T > * | Active (Node< T > *u) |
| Versão ativa de um nó. Mais... | |
| Node< T > * | Child (Node< T > *u, bool side) |
| Retorna um filho de um nó na versão atual. Mais... | |
| void | Modify (Node< T > *u, bool side, Node< T > *v) |
| Modificação de filho de um nó. Mais... | |
| Node< T > * | Copy (Node< T > *u) |
| Copia um nó. Mais... | |
| void | Rotate (Node< T > *u, bool side) |
| Rotaciona um nó. Mais... | |
| void | Transplant (Node< T > *u, Node< T > *x) |
| Subsitui um nó. Mais... | |
| Node< T > * | MinElement (Node< T > *u) |
| Menor elemento em uma subárvore na versão atual. Mais... | |
| void | AddBlack (Node< T > *y, bool side) |
| Arruma violações causadas por remoção. Mais... | |
Construtores & Destrutores
| persistence::red_black_tree::RedBlackTree< T >::RedBlackTree | ( | ) |
Construtor.
Constrói a estrutura com apenas uma versão 0 vazia.
| persistence::red_black_tree::RedBlackTree< T >::~RedBlackTree | ( | ) |
Destrutor.
O destrutor apaga também todos os nós criados pela estrutura.
Métodos
| Node<T>* persistence::red_black_tree::RedBlackTree< T >::Active | ( | Node< T > * | u | ) |
Versão ativa de um nó.
- Parâmetros
-
u Um nó da ARN.
- Retorna
- Versão ativa de
u.
- Pré-Condição
uou sua cópia são ativos.
| void persistence::red_black_tree::RedBlackTree< T >::AddBlack | ( | Node< T > * | y, |
| bool | side | ||
| ) |
Arruma violações causadas por remoção.
- Parâmetros
-
y,side Nó da ARN e lado tal que os caminhos até links nulos que passam por yem direção àsidetem um nó preto a menos que os outros.
- Pré-Condição
you sua cópia são ativos.
- Aviso
- A função pode causar a cópia ou modificação de
ye outros nós.
| Node<T>* persistence::red_black_tree::RedBlackTree< T >::Child | ( | Node< T > * | u, |
| bool | side, | ||
| int | version | ||
| ) | const |
Retorna um filho de um nó em dada versão.
- Parâmetros
-
u Um nó da ARN cuja versão inclui version, ou seja,version∈[u.version, u.copy.version - 1].side Lado do filho desejado. version Versão desejada.
- Retorna
- O filho
sidedeuna versãoversion.
- Anotações
- Essa função é utilizada em operações de acesso.
| Node<T>* persistence::red_black_tree::RedBlackTree< T >::Child | ( | Node< T > * | u, |
| bool | side | ||
| ) |
Retorna um filho de um nó na versão atual.
- Parâmetros
-
u Um nó da ARN. side Lado desejado do filho.
- Pré-Condição
uou sua cópia são ativos.
- Veja também
- Child
| Node<T>* persistence::red_black_tree::RedBlackTree< T >::Copy | ( | Node< T > * | u | ) |
Copia um nó.
Cria uma cópia de u com as versões mais atuais de seus campos. Usado por Modify.
- Parâmetros
-
u Um nó da ARN.
- Retorna
- Uma cópia de
u.
- Pré-Condição
udeve ser um nó ativo.
- Aviso
- Esta modificação pode causar a cópia ou modificação dos ancestrais de
u.
|
inline |
Versão atual da ARN.
- Retorna
- Quantas operações de modificação já foram realizadas na estrutura.
| const T* persistence::red_black_tree::RedBlackTree< T >::Find | ( | const T & | x, |
| int | version | ||
| ) |
Busca por um valor em dada versão da ARN.
- Parâmetros
-
x Valor a ser buscado. version Versão da árvore na qual o valor deve ser buscado.
- Retorna
- Um ponteiro para o valor de algum nó com valor
valna árvore, ou nulo se tal nó não existir.
| void persistence::red_black_tree::RedBlackTree< T >::Insert | ( | const T & | value | ) |
Inserção de valor na ARN.
Cria um novo nó com valor val e adiciona este nó à versão mais recente da árvore.
- Parâmetros
-
value Valor a ser adicionado.
| Node<T>* persistence::red_black_tree::RedBlackTree< T >::MinElement | ( | Node< T > * | u | ) |
Menor elemento em uma subárvore na versão atual.
- Parâmetros
-
u Um nó da ARN.
- Retorna
- Menor elemento na subárvore de u, na versão atual.
- Pré-Condição
uou sua cópia são ativos.
| void persistence::red_black_tree::RedBlackTree< T >::Modify | ( | Node< T > * | u, |
| bool | side, | ||
| Node< T > * | v | ||
| ) |
Modificação de filho de um nó.
Modifica o lado side de u para apontar para v.
- Parâmetros
-
u Um nó da ARN. side Lado do nó a ser modificado. v Novo valor para ponteiro.
- Pré-Condição
uou sua cópia são ativos.-
vou sua cópia são ativos.
- Anotações
- Não é possível inferir
sidea partir deuevapenas comparando seus valores, já quepodeser nulo ou a árvore pode ter muitos nós com o mesmo valor.
- Aviso
- Esta modificação pode causar a cópia ou modificação de
ue seus ancestrais.
| const T* persistence::red_black_tree::RedBlackTree< T >::Remove | ( | const T & | value | ) |
Remoção de valor na ARN.
Busca por algum nó com valor igual val e remove este nó da versão mais recente da árvore. Retorna um ponteiro para o valor do nó removido, ou nulo se não existe tal nó.
- Parâmetros
-
value Valor a ser removido.
| void persistence::red_black_tree::RedBlackTree< T >::Rotate | ( | Node< T > * | u, |
| bool | side | ||
| ) |
Rotaciona um nó.
Rotaciona u de forma que seu filho de lado side tome seu lugar, enquanto mantém as propriedades de uma árvore binária.
- Parâmetros
-
u Um nó da ARN. side Lado da rotação.
- Pré-Condição
uou sua cópia são ativos.-
udeve ter um filho de ladosidena versão mais atual.
- Aviso
- Esta rotação pode causar a cópia ou modificação de
u, seu filho de ladosidee de seus ancestrais. - A rotação não mantém as propriedades rubro-negras.
| void persistence::red_black_tree::RedBlackTree< T >::Transplant | ( | Node< T > * | u, |
| Node< T > * | x | ||
| ) |
Subsitui um nó.
A subárvore de u é substituida pela subárvore de x, isto é, x é desconectado de seu pai, se existir, e então troca-se o filho do pai de u de u para x.
- Parâmetros
-
u,x Nós da ARN.
- Pré-Condição
uou sua cópia são ativos.-
xou sua cópia são ativos.
- Aviso
- A substituição pode causar a cópia ou modificação de
u,x, e seus ancestrais.
Campos
| std::vector<Node<T>*> persistence::red_black_tree::RedBlackTree< T >::roots |
Raízes de todas as versões.
roots[i] é a raiz da ARN em sua versão i. O vetor é inicializado com apenas um elemento com valor nulo, pois a estrutura começa em sua versão 0, vazia.
A documentação para esta classe foi gerada a partir do seguinte arquivo:
- /home/travis/build/yancouto/mestrado/source/persistence/RedBlackTree.hpp

1.8.6