Estructura de Datos [Árboles]

Anuncio
Estructura de Datos [Árboles]
M. en C. Sergio Luis Pérez Pérez
UAM C UAJIMALPA , M ÉXICO, D. F.
Trimestre 14-O
Sergio Luis Pérez (UAM C UAJIMALPA)
Curso de Estructura de Datos
1 / 18
Árboles binarios
Árboles binarios
1
Árboles binarios
2
Árboles binarios de búsqueda
3
Árboles balanceados
Sergio Luis Pérez (UAM C UAJIMALPA)
Curso de Estructura de Datos
2 / 18
Árboles binarios
Árboles binarios I
Pendiente.
Sergio Luis Pérez (UAM C UAJIMALPA)
Curso de Estructura de Datos
3 / 18
Árboles binarios de búsqueda
Árboles binarios de búsqueda
1
Árboles binarios
2
Árboles binarios de búsqueda
3
Árboles balanceados
Sergio Luis Pérez (UAM C UAJIMALPA)
Curso de Estructura de Datos
4 / 18
Árboles binarios de búsqueda
Árboles binarios de búsqueda I
Pendiente.
Sergio Luis Pérez (UAM C UAJIMALPA)
Curso de Estructura de Datos
5 / 18
Árboles balanceados
Árboles balanceados
1
Árboles binarios
2
Árboles binarios de búsqueda
3
Árboles balanceados
Sergio Luis Pérez (UAM C UAJIMALPA)
Curso de Estructura de Datos
6 / 18
Árboles balanceados
Árboles balanceados I
Los árboles balanceados son un tipo de estructura no lineal que
permite mejorar el acceso a la información.
Dicha estructura se compone esencialmente de una llave y más
de un apuntador a otras estructuras del mismo tipo.
Todo elemento debe ser comparable sobre dicha llave.
Cuando se realiza una búsqueda la idea es poder ir descartando
en cada paso la mitad de la información que no sea de interés
para dicha consulta.
Los tipos de árboles balanceados más comunes son:
Árboles AVL.
Sergio Luis Pérez (UAM C UAJIMALPA)
Curso de Estructura de Datos
7 / 18
Árboles balanceados
Árboles balanceados II
Árboles 2-3.
Árboles rojinegros.
Árboles B.
Árboles B+.
Sergio Luis Pérez (UAM C UAJIMALPA)
Curso de Estructura de Datos
8 / 18
Árboles balanceados
Árboles AVL
Árboles AVL
1
Árboles binarios
2
Árboles binarios de búsqueda
3
Árboles balanceados
Árboles AVL
Sergio Luis Pérez (UAM C UAJIMALPA)
Curso de Estructura de Datos
9 / 18
Árboles balanceados
Árboles AVL
Árboles AVL I
Es un tipo de árbol binario bien balanceado creado por los
matemáticos rusos Georgi Adelsón-Velski y Yevgeni Mijáilovich
Landis.
La profundidad del árbol se encuentra en O(log n).
Por lo tanto, permiten inserciones y borrados en tiempo O(log n).
Sergio Luis Pérez (UAM C UAJIMALPA)
Curso de Estructura de Datos
10 / 18
Árboles balanceados
Árboles AVL
Árboles AVL II
Propiedades de los árboles AVL
Es un árbol balanceado.
En cualquier nodo las alturas de sus hijos sólo pueden diferir en
uno.
Los nodos vacı́os o nulos tienen una altura de -1.
Las hojas tienen altura cero.
Los nodos se encuentran ordenados por una llave.
Sergio Luis Pérez (UAM C UAJIMALPA)
Curso de Estructura de Datos
11 / 18
Árboles balanceados
Árboles AVL
Árboles AVL III
Estructura de datos en C++
struct avl{
avl *izq, *der;
int altura, llave;
TipoDato valor;
void Insertar(avl*& raiz, int llave, TipoDato &Valor);
void Borrar(avl*& raiz, int llave);
void RotacionSimpleIzquierda(avl*& raiz);
void RotacionSimpleDerecha(avl*& raiz);
void RotacionDobleIzquierda(avl*& raiz);
void RotacionDobleDerecha(avl*& raiz);
void Balancea(avl*& raiz);
void AjustaAltura(avl*& raiz);
}
Sergio Luis Pérez (UAM C UAJIMALPA)
Curso de Estructura de Datos
12 / 18
Árboles balanceados
Árboles AVL
Árboles AVL IV
Crear nodo
CrarNodo(avl*& raiz, int llave, TipoDato valor){
raiz = new avl;
raiz− >llave = llave;
raiz− >valor = valor;
raiz− >izq = raiz− >der = NULL;
raiz− >altura = -1;
}
Sergio Luis Pérez (UAM C UAJIMALPA)
Curso de Estructura de Datos
13 / 18
Árboles balanceados
Árboles AVL
Árboles AVL V
Insertar
Insertar(avl*& raiz, int llave, TipoDato &valor){
si (raiz == NULL) entonces CrearNodo(raiz, llave, valor);
si (raiz− >llave == llave) entonces “Llave duplicada”;
si (raiz− >llave < llave) entonces Insertar(raiz− >der, llave, valor);
en otro caso Insertar(raiz− >izq, llave, valor);
Balancea(raiz);
}
Sergio Luis Pérez (UAM C UAJIMALPA)
Curso de Estructura de Datos
14 / 18
Árboles balanceados
Árboles AVL
Árboles AVL VI
Rotación simple izquierda
RotacionSimpleIzquierda(avl*& raiz){
avl *aux = raiz;
raiz = aux− >izq;
aux− >izq = raiz− >der;
raiz− >der = aux;
AjustaAltura(raiz− >der);
AjustaAltura(raiz);
}
Sergio Luis Pérez (UAM C UAJIMALPA)
Curso de Estructura de Datos
15 / 18
Árboles balanceados
Árboles AVL
Árboles AVL VII
Altura
int Altura(avl* raiz){
return raiz == NULL ? −1 : raiz− >altura;
}
Ajusta altura
AjustaAltura(avl*& raiz){
raiz− >altura = max(Altura(raiz− >izq), Altura(raiz− >der))+1;
}
Sergio Luis Pérez (UAM C UAJIMALPA)
Curso de Estructura de Datos
16 / 18
Árboles balanceados
Árboles AVL
Árboles AVL VIII
Rotación doble izquierda
RotacionDobleIzquierda(avl*& raiz){
RotacionSimpleDerecha(raiz− >izq);
RotacionSimpleIzquierda(raiz);
}
Rotación doble derecha
RotacionDobleDerecha(avl*& raiz){
RotacionSimpleIzquierda(raiz− >der);
RotacionSimpleDerecha(raiz);
}
Sergio Luis Pérez (UAM C UAJIMALPA)
Curso de Estructura de Datos
17 / 18
Árboles balanceados
Árboles AVL
Árboles AVL IX
Balancea
Balancea(avl*& raiz){
int dif = Altura(raiz− >izq)−Altura(raiz− >der);
si dif == 2 entonces
si Altura(raiz− >izq− >izq) > Altura(raiz− >izq− >der) entonces
RotacionSimpleIzq(raiz);
en caso contrario
RotacionDobleIzq(raiz);
si dif == −2 entonces
si Altura(raiz− >der− >der) > Altura(raiz− >der− >izq) entonces
RotacionSimpleDer(raiz);
en caso contrario
RotacionDobleDer(raiz);
AjustaAltura(raiz);}
Sergio Luis Pérez (UAM C UAJIMALPA)
Curso de Estructura de Datos
18 / 18
Descargar