18 Arboles Como Estructura De Busqueda

33
Árboles como Estructuras Árboles como Estructuras de Búsqueda de Búsqueda Apoyo SSD5 Apoyo SSD5

Transcript of 18 Arboles Como Estructura De Busqueda

Árboles como Estructuras Árboles como Estructuras de Búsquedade Búsqueda

Apoyo SSD5Apoyo SSD5

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 77

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 1212

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

Cómo Usar Estructuras de Cómo Usar Estructuras de Árbol Árbol

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.

Cómo Usar Cómo Usar HeapsHeaps

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".

Mtl Lourdes CahuichMtl Lourdes Cahuich 3333

HeapsHeaps

�� Las colas de prioridad son usadas Las colas de prioridad son usadas regularmente, STL provee el adaptador regularmente, STL provee el adaptador priority_queuepriority_queue