viernes, 1 de noviembre de 2013

UNIDAD 4 . ESTRUCTURAS NO LINEALES

BLOGGER FUE CREADO POR 

ISELA DE JESÚS MARTINEZ CARACHURE
JUANA ESTRADA JACOBO
IRENE PINEDA BARRIO
SALVADOR REYES VILLA



TEMAS   


4.1 ARBOLES.
4.1.1.CONCEPTO DE ARBOLES.
4.1.2. CLASIFICACIÓN DE LOS ARBOLES .
4.1.3 OPERACIONES  BÁSICAS SOBRE  ARBOLES BINARIOS
4.1.4. APLICACIONES.
4.1.5 ARBOLES  BALANCEADOS (AVL).
4.2. GRAFOS.
4.2.1. TERMINOLOGÍA  DE GRAFOS.
4.2.2. OPERACIONES BÁSICAS SOBRE GRAFOS.



******LA UNIDAD 4******** 
***ESTRUCTURAS NO LINEALES *** 





4.1 ARBOLES

4.1.1 CONCEPTO DE ARBOLES
Las listas enlazadas, pilas y colas son estructuras de datos lineales (es decir, secuencias).Un árbol es una estructura de datos bidimensional no lineal, con propiedades especiales. Los nodos de un árbol contienen dos o mas enlaces. Intuitivamente el concepto árbol implica una estructura de modo en que los elementos de información están relacionados entre si a través de ramas. El árbol genealógico es el concepto típico más representativo del concepto de árbol general. En ciencias de la informática, un ejemplo:













Árbol
es una estructura de datos amplia mente usada 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). Sólo puede haber un único nodo sin padres, que llamaremos raíz. Un nodo que no tiene hijos se conoce como hoja. Los demás nodos (tienen padre y uno o varios hijos) se les conoce como rama.

Los Árboles tienen 3 Recorridos Diferentes los cuales son:
* Pre-Orden:
La raíz se procesa primero, luego el subárbol izquierdo y luego el  derecho.
* In-Orden:
Primero la raíz, luego el subárbol izquierdo y luego el derecho.
* Post-Orden:
Primero el subárbol izquierdo, luego el derecho y luego la raíz.






4.1.2 CLASIFICACIÓN DE ARBOLES- Arboles binarios:



Arboles cuyos nodos contienen dos enlaces (uno de los cuales puede ser null). El  nodo raíz es el primer nodo de un árbol. Cada enlace en el nodo raíz hace referencia  a un hijo. El hijo izquierdo es el primer nodo en el subárbol izquierdo (también  conocido como el nodo raíz del subárbol izquierdo). El hijo derecho es el primer nodo en el subárbol derecho (también conocido como el nodo raíz del subárbol derecho).Los hijos de un nodo especifico se llaman hermanos. Un nodo sin hijos se llama nodo  hoja. Generalmente, los científicos computacionales dibujan arboles desde el nodo  raíz hacia abajo; exactamente lo opuesto a la manera en que crecen los arboles naturales. Recorrido de un árbol binario:- Recorrido: Requiere que cada nodo del árbol sea procesado (visitado) una vez y solo en una secuencia predeterminada. Existen dos enfoques generales para la  secuencia de recorrido, profundidad y anchura .Recorrido en profundidad:

El proceso exige un camino desde la raíz a través de un hijo, al descendiente más lejano del primer hijo antes de proseguir a un segundo hijo .En otras palabras, en el recorrido en profundidad, todos los descendientes de un hijo se procesaran antes del siguiente hijo.

Recorrido en anchura: El proceso se realiza horizontalmente desde el raíz a todos sus hijos, a continuación a los hijos de sus hijos y así sucesivamente hasta que todos los nodos han sido procesados. En otras palabras, en el recorrido en anchura cada nivel se procesa totalmente antes que comience el siguiente nivel.

- Arboles de búsqueda binaria:

(Sin valores de nodo duplicado) cuenta con la característica de que los valores en cualquier subárbol izquierdo son menores que el valor del nodo padre de ese subárbol, y el valores en cualquier subárbol derecho son mayores que el valor del nodo padre de ese subárbol.

El árbol de búsqueda binaria facilita la eliminación de valores duplicados. Al crear un árbol, la operación de inserción reconoce los intentos de insertar un valor duplicado,
ya que este sigue Las Listas decisiones de “ir a la izquierda” a “ir a la derecha” en
cada comparación, al igual que el valor original. Por lo tanto, la operación de inserción eventualmente compara el valor duplicado con un nodo que contenga el mismo valor. En este punto, la operación de inserción puede decidir descartar el valor duplicado.-
Arboles estrechamente empaquetados (o balanceados):

En este tipo de arboles, cada nivel contiene cerca del doble de elementos que el nivel anterior.

Arboles 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. Gracias a esta forma de equilibrio (o balanceo), la complejidad de una búsqueda en uno de estos árboles se mantiene siempre en orden de complejidad O (log n). El  factor de equilibrio puede ser almacenado directamente en cada nodo o ser computado a partir de las alturas de los subárboles .
Ejemplo:
- Arboles 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 o bien
Rojo o bien negro
. Además de los requisitos impuestos a los árboles binarios de búsqueda convencionales, se deben satisfacer los siguientes para tener un árbol rojo-negro válido:
Todo nodo es o bien rojo o bien negro.
La  raíz  es negra.
Todas las hojas son negras (las hojas son los hijos nulos).














Los hijos de todo nodo rojo son negros (también llamada "Propiedad del rojo").


Cada camino simple desde un nodo a una hoja descendiente contiene el mismo número de nodos negros, ya sea contando siempre los nodos negros nulos, o bien no contándolos nunca (el resultado es equivalente). También es llamada" Propiedad del camino", y al número de nodos negros de cada camino, que es constante para todos los caminos, se le denomina "Altura negra del árbol", y por tanto el camino no puede tener dos rojos seguidos. El camino más largo desde la raíz hasta una hoja no es más largo que 2 veces el camino más corto desde la raíz del árbol a una hoja en dicho árbol. El resultado es que dicho árbol está aproximadamente equilibrado.

- Árbol AA:

Los árboles AA son una variación del árbol rojo-negro, que a su vez es una mejora del árbol binario de búsqueda. A diferencia de los árboles rojo-negro, los nodos rojos en un árbol AA sólo pueden añadirse como un hijo derecho. En otras palabras, ningún nodo rojo puede ser un hijo izquierdo.

- Arboles multicamino:

Un  árbol multicamino posee un grado mayor a dos, donde cada nodo de información del árbol tiene un máximo de hijos.






4.1.3 OPERACIONES BÁSICAS SOBRE ARBOLES BINARIOS

*        *Enumerar todos los elementos.
         * Buscar un elemento.
     * Dado un nodo, listar los hijos (si los hay).
         *  Borrar un elemento.
         *Eliminar un subárbol (algunas veces llamada podar).

Encontrar la raíz de cualquier nodo .Por su parte, la representación puede realizarse de diferentes formas. Las más utilizadas son:
Representar cada nodo como una variable en el heap, 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 bien en dadas por la posición del nodo en el array.


4.1.4 APLICACIONES

Los arboles binarios facilitan la búsqueda y ordenamiento de los datos de alta velocidad, la eliminación eficiente de elementos de datos duplicados, la representación de directorios del sistema de archivos y la compilación de expresiones en lenguaje maquina. El árbol de búsqueda binaria facilita la eliminación de valores duplicados. Al crear un árbol se reconocen los intentos de insertar un valor duplicado, ya que este sigue las mismas decisiones de
“ir a a izquierda” a “ir a la derecha” en cada aclaración, a
igual que el valor original. Por lo tanto, eventualmente se comprar el valor duplicado con un nodo que contenga el mismo valor. El valor duplicado puede destacarse en este punto. Otra de las aplicaciones mas importantes es dentro de la inteligencia artificial, y mas concreta mente en el área de reconocimiento de patrones. Se trata de utilizar los arboles para realizar clasificaciones. La clave esta en asignar a cada nodo del árbol un significado. Las distintas ramas tienen asociados criterios que ayudan a determinar el sentido de las búsquedas. También con aplicables en el análisis de notaciones algebraicas y la implementan de algoritmos de compresión, etc.



4.1.5 ARBOLES BALANCEADOS (AVL)


La búsqueda mas eficiente se efectúa en un árbol binario balanceado   .Desafortunadamente, la función Inserta no asegura que el árbol permanezca balanceada, el grado de balance depende del orden en que son insertados los nodo se n el árbol .Un árbol esta perfectamente balanceado si su estructura es optima con respecto al largo del camino de la raíz a cada hoja :Todas las hojas están en el mismo nivel, es decir, el largo máximo de tal camino es  igual al largo mínimo de tal camino sobre todas las hojas .La altura de un árbol binario es el nivel máximo de sus hojas (profundidad). La altura del árbol uno se define como -1. Un árbol binario balanceado es un árbol binario en el cual las alturas de los subárboles de todo nodo difiere a lo sumo en
1. El balance de un nodo en un árbol binario se define como la altura de su subárbol izquierdo menos la altura de su subárbol derecho. Cada nodo en un árbol binario balanceado tiene balance igual a 1, -1 o 0, dependiendo de si la altura de su subárbol izquierdo es mayor que, menos que o igual a la altura de su subárbol derecho .Su póngase que tenemos un árbol binario balanceado, y usamos la función para insertar un nodo en dicho árbol. Entonces el árbol resultante puede o no permanecer balanceado .Es fácil ver que el árbol se vuelve des balanceado si y solo si el nodo recién insertado es un descendiente izquierdo de un nodo que tenia de manera previa balance de 1, o si es un hijo derecho descendiente de un nodo que tenia de manera previa balance-1.Para que el árbol se mantenga balanceado es necesario realizar una transformación en el mismo de manera que:
1.- El recorrido en orden del árbol transformado sea el mismo que para el árbol original (es decir, que el árbol transformado siga siendo un árbol de búsqueda binaria).
2.- El árbol transformado este balanceado


4.2 GRAFOS








Un grafo es una estructura de datos no lineal con la siguiente característica: un nodo puede apuntar a varios y a su vez ser apuntado por otro.


4.2.1 TERMINOLOGÍA DE GRAFOS

 Un grafo se compone por un conjunto de V vértices y un conjunto de A aristas. Cada arista se identifica con el par de vértices que une. Los vértices de una arista son entre si nodos adyacentes.
- Grado de un nodo:

Numero de aristas que contiene ese nodo. Si el grado de un nodo es 0, se dice que es un nodo aislado.
- Grado de un grafo:

Números de vértices de ese grafo.
- Camino:

Un camino C de longitud N de un nodo V1 a un nodo V2, se define como la secuencia de nodos por los que hay que pasar para llegar del nodo V1 a V2. La longitud es el numero de aristas que comprende el camino. El camino es cerrado si empieza y termina en el mismo nodo. El camino es simple si todos los nodos de dicho camino son distintos a excepción de los de los extremos que pueden ser iguales.
- Bucles:

Aristas cuyos extremos son idénticos.

- Aristas múltiples:

Dos o mas aristas que conectan los mismos nodos.

Tipos de grafos:
-
Grafo conectado o conexo:

Existe un camino simple entre dos cualquiera de sus nodos.










Grafo desconectado:

Aquel en que existen nodos que no están unidos por ningún camino.


Grafo dirigido:

Cada arista tiene asignada una dirección (identificada por un par ordenado).

Grafo no dirigido:

La arista esta definida por un par no ordenado.

Grafo sencillo:

Aquel que no tiene ni bucles ni aristas múltiples.

Grafo múltiple o multígrafo:

Permite la existencia de aristas múltiples o bucles.

Grafo completo:

Cada nodo del grafo es adyacente a todos los demás.

Grafo etiquetado con peso ponderado:

Cada arista tiene asociado un valor denominado peso. Se usa para indicar algún criterio de evaluación como la longitud o la importancia de la arista respecto a un parámetro.

Peso de un camino:

La suma de los pesos de las aristas del camino.

Representación de los grafos:

Existen dos formas de representar un grafo:- Con memoria estática (Matriz adyacente): Matriz de N*N elementos donde N es el numero de nodos del grafo. Cada posición M(i ,j) indica si hay una conexión o no entre los nodos que están asociados a la posición i y j de la
matriz.- Con memoria dinámica. Se utilizan 2 listas enlazadas:*Lista de nodos: Formada por todos lo vértices*Lista de adyacentes: Contiene las aristas del grafo.


4.2.2 OPERACIONES BÁSICAS SOBRE GRAFOS

Se trata de localizar un nodos que contiene una determinada información. Para ello le pasamos la información al procedimiento de búsqueda y este devuelve su posición si lo encuentra, o NULL en caso contrario.

- Búsqueda de una arista:

Se trata de buscar una arista dados sus campos de información origen y destino. Devuelve un puntero a la lista de aristas que apunta a esa arista o NULL si no existe.

Inserción de un nodo:

Se recorre el grafo hasta el punto de inserción. A continuación se actualizan los puntos que salen del nuevo nodo y aquellos que lo apunten a el desde nodos ya existentes.

- Inserción de una arista:

Primero hay que comprobar si existen los nodos origen y destino, luego hay que comprobar que no exista una arista igual en esa dirección. Por ultimo se realizara la inserción.

- Borrado de un nodo:

Primero se borra un nodo y después todas sus aristas.




4 comentarios:

  1. hola que opina de nuestra investigación de equipo que realizamos ???

    ResponderEliminar
  2. Ps es una muy buena información la que presentan en este BLOG nos será de mucha ayuda a nosotros y otros compañeros que lo visiten y además nos explica muy bien la teoría de lo que son los árboles y los grafos dentro de la estructura de datos en Java.

    ResponderEliminar
  3. Es muy buen trabajo, contiene información muy clara sobre arboles y grafos, los vídeos son muy buenos. La presentación es bonita. Excelente trabajo

    ResponderEliminar
  4. ::. Ah pues la verdad el diseño está chido,la información es completa y entendible y yo creo que nos ayudará a aplicarlo en JAVA!! ;) .. :D

    ResponderEliminar