|
Compare & | key_comp () |
| Retorna una referencia al criterio de comparación.
|
|
Compare & | get_compare () |
|
gsl_rng * | gsl_rng_object () |
| Obtiene un puntero al objeto gsl_rng generador de números aleatorios.
|
|
| Gen_Rand_Tree (unsigned int seed, Compare &&__cmp) |
|
| Gen_Rand_Tree (unsigned int seed, Compare &__cmp) |
|
void | swap (Gen_Rand_Tree &tree) |
|
virtual | ~Gen_Rand_Tree () |
| Destructor (libera generador de números aleatorios.
|
|
Node * | insert (Node *p) |
|
Node * | insert_dup (Node *p) |
|
Node * | random_join_exclusive (Node *tl, Node *tr) |
|
Node * | random_remove (Node *&root, const Key &key) |
|
Node * | remove (const Key &key) |
|
Node * | search (const Key &key) |
| Busca la clave key en el árbol binario de búsqueda aleatorizado.
|
|
Node * | search_or_insert (Node *p) |
|
bool | verify () const |
|
Node *& | getRoot () |
|
Node * | select (const size_t &i) const |
|
size_t | size () const |
| Retorna la cantidad de nodos que contiene el árbol.
|
|
std::pair< int, Node * > | position (const Key &key) |
|
std::pair< int, Node * > | find_position (const Key &key) |
|
bool | split_key (const Key &key, Gen_Rand_Tree &t1, Gen_Rand_Tree &t2) |
|
bool | split_key_dup (const Key &key, Gen_Rand_Tree &t1, Gen_Rand_Tree &t2) |
|
void | split_pos (size_t pos, Gen_Rand_Tree &t1, Gen_Rand_Tree &t2) |
|
void | join (Gen_Rand_Tree &t, Gen_Rand_Tree &dup) |
|
void | join_dup (Gen_Rand_Tree &t) |
|
template<template< typename > class NodeType, typename Key, class Compare>
class Aleph::Gen_Rand_Tree< NodeType, Key, Compare >
Árbol binario de búsqueda aleatorizado genérico.
Un árbol binario de búsqueda aleatorizado es un árbol binario de búsqueda en el cual las operaciones de modificación (inserción y eliminación) se realizan de forma aleatoria. 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.
- Parámetros
-
NodeType | el tipo de nodo que manejará el árbol. Puede ser de tipo RandNode o RandNodeVtl 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. |
template<template< typename > class NodeType, typename Key, class Compare>
Retorna la posición infija (ordenada) de la clave key.
find_position(key) busca en el árbol aleatorio 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_Rand_Tree< RandNode, std::pair< Key, Type >, Dft_Pair_Cmp< Key, Type, Compare > >::find_position().
template<template< typename > class NodeType, typename Key, class Compare>
Eliminación aleatorizada en un árbol binario con rangos.
random_remove(root, key) busca en el árbol binario con rangos la clave key y, en caso de encontrar un nodo que contenga esa clave, efectúa una eliminación aleatorizada a través de Gen_Rand_Tree::random_join_exclusive() de los subárboles del nodo eliminado. El árbol binario de búsqueda resultante siempre es aleatorio en el sentido en que es equivalente al producido por una secuencia de inserción aleatoria.
La rutina puede ser utilizada por cualquier clase de árbol binario de búsqueda con rangos derivada de BinNodeXt. Su presencia dentro de la clase Gen_Rand_Tree obedece a la disponibilidad del generador de números aleatorios.
- Parámetros
-
[in,out] | root | raíz del árbol binario de búsqueda con rangos. |
[in] | key | clave a eliminar. |
- Devuelve
- un puntero al nodo eliminado si la clave key se encuentra en el árbol binario de búsqueda con rangos; Node::NullPtr de lo contrario.
- Ver también
- Gen_Rand_Tree::random_join_exclusive() BinNodeXt
Referenciado por Aleph::Gen_Rand_Tree< RandNode, std::pair< Key, Type >, Dft_Pair_Cmp< Key, Type, Compare > >::random_remove() y Aleph::Gen_Rand_Tree< RandNode, std::pair< Key, Type >, Dft_Pair_Cmp< Key, Type, Compare > >::remove().
template<template< typename > class NodeType, typename Key, class Compare>
Elimina una clave de un árbol binario de búsqueda aleatorizado.
remove(key) busca en el árbol binario de búsqueda aleatorizado la clave key y, en caso de encontrar un nodo que contenga esa clave, efectúa su eliminación aleatorizada.
- Parámetros
-
- Devuelve
- un puntero al nodo eliminado si la clave key se encuentra en el árbol binario de búsqueda con rangos; NULL de lo contrario.
template<template< typename > class NodeType, typename Key, class Compare>
Busca la clave de p en el árbol binario de búsqueda o lo inserta en caso de no encontrarse.
search_or_insert(p) busca en el árbol binario un nodo cuya clave sea KEY(p)
. Si la clave se encuentra, entonces se rerona un puntero al nodo que la alberga. De lo contrario se inserta p en el árbol binario de búsqueda this.
- Parámetros
-
[in] | p | el nodo a buscar o insertar. |
- Devuelve
- puntero a p si la clave de p no está contenida dentro del árbol. De lo contrario, se retorna un puntero al nodo dentro del árbol que contiene a
KEY(p)
.