Download LA LOGICA PROPOSICIONAL

Document related concepts

Árbol binario wikipedia , lookup

Recorrido de árboles wikipedia , lookup

Árbol binario de búsqueda wikipedia , lookup

Rotación de árboles wikipedia , lookup

Treap wikipedia , lookup

Transcript
ARBOLES
ARBOLES COMPUTACIONALES
MATEMATICAS DISCRETAS II
Contenido
 Concepto
 Características y Propiedades
 Tipos de Arboles
1.
2.
3.
Libres
Binarios
Expansión Mínima
Algoritmo de Kruskal
Algoritmo Prim
Recorrido de Arboles
Búsqueda en Arboles
ARBOL COMPUTACIONAL
Composición:
• Estructura de datos que imita la forma de un árbol (un conjunto de
nodos conectados).
• Un nodo es la unidad sobre la que se construye el árbol y puede
tener cero o más nodos hijos conectados a él.
• Se dice que un nodo a es padre de un nodo b si existe un enlace
desde a hasta b (en ese caso, también decimos que b es hijo de
a).
• Nodo raíz no tiene padres.
• Hoja o Terminal : Nodo que no tiene hijos.
• Rama : Nodos (tienen padre y uno o varios hijos).
ARBOL COMPUTACIONAL
 Concepto:
Un árbol es un grafo sin ciclos (a cíclico)
Es conexo.
ARBOL COMPUTACIONAL
Es una estructura no lineal de datos homogéneos tal que establece una
jerarquía entre sus elementos.
 Los árboles representan las estructuras no-lineales y dinámicas de
datos mas importantes en computación.
 Dinámicas, puesto que la estructura árbol puede cambiar durante la
ejecución de un programa.
 No-lineales, puesto que a cada elemento del árbol pueden seguirle
varios elementos.
USO ARBOLES
 Los árboles se emplean para analizar circuitos eléctricos y para
representar la estructura de fórmulas matemáticas, así como para
organizar la información de bases de datos.
 Los árboles genealógicos y los organigramas jerárquicos son ejemplos
•
•
comunes de árboles.
Como ayuda para realizar búsquedas en conjuntos de datos.
Organizar y relacionar datos en una BD y otras aplicaciones diversas.
Arboles Jerárquicos
Ejemplo de Información representada con árboles.
REPRESENTACION DE UN ARBOL
 La representación en forma de Grafo es la que comúnmente se utiliza,
y ha originado el termino árbol por su parecido abstracto con el
vegetal (raíz, ramas, hojas).
 Es de notar que en esta representación la raíz se dibuja arriba, aun que
en el vegetal se encuentra abajo.
REPRESENTACION DE ARBOLES
 La representación puede realizarse de diferentes formas. Las más
utilizadas son:
 Representar cada nodo como una variable, con punteros a sus hijos y a
su padre.
 Representar el árbol con un array donde cada elemento es un nodo y
las relaciones padre-hijo vienen dadas por la posición del nodo en el
array.
Características y Propiedades de
Arboles








Nodo : cada uno de los elementos de un árbol.
Todo árbol que no es vacío, tiene un único nodo raíz.
Un nodo X es descendiente directo de un nodo Y, si el nodo X es apuntado
por el nodo Y. X es hijo de Y.
Un nodo X es antecesor directo de un nodo Y, si el nodo X apunta al nodo Y.
Todos los nodos que son descendientes directos (hijos) de un mismo nodo
(padre), son hermanos.
Todo nodo que no es raíz, ni terminal u hoja se conoce con el nombre de
interior.
Grado del Nodo: Es el numero de descendientes directos o numero de hijos
de un determinado nodo.
Así el grado de un nodo hoja es cero.
TERMINOLOGIAS DE LOS ARBOLES
Raíz - El nodo superior del árbol.




Padre - Nodo con hijos.
Hijo - Nodo descendiente de otro nodo.
Hermanos - Nodos que comparten el mismo padre.
Hojas - Nodos sin hijos.
TERMINOLOGIAS DE LOS ARBOLES
Grado del árbol es el máximo grado de todos los nodos del
árbol.
Nivel es el numero de arcos que deben ser recorridos para llegar a
un determinado nodo.
Altura del árbol es el máximo número de niveles de todos los
nodos del árbol.
TERMINOLOGIAS DE LOS
ARBOLES
 Un subárbol de un árbol es un nodo,junto con todos sus
descendientes.


Profundidad. La profundidad de un nodo es la longitud del
único camino de la raíz a ese nodo
Orden de los nodos. Los hijos de un nodo usualmente están
ordenados de izquierda a derecha.
Si deseamos explícitamente ignorar el orden de los dos hijos, nos
referiremos a un árbol como un árbol no-ordenado.
Características y Propiedades de
Arboles
Árbol completo de altura a y grado g
El que tiene el máximo número de nodos posible
20 = 1
21 = 2
Ejercicio 1: ¿Cuál es el número máximo de nodos de un árbol de altura 5 y grado 4?
Características y Propiedades de
Arboles
Camino de búsqueda interno
Número de nodos que hay que recorrer para encontrar un determinado nodo
n representa el número
de nodos del árbol
C
B
LmediaC.I . 
1 a
n *i

i 1 i
n
E
F
G
D
H
I
Ejercicio 2: ¿Cuál es la longitud media del camino interno del árbol mostrado?
Características y Propiedades de
Arboles
A
B
E
C
F
Antecesor y
descendiente
D
G
H
-Un nodo raíz
-Todos los nodos son conectados desde un único nodo (nodo padre)
-Sólo hay un camino desde el nodo raíz a cada nodo
-Los nodos que no tienen hijos son nodos hoja
¿Grado del nodo C?
…¿y del árbol?
Tipos de Arboles
 Arboles Libres : No se especifica ninguna Raíz.
Tipos de Arboles
Árbol de Expansión Mínima
Sus aristas tienen peso(valor) y sus vértices están relacionados.
Arboles Binarios
Árboles Binarios

Árbol de búsqueda binario auto-balanceable
Árboles AVL
Árboles Rojo-Negro
Árbol AA

Árbol de segmento

Árboles Multicamino

Árboles B (Árboles de búsqueda multicamino autobalanceados)
Árbol-B+
Árbol-B*
ARBOLES BINARIOS
 Estructura de datos no lineal en el cual cada nodo siempre tiene un
hijo izquierdo y un hijo derecho.
 Si algún hijo tiene como referencia a null, es decir que no almacena
ningún dato, entonces este es llamado nodo externo. En el caso
contrario el hijo es llamado un nodo interno.
 Usos comunes de los árboles binarios son los árboles binarios de
búsqueda, los montículos binarios y Codificación de Huffman.
Un árbol binario sencillo de tamaño 9, 4 niveles
y altura 3 (altura = máximo nivel - 1), con un
nodo raíz cuyo valor es 2.
ARBOLES BINARIOS
 Al igual que en otras estructuras la información que se almacena en
todos y cada uno de los árboles, debe ser del mismo tipo para
garantizar la integridad y coherencia de la información
almacenada.
IMPLEMENTACION EN C
Un árbol binario puede declararse de varias maneras. Algunas de ellas
son:
Estructura con manejo de memoria dinámica, siendo el puntero que
apunta al árbol de tipo tArbol:
 typedef struct nodo { int clave; struct nodo *izdo, *dcho; }Nodo;
Estructura con arreglo indexado:
 typedef struct tArbol { int clave; tArbol hIzquierdo, hDerecho; }
tArbol; tArbol árbol[NUMERO_DE_NODOS];
Árboles binarios de búsqueda autobalanceable
Un árbol binario de búsqueda auto-balanceable o equilibrado es un
árbol de búsqueda Binario que intenta mantener su altura, o el número de
niveles de nodos bajo la raíz, tan pequeños como sea posible en todo
momento, automáticamente.
Las rotaciones internas en árboles
binarios son operaciones internas
comunes utilizadas para mantener el
balance perfecto o casi perfecto del árbol
binario. Un árbol balanceado permite
operaciones en tiempo logarítmico.
Árbol binario de búsqueda auto-balanceable
Estructuras de datos populares que implementan este
tipo de árbol:
ARBOL AVL
: Es un tipo especial de árbol binario ideado por los matemáticos rusos Adelson-
.
Velskii y Landis. Fue el primer arbol de busqueda binario autobalanceables que se ideó
árbol binario equilibrado (sí es AVL)
árbol binario no equilibrado (no es AVL)
Arboles AVL
Los árboles AVL están siempre equilibrados de tal modo que para todos
los nodos, la altura de la rama izquierda no difiere en más de una unidad
de la altura de la rama derecha o viceversa.
 Cada nodo, además de la información que se pretende almacenar,
debe tener los dos punteros a los árboles derecho e izquierdo, igual
que los arboles binarios de búsqueda (ABB), y además el dato que
controla el factor de equilibrio.
 El factor de equilibrio es la diferencia entre las alturas del árbol
derecho y el izquierdo:
 FE = altura subárbol derecho - altura subárbol izquierdo; Por
definición, para un árbol AVL, este valor debe ser -1, 0 ó 1.
Factor de Equilibrio
 Si el factor de equilibrio de un nodo es:
 0 -> el nodo está equilibrado y sus subárboles tienen exactamente la
misma altura.
 1 -> el nodo está equilibrado y su subárbol derecho es un nivel más
alto.
 -1 -> el nodo está equilibrado y su subárbol izquierdo es un nivel más
alto.
 Si el factor de equilibrio |Fe| >= 2 es necesario reequilibrar.
Árboles Rojo-Negro
Un árbol rojo-negro es un árbol binario de búsqueda en el que cada nodo
tiene un atributo de color cuyo valor es rojo o negro. En adelante, se
dice que un nodo es rojo o negro haciendo referencia a dicho atributo.
Todo nodo es o bien rojo o bien negro.
La raiz es negra.
Todas las hojas (NULL) son negras.
Todo nodo rojo debe tener dos nodos hijos
negros.
Cada camino desde un nodo dado a sus hojas
descendientes contiene el mismo número de
nodos negros.
Árbol Expansión Mínima
 Es una red conexa y ponderada que se refiere a utilizar los arcos de
la red para llegar a todos los nodos de esta, de manera tal que se
minimiza la longitud total.
 El árbol de expansión mínima es apropiado para problemas en los
cuales la redundancia es expansiva.
 El problema surge cuando todos los nodos de una red deben
conectarse entre ellos sin formar un ciclo.
Árbol Expansión Mínima
 Aplicación de estos problemas de optimización
 Redes de comunicación eléctrica, telefónica, carretera, ferroviaria,
aérea, marítima, hidráulica o de gas, etc.
 Los nodos representan puntos de consumo eléctrico, teléfonos,
aeropuertos, computadoras y
 Los arcos podrían ser de alta tensión, cable de fibra óptica, rutas
aéreas, agua, gas etc..
Arboles de expansión Minimales
"Hay que construir una red de cómputo con un acoplamiento vago para un sistema
de siete computadores.
El objetivo es enlazar todos los computadores minimizando el costo total de
la construcción.
El grafo G de la figura es un modelo de la situación.
Los computadores se representan mediante los vértices del grafo, las aristas
representan Líneas de transmisión que se tienen en cuenta para enlazar ciertos
pares de computadores.
Arboles de Expansión Minimales
Asociamos a cada arista e de G un número real positivo p(e), el peso de e. En este
ejemplo, el peso de una arista indica el costo previsto para la construcción de esa
línea de transmisión particular.
Para hacer esto, se necesita un árbol de expansión T, tal que la suma de los pesos de
las aristas en T sea mínima.
La construcción de dicho árbol de expansión óptimo se puede realizar por medio de
los algoritmos de: Joseph Kruskal.y Robert Prim.
ARBOLES - LISTAS
Las listas tienen posiciones. Los árboles tienen nodos.
Las listas tienen un elemento en cada posición. Los árboles tienen
una etiqueta en cada nodo.
Algunos autores distinguen entre árboles con y sin etiquetas. Un
árbol sin etiquetas tiene sentido aunque en la inmensa mayoría de
los problemas necesitaremos etiquetar los nodos.
Es por ello por lo que a partir de ahora sólo haremos referencia a
árboles etiquetados).
ARBOL EXPANSION MINIMA
ALGORITMO DE KRUSKAL
ALGORITMO DE PRIM
Codificacion Huffman/Compresion
Busqueda Arboles Binarios
RECORRIDO ARBOLES
Una de las operaciones mas importantes a realizar en un árbol binario es el recorrido
de los mismos
Recorrer significa visitar los nodos del árbol en forma sistemática, de tal
manera que todos los nodos del mismo sean visitados una sola vez.
Existen 3 formas diferentes de efectuar el recorrido y todas ellas de naturaleza
recursiva, estas son:
• PREORDEN
• INORDEN
• POSORDEN
Hay un último recorrido que implementa a estos 3:
RECORRIDO POR NIVELES: Este recorrido procesa los nodos comenzando en la
raíz y avanzando de forma descendente y de izquierda a derecha
RECORRIDO ARBOLES
la recursividad nos ayuda a que los procesos se repitan así mismos y sea más fácil su
codificación.
• PREORDEN: En el que se procesa el nodo y después se procesan
recursivamente sus hijos.
Para recorrer un árbol binario no vacío en preorden, hay que realizar las siguientes
operaciones recursivamente en cada nodo, comenzando con el nodo de raíz:
1. Visite la raíz
2.Atraviese el sub-árbol izquierdo
3.Atraviese el sub-árbol derecho
Preorden: ABDGEHICFJK
RECORRIDO ARBOLES
la recursividad nos ayuda a que los procesos se repitan así mismos y sea más fácil su
codificación.
• PREORDEN: En el que se procesa el nodo y después se procesan
recursivamente sus hijos.
Para recorrer un árbol binario no vacío en preorden, hay que realizar las siguientes
operaciones recursivamente en cada nodo, comenzando con el nodo de raíz:
1. Visite la raíz
2.Atraviese el sub-árbol izquierdo
3.Atraviese el sub-árbol derecho
Preorden = [15, 9, 6, 14, 13, 20, 17, 64, 26, 72]
RECORRIDO ARBOLES
ALGORITMO
El algoritmo realiza el recorrido preorden en un árbol binario.
NODO es un dato de tipo puntero.
INFO, IZQ y DER son campos del registro nodo.
INFO es una variable de tipo carácter, IZQ y DER son variables de tipo puntero.
si NODO ≠ NULL
entonces
Visitar el NODO { Escribir NODO^.INFO}
Regresar a PREORDEN con NODO^.IZQ
{Llamada recursiva a preorden con la rama izquierda del nodo en cuestión}
Regresa a PREORDEN con NODO^.DER
{Llamada recursiva a preorden con la rama derecha del nodo en cuestión}
Fin del condicional del paso I
RECORRIDO ARBOLES
RECORRIDO ARBOLES
• INORDEN: En este se procesa recursivamente el hijo izquierdo, luego se procesa
el nodo actual y finalmente se procesa recursivamente el hijo derecho.
Para recorrer un árbol binario no vacío en inorden (simétrico), hay que realizar las
siguientes operaciones recursivamente en cada nodo:
1.Atraviese el sub-arbol izquierdo
2.Visite la raiz
3.Atraviese el sub-arbol derecho
RECORRIDO ARBOLES
RECORRIDO INORDEN
Inorden = [6, 9, 13, 14, 15, 17, 20, 26, 64, 72].
RECORRIDO ARBOLES
RECORRIDO POSTORDEN
En este caso se trata primero el subárbol izquierdo, después el derecho y por último
el nodo actual.
Postorden =[6, 13, 14, 9, 17, 26, 72, 64, 20, 15].
RECORRIDO ARBOLES
void postorden(tArbol *a)
{
if (a != NULL) {
postorden(a->hIzquierdo);
postorden(a->hDerecho);
tratar(a);
//Realiza una operación en nodo
}
}
RECORRIDO ARBOLES
RECORRIDO POR NIVELES
Concluimos implementando el recorrido por niveles. este recorrido procesa los nodos
comenzando en la raíz y avanzando en forma descendente y de izquierda a derecha.
El nombre se deriva del hecho de que primero visitamos:
los nodos del nivel 0 (la raíz),
después los del nivel 1 (los hijos de la raíz),
los del nivel 2 (los nietos de la raíz),
y así sucesivamente.
RECORRIDO ARBOLES
RECORRIDO POR NIVELES
Un recorrido por niveles se implementa usando una cola en lugar de una pila.
La cola almacena los nodos que van a ser visitados.
Cuando se visita un nodo ,se colocan sus hijos al final de la cola, donde serán visitados
después de los nodos que ya están en la cola.
Es fácil ver que esto garantiza que los nodos se visitan por niveles.
RECORRIDO ARBOLES
RECORRIDO POR NIVELES
El Algoritmo PorNiveles se
Muestra a Continuación…..
ALGORITMO
encolar(raiz);
mientras(cola_no_vacia( ))
inicio
nodo=desencolar(); //Saca un nodo de la cola
visitar(nodo);
//Realiza una operación en nodo
encolar_nodos_hijos(nodo); //Mete en la cola los hijos del nodo actual
fin;
RECORRIDO ARBOLES
RECORRIDO POR NIVELES
CODIGO
void amplitud(tArbol *a)
{
tCola cola;
tArbol *aux;
if (a != NULL)
{ crearCola(cola);
encolar(cola, a);
while (!colavacia(cola)) {
desencolar(cola, aux);
visitar(aux);
if (aux->hIzquierdo != NULL) encolar(cola, aux->hIzquierdo );
if (aux->hDerecho!= NULL) encolar(cola, aux->hDerecho); }
}
}
FORMAS DE ARBOL
FORMAS DE ARBOL
Árbol binario.
Si B es la raíz de un árbol binario y D es la raíz del subárbol izquierdo/derecho, se
dice que B es el padre de D y que D es el hijo izquierdo/derecho de B.
FORMAS DE ARBOL
Un árbol estrictamente binario es aquel en el que cada nodo que no es hoja, tiene
subárboles izquierdo y derecho que no están vacíos.
Un árbol estrictamente binario con n hojas siempre contiene 2n-1 nodos.
El nivel de un nodo en un árbol binario se define del modo
siguiente:
1.La raíz del árbol tiene el nivel 0.
2.El nivel de cualquier otro nodo en el árbol es uno más que el
nivel de su padre.
La profundidad o altura de un árbol binario es el máximo
nivel de cualquier hoja en el árbol.
FORMAS DE ARBOLES
Ejemplo :
Un grupo de ajedrecistas que luchan por un campeonato. Cada
ajedrecista tiene una única oportunidad para enfrentar al campeón
vigente, y que el perdedor de cualquier encuentro será eliminado de la
contienda.
El árbol que detalla esta situación, es el siguiente:
Thursday, May 07, 2015
FORMAS DE ARBOL
En este árbol binario, las hojas representan a los competidores en el
torneo(8) y las ramas a los ganadores de los encuentros o, equivalentemente
los encuentros jugados en el torneo.
Si se llama r el número de ramas y h el número de hojas en un árbol binario,
se puede demostrar que: r = h –1.
FORMAS DE ARBOLES
El árbol anterior muestra el número de encuentros en un torneo de
eliminación simple con 8 competidores.
• Se juegan un total 7 encuentros a saber:
• Cuatro encuentros en la primera ronda.
• Dos encuentros en la segunda ronda.
• El encuentro final.
En total son 7 encuentros
Thursday, May 07, 2015
FORMAS DE ARBOL
En general
BUSQUEDA EN ARBOLES
Consideremos árboles binarios , de cualquier tipo sobre el
cual pueda definirse un orden lineal.
BUSQUEDA EN ARBOLES
Recordemos las ideas de los algoritmos que recorren
estructuras lineales (vectores, listas):
Vectores:
Listas:
BUSQUEDA EN ARBOLES
Búsqueda en Arboles
Esto implica examinar cada parte del árbol hasta que el vértice o la arista deseada
sea encontrada. Podríamos profundizar moviéndonos a un vértice siempre que sea
posible o podríamos desplegarnos comprobando todos los vértices en un nivel antes
de pasar al siguiente.
Búsqueda en profundidad:
La idea básica de la búsqueda en profundidad es penetrar tan profundamente como
sea posible antes de desplegarse a otros vértices .Esto se consigue al tomar el nuevo
vértice adyacente al ultimo de los posibles vértices anteriores.
BUSQUEDA EN ARBOLES
BUSQUEDA EN ARBOLES
Busqueda en anchura:
La idea basica de la busqueda en anchura es desplegarse a
tantos vertices como sea posible antes de penetrar en
profundidad dentro de un arbol.
Esto significa que visitaremos todos los vertices adyacentes a
uno dado antes de cambiar de nivel.
BUSQUEDA EN ARBOLES
APLICACIONES ARBOLES
Aplicaciones de árboles binarios.
Un árbol binario es una estructura de datos útil cuando deben tomarse decisiones
en dos sentidos en cada punto de un proceso.
Suponga que se desea encontrar todos los duplicados de una lista de números.
Considérese lo siguiente:
1.El primer número de la lista se coloca en un nodo que se ha establecido como la raíz
de un árbol binario con subárboles izquierdo y derecho vacíos.
2.Cada número sucesivo en la lista se compara con el número en la raíz, aquí se
tienen 3 casos:
a. Si coincide, se tiene un duplicado.
b. Si es menor, se examina el subárbol izquierdo.
ARBOLES BINARIOS
 Se define un árbol binario como un conjunto finito de elementos
(nodos) que bien esta vacío o esta formado por una raíz con dos
arboles binarios disjuntos, es decir, dos descendientes directos
llamados subarbol izquierdo y subarbol derecho.
 Los árboles binarios son llamados también de grado 2
 Las aplicaciones de los arboles binarios son muy variadas ya que se les
puede utilizar para representar una estructura en la cual es posible
tomar decisiones con dos opciones en distintos puntos.
ARBOLES BINARIOS
 Arbol binario de búsqueda.
 Los árboles binarios se utilizan frecuentemente para representar
conjuntos de datos cuyos elementos se identifican por una clave
única. Si el árbol está organizado de tal manera que la clave de cada
nodo es mayor que todas las claves su subarbol izquierdo, y menor
que todas las claves del subarbol derecho se dice que este árbol es un
árbol binario de búsqueda.

Ejemplo:
ARBOLES BINARIOS
 Recorrido en amplitud
 Es aquel recorrido que recorre el árbol por niveles, en el siguiente
ejemplo sería:
 12 - 8,17 - 5,9,15
 Recorrido en profundidad
 Recorre el árbol por subárboles.
 Tipos : Preorden, orden central y postorden.
CLASIFICACION ARBOLES BINARIOS










Arbol Binario Distinto
Se dice que dos árboles binarios son distintos cuando sus estructuras son diferentes.
Ejemplo:
Arbol Binario Similar
Dos arboles binarios son similares cuando sus estructuras son idénticas, pero la
información que contienen sus nodos es diferente.
Ejemplo:
Arbol Binario Equivalente
Son aquellos arboles que son similares y que además los nodos contienen la misma
información. Ejemplo:
Arbol Binario Completo
Son aquellos arboles en los que todos sus nodos excepto los del ultimo nivel,
tiene dos hijos; el subarbol izquierdo y el subarbol derecho.