18 Arboles Como Estructura De Busqueda
-
Upload
uvm -
Category
Technology
-
view
3.696 -
download
1
Transcript of 18 Arboles Como Estructura De Busqueda
Mtl Lourdes CahuichMtl Lourdes Cahuich 22
Uso de árboles en búsquedasUso de árboles en búsquedas
�� Los árboles binarios de búsqueda son otro Los árboles binarios de búsqueda son otro tipo de árbol binario, caracterizados por la tipo de árbol binario, caracterizados por la ordenación de elementos dentro del árbol. ordenación de elementos dentro del árbol.
Mtl Lourdes CahuichMtl Lourdes Cahuich 33
Uso de árboles en búsquedasUso de árboles en búsquedas
�� Los árboles binarios de búsqueda Los árboles binarios de búsqueda mantienen elementos en un orden mantienen elementos en un orden ordenado.ordenado.
�� Debido a esto, los árboles binarios de Debido a esto, los árboles binarios de búsqueda, soportan de manera efectiva la búsqueda, soportan de manera efectiva la búsqueda de elementos individualesbúsqueda de elementos individuales
Mtl Lourdes CahuichMtl Lourdes Cahuich 44
Uso de árboles en búsquedasUso de árboles en búsquedas
�� Los árboles binarios de búsqueda Los árboles binarios de búsqueda mantienen los elementos en orden.mantienen los elementos en orden.
�� Todos los elementos menores que la Todos los elementos menores que la raízraíz son almacenados en el árbol son almacenados en el árbol enraizado en el enraizado en el hijo izquierdohijo izquierdo de la de la raízraíz . .
Mtl Lourdes CahuichMtl Lourdes Cahuich 55
Uso de árboles en búsquedasUso de árboles en búsquedas
�� Todos los elementos mayores que la Todos los elementos mayores que la raízraíz son almacenados en el árbol son almacenados en el árbol enraizado en el enraizado en el hijo derechohijo derecho de la de la raíz. raíz.
�� Este principio se aplica de forma Este principio se aplica de forma recursivarecursivapara todos los nodos del árbol. para todos los nodos del árbol.
Mtl Lourdes CahuichMtl Lourdes Cahuich 66
Uso de árboles en búsquedasUso de árboles en búsquedas
�� Para cualquier Para cualquier nodonodo en un árbol binario en un árbol binario de búsqueda, todos los elementos en el de búsqueda, todos los elementos en el subárbol del subárbol del hijo izquierdohijo izquierdo , son , son menores que el elemento en el menores que el elemento en el nodonodo ..
�� También, todos los elementos en el También, todos los elementos en el subárbol en el subárbol en el hijo derechohijo derecho son son mayores que el elemento en el mayores que el elemento en el nodonodo
Mtl Lourdes CahuichMtl Lourdes Cahuich 88
Uso de árboles en búsquedasUso de árboles en búsquedas
�� No todos los árboles binarios de búsqueda No todos los árboles binarios de búsqueda tienen todos los nodos hoja en el mismo tienen todos los nodos hoja en el mismo nivel dentro del árbol.nivel dentro del árbol.
�� Los árboles binarios de búsqueda pueden Los árboles binarios de búsqueda pueden estar estar desequilibradosdesequilibrados. .
Mtl Lourdes CahuichMtl Lourdes Cahuich 99
Variaciones en los árbolesVariaciones en los árboles
�� Un árbol desequilibrado es un árbol que Un árbol desequilibrado es un árbol que tiene subárboles izquierdos y derechos, tiene subárboles izquierdos y derechos, cuya altura difiere por más de un nivel. cuya altura difiere por más de un nivel.
Mtl Lourdes CahuichMtl Lourdes Cahuich 1010
Variaciones en los árbolesVariaciones en los árboles
�� Los árboles binarios de búsqueda se Los árboles binarios de búsqueda se vuelven desequilibrados cuando los vuelven desequilibrados cuando los elementos de tamaño creciente o elementos de tamaño creciente o decreciente se agregan continuamente a decreciente se agregan continuamente a la estructura. la estructura.
Mtl Lourdes CahuichMtl Lourdes Cahuich 1111
Variaciones en los árbolesVariaciones en los árboles
�� El desempeño de un árbol binario de El desempeño de un árbol binario de búsqueda se aproxima al del tiempo lineal búsqueda se aproxima al del tiempo lineal cuando la estructura llega a ser muy cuando la estructura llega a ser muy desequilibradadesequilibrada
Mtl Lourdes CahuichMtl Lourdes Cahuich 1313
Variaciones en los árbolesVariaciones en los árboles
�� Un Un nodonodo en un árbol binario de búsqueda en un árbol binario de búsqueda puede contener solamente un puede contener solamente un hijohijo ..
�� Un árbol binario de búsqueda que Un árbol binario de búsqueda que contiene uno o más de estos tipos de contiene uno o más de estos tipos de nodos, es un árbol nodos, es un árbol incompletoincompleto
Mtl Lourdes CahuichMtl Lourdes Cahuich 1515
Uso de Uso de Árboles Binarios de Árboles Binarios de BúsquedaBúsqueda
�� Un árbol binario de búsqueda es una Un árbol binario de búsqueda es una estructura de datos basada en un árbol estructura de datos basada en un árbol que mantiene una colección ordenada de que mantiene una colección ordenada de elementos. elementos.
Mtl Lourdes CahuichMtl Lourdes Cahuich 1616
Uso de Uso de Árboles Binarios de Árboles Binarios de BúsquedaBúsqueda
�� Por la forma en que mantienen el orden Por la forma en que mantienen el orden de sus elementos almacenados, los de sus elementos almacenados, los árboles binarios de búsqueda pueden árboles binarios de búsqueda pueden desarrollar ciertas tareas más desarrollar ciertas tareas más eficientemente que otras estructuras de eficientemente que otras estructuras de datos. datos.
Mtl Lourdes CahuichMtl Lourdes Cahuich 1717
template <class T>template <class T>class class BSTreeBSTree {{protected:protected:
BSTNodeBSTNode<T> *root; // root of tree<T> *root; // root of treeintint count; // size of treecount; // size of tree
public:public:BSTreeBSTree () : () : root(NULLroot(NULL ), count(0) {}), count(0) {}BSTree(constBSTree(const BSTreeBSTree &);&);virtual ~virtual ~ BSTreeBSTree () {if (root) delete root;}() {if (root) delete root;}virtual virtual intint size() const { return count; }size() const { return count; }virtual virtual boolbool insert( const T& x );insert( const T& x );virtual const T* const search( const T& x );virtual const T* const search( const T& x );virtual virtual boolbool remove( const T& x );remove( const T& x );
Mtl Lourdes CahuichMtl Lourdes Cahuich 1818
protected:protected:
virtual virtual BSTNodeBSTNode<T>* <T>* copy_tree(BSTNodecopy_tree(BSTNode <T>* <T>* nodepnodep ););
virtual virtual boolbool insert_helper(BSTNodeinsert_helper(BSTNode <T> <T> *&*& nodepnodep , const T &x);, const T &x);
virtual const T* const virtual const T* const search_helper(BSTNodesearch_helper(BSTNode <T> * <T> * nodepnodep , const T , const T &x);&x);
virtual virtual boolbool remove_helper(BSTNoderemove_helper(BSTNode <T> <T> *&*& nodepnodep , const T &x);, const T &x);
virtual virtual BSTNodeBSTNode<T>* <T>* remove_leftmost_child(BSTNoderemove_leftmost_child(BSTNode <T> *&<T> *& nodepnodep ););
}; };
Mtl Lourdes CahuichMtl Lourdes Cahuich 1919
Uso de Uso de Árboles Binarios de Árboles Binarios de BúsquedaBúsqueda
�� Esta es una clase del árbol binario de Esta es una clase del árbol binario de búsqueda que soporta operaciones para búsqueda que soporta operaciones para la inserción, acceso, y eliminación de la inserción, acceso, y eliminación de elementos.elementos.
�� También contiene un método que regresa También contiene un método que regresa el número de elementos actualmente el número de elementos actualmente almacenados en el árbol binario de almacenados en el árbol binario de búsqueda.búsqueda.
Mtl Lourdes CahuichMtl Lourdes Cahuich 2020
BSTreeBSTree
�� La clase La clase BSTreeBSTree es una plantilla de clase.es una plantilla de clase.
�� Esto nos permite crear instancias de la Esto nos permite crear instancias de la clase que pueden almacenar diferentes clase que pueden almacenar diferentes tipos de datos. tipos de datos.
Mtl Lourdes CahuichMtl Lourdes Cahuich 2121
BSTreeBSTree
�� Una consideración importante que Una consideración importante que debemos de tomar en cuenta antes de debemos de tomar en cuenta antes de usar esta clase, es que internamente, usar esta clase, es que internamente, algunos de los métodos de esta clase algunos de los métodos de esta clase usan operadores ==, <, y > para usan operadores ==, <, y > para desarrollar la tarea de inserción, acceso, y desarrollar la tarea de inserción, acceso, y eliminación de elementoseliminación de elementos
Mtl Lourdes CahuichMtl Lourdes Cahuich 2222
BSTreeBSTree
�� Por lo tanto, cualquier objeto que Por lo tanto, cualquier objeto que almacenemos en esta clase del árbol almacenemos en esta clase del árbol binario de búsqueda, debe proveer estos binario de búsqueda, debe proveer estos operadores operadores
Mtl Lourdes CahuichMtl Lourdes Cahuich 2323
template <class T>template <class T>const T* const const T* const BSTreeBSTree <T>::<T>:: search_helper(BSTNodesearch_helper(BSTNode <T> <T> ** nodepnodep , const T &x) {, const T &x) {
if (if ( nodepnodep == 0) {== 0) {return NULL;return NULL;
}}if (x == if (x == nodepnodep -- >data) {>data) {
return &(return &( nodepnodep -- >data);>data);}}if (x < if (x < nodepnodep -- >data) {>data) {
return return search_helper(nodepsearch_helper(nodep -- >left, x);>left, x);}}else {else {
return return search_helper(nodepsearch_helper(nodep -- >right, x);>right, x);}}
}}
Mtl Lourdes CahuichMtl Lourdes Cahuich 2424
BSTreeBSTree --searchsearch
�� La función La función searchsearch ofrece una forma de ofrece una forma de acceder elementos que existen en el árbol acceder elementos que existen en el árbol binario de búsqueda.binario de búsqueda.
�� Si el elemento solicitado no es encontrado Si el elemento solicitado no es encontrado en el árbol binario de búsqueda, la función en el árbol binario de búsqueda, la función regresa el apuntador nulo. regresa el apuntador nulo.
Mtl Lourdes CahuichMtl Lourdes Cahuich 2525
BSTreeBSTree --searchsearch
�� De otra forma, la función regresa un De otra forma, la función regresa un apuntador constante a una versión apuntador constante a una versión constante del elementoconstante del elemento
Mtl Lourdes CahuichMtl Lourdes Cahuich 2626
BSTreeBSTree --searchsearch
�� El apuntador debe ser constante para El apuntador debe ser constante para prevenir que un usuario intente obtener prevenir que un usuario intente obtener acceso a otra porción de memoria usando acceso a otra porción de memoria usando la aritmética del apuntador.la aritmética del apuntador.
�� El elemento al que apunta el apuntador El elemento al que apunta el apuntador debe ser constante para asegurar que se debe ser constante para asegurar que se mantenga la integridad del árbol. mantenga la integridad del árbol.
Mtl Lourdes CahuichMtl Lourdes Cahuich 2727
BSTreeBSTree --searchsearch
�� Cambiar el valor de un elemento Cambiar el valor de un elemento almacenado podría posiblemente cambiar almacenado podría posiblemente cambiar el lugar donde debe ser almacenado el el lugar donde debe ser almacenado el elemento en el árbol binario de búsqueda. elemento en el árbol binario de búsqueda.
Mtl Lourdes CahuichMtl Lourdes Cahuich 2828
BSTreeBSTree --searchsearch
�� El proceso correcto para actualizar un El proceso correcto para actualizar un elemento almacenado involucra primero elemento almacenado involucra primero remover el elemento, luego actualizar una remover el elemento, luego actualizar una copia del elemento, y después insertar la copia del elemento, y después insertar la copia actualizada.copia actualizada.
Mtl Lourdes CahuichMtl Lourdes Cahuich 3030
HeapsHeaps
�� Los Los heapsheaps son árboles binarios usados a son árboles binarios usados a menudo para brindar un acceso eficiente menudo para brindar un acceso eficiente al valor mínimo o máximo de un conjunto al valor mínimo o máximo de un conjunto de valores. de valores.
�� Un uso de esta funcionalidad es la Un uso de esta funcionalidad es la implantación de una cola de prioridades implantación de una cola de prioridades
Mtl Lourdes CahuichMtl Lourdes Cahuich 3131
HeapsHeaps
�� Una cola de prioridades es una estructura Una cola de prioridades es una estructura de datos que se comporta de forma similar de datos que se comporta de forma similar a una cola regular, debido a que ofrece los a una cola regular, debido a que ofrece los métodos métodos pushpush , , poppop , , sizesize , y , y emptyempty . .
Mtl Lourdes CahuichMtl Lourdes Cahuich 3232
HeapsHeaps
�� Las colas de prioridad se diferencian de Las colas de prioridad se diferencian de las colas regulares debido a que el las colas regulares debido a que el elemento pop que elimina una cola de elemento pop que elimina una cola de prioridad, depende de una prioridad prioridad, depende de una prioridad asignada, y no del principio "Primeroasignada, y no del principio "Primero--enen--Entrar, PrimeroEntrar, Primero--en Salir". en Salir".