|
Compare & | key_comp () |
| Retorna una referencia al criterio de comparación.
|
|
Compare & | get_compare () |
|
| Gen_Treap_Rk (unsigned int seed, Compare &__cmp) |
| Constructor; inicializa generador de números aleatorios.
|
|
| Gen_Treap_Rk (unsigned int seed, Compare &&__cmp) |
|
| Gen_Treap_Rk (const Gen_Treap_Rk &) |
|
void | swap (Gen_Treap_Rk &tree) |
|
Node *& | getRoot () |
| Retorna la raíz del treap extendido.
|
|
Node * | search (const Key &key) |
| Busca la clave key en el treap extendido this.
|
|
Node * | search_or_insert (Node *&root, Node *p) |
|
Node * | insert_dup (Node *&root, Node *p) |
|
Node * | insert (Node *p) |
|
Node * | insert_dup (Node *p) |
|
Node * | search_or_insert (Node *p) |
|
bool | verify () |
|
Node * | remove (const Key &key) |
|
Node * | remove (const size_t &beg, const size_t &end) |
|
Node * | select (const size_t &i) |
|
size_t | size () const |
| Retorna la cantidad de nodos que contiene el treap.
|
|
bool | is_empty () const |
| Retorna true si el treap está vacío.
|
|
std::pair< int, Node * > | position (const Key &key) |
|
std::pair< int, Node * > | find_position (const Key &key) |
|
bool | split_key (const Key &key, Gen_Treap_Rk &t1, Gen_Treap_Rk &t2) |
|
bool | split_key_dup (const Key &key, Gen_Treap_Rk &t1, Gen_Treap_Rk &t2) |
|
void | split_pos (size_t pos, Gen_Treap_Rk &t1, Gen_Treap_Rk &t2) |
|
void | join (Gen_Treap_Rk &t, Gen_Treap_Rk &dup) |
|
void | join_dup (Gen_Treap_Rk &t) |
|
template<template< class > class NodeType, class Key, class Compare>
class Aleph::Gen_Treap_Rk< NodeType, Key, Compare >
Árbol binario extendido de búsqueda aleatorizado genérico de tipo Treap.
Un treap extendido es una clase especial de árbol binario de búsqueda en el cual sus operaciones de modificación son aleatorizadas. Consecuentemente, todas las operaciones sobre esta clase de árbol binario son , independientemente de cualquier sesgo que exista acerca del orden de inserción o eliminación de claves.
El carácter "extendido" facilita las siguientes bondades sobre el conjunto de elementos:
- Inserción, búsqueda y eliminación de una clave.
- Acceso al i-ésimo elemento del recorrido infijo.
- Conocimiento de la posición infija dada una clave.
- Unión y partición según clave o posición infija.
Todas estas operaciones se realizan en tiempo esperado de .
El treap es probablemente la clase árbol binario de búsqueda que preserva un equilibrio probabilístico con mejor desempeño. Estudios empíricos sugieren que éste es el tipo de árbol binario de búsqueda más rápido.
En estudios de rendimiento, la clase estándar set<T> y map<T> implantadas mediante el tipo TreapRk demuestran mayor rapidez que las implantaciones gnu y Boost.
- Parámetros
-
NodeType | el tipo de nodo que manejará el árbol. Puede ser de tipo TreapNode o TreapNodeVtl según se desee o no tener destructores virtuales. |
Key | el tipo de clave a guardar en los nodos. |
Compare | el criterio de comparación entre las claves de los nodos. |
- Ver también
- Treap Treap_Vtl Treap_Rk Treap_Rk_Vtl set multiset map multimap
template<template< class > class NodeType, class Key, class Compare>
Retorna la posición infija (ordenada) de la clave key.
find_position(key) busca en el treap extendido la clave key (lo cual toma tiempo ) y retorna la posición infija del nodo que contiene la clave junto con el nodo. En caso de que la clave no esté en el árbol, position(key) retorna la posición donde debería estar si key perteneciese al árbol.
El valor de retorno es un pair<int,Node*>. El campo first es la posición infija y second el nodo.
Si key no se encuentra en el árbol, entonces se pueden distinguir tres casos:
- Si key es menor que la mínima clave del árbol, entonces first -1 y second es el nodo contentivo de la clave mínima.
- Si key es mayor que la máxima clave del árbol, entonces first es COUNT(r) (número de nodos del árbol) y second es el nodo contentivo de la clave máxima.
- En cualquier otro caso, first es la posición que tendría la clave key en árbol y second nodo p es una clave inmediatamente adyancente a key. Note que second puede tener una clave menor o mayor, pero se garantiza que es inmediatamente continua a key.
- Parámetros
-
[in] | key | clave a buscar y a determinar posición infija. |
- Devuelve
- un par conteniendo la posición infija de la clave key dentro del conjunto ordenado junto con el nodo si la clave se encuentra en el mapeo; de lo contrarion, se retorna -1 y el nodo es indeterminado.
Referenciado por Aleph::Gen_Treap_Rk< Treap_Rk_Node, Key, Compare >::find_position().
template<template< class > class NodeType, class Key, class Compare>
Elimina la clave key del treap extendido this.
remove(key) busca la clave key en el treap extendido this y, de encontrarse la clave, elimina el nodo del treap.
- Parámetros
-
- Devuelve
- puntero al nodo recién eliminado si la clave se encuentra en el treap; NULL de lo contrario.
template<template< class > class NodeType, class Key, class Compare>
Elimina del treap extendido todas las claves comprendidas entre la posición infija beg y end.
rmeove(beg,end) elimina del treap extendido this todas las claves entre las posiciones infijas beg y end. Se retorna un arbol que contiene las claves borradas.
- Parámetros
-
[in] | beg | posición infija donde comienza el rango a ser eliminado. |
[in] | end | posición infija donde termina el rango a ser eliminado. |
- Devuelve
- un puntero a la raíz del treap extendido que contiene todas las claves eliminadas.
- Excepciones
-
range_error | si el rango de posiciones infijas es inválido. |
template<template< class > class NodeType, class Key, class Compare>
Busca o inserta la clave KEY(p).
search_or_insert() busca en el treap un nodo que contenga la clave KEY(p). Si tal nodo se encuentra, entonces éste se retorna; de lo contrario, se inserta p y se retorna como resultado.
- Parámetros
-
[in] | p | nodo a eventualmente insertar. |
- Devuelve
- si KEY(p) se encuentra en el árbol, entonces se retorna un puntero al nodo contentivo de KEY(p). De lo contrario, se inserta p en el treap y se retorna p.