estructuras no lineales

42
 ESTRUCTURAS NO LINEALES ARBOLES GRAFOS

Upload: benjamin-bautista-mejia

Post on 06-Oct-2015

269 views

Category:

Documents


0 download

DESCRIPTION

Estructuras no lineales

TRANSCRIPT

  • ESTRUCTURAS NO LINEALESARBOLESGRAFOS

  • ARBOLESUn rbol es una estructura de datos ramificada (no lineal) que puede representarse como un conjunto de nodos enlazados entre s por medio de ramas. La informacin contenida en un nodo puede ser de cualquier tipo simple o compleja como otra estructura de datos. Los rboles permiten modelar diversas entidades del mundo real tales como, por ejemplo, el ndice de un libro, la clasificacin del reino animal, el rbol genealgico de un apellido, etc

  • CONCEPTOSAl nodo base, que debe ser nico, se le denomina raz y se establece el convenio de representarlo grficamente en la parte superior.En un rbol se representa una relacin jerrquica a partir del nodo raz en sentido vertical descendente, definiendo niveles. El nivel del nodo raz es 1.Desde la raz se puede llegar a cualquier nodo progresando por las ramas y atravesando los sucesivos niveles estableciendo as un camino recorrido.

  • CONCEPTOS...Se dice que un nodo es antecesor de otro cuando ambos forman parte de un camino y el primero se encuentra en un nivel superior (numeracin ms baja) al del segundo (numeracin ms alta).La relacin entre dos nodos separados de forma inmediata por una rama se denomina padre/hijo.Se denomina grado al nmero de hijos de un nodo.Se dice que un nodo es hoja cuando no tiene descendientes (grado 0)

  • CLASIFICACINARBOLESGENERALESBINARIOSUn rbol binario es un rbol en donde cada nodo posee 2 referencias a subarboles. En general, dichas referencias se denominan izquierda y derecha, y consecuentemente se define el subrbol izquierdo y subrbol derecho del rbol.En un rbol general cada nodo puede poseer un nmero indeterminado de hijos. La implementacin de los nodos en este caso se realiza de la siguiente manera: como no se sabe de antemano cuantos hijos tiene un nodo en particular se utilizan dos referencias, una a su primer hijo y otra a su hermano ms cercano. La raz del rbol necesariamente tiene la referencia a su hermano como NULL.

  • CLASIFICACINARBOLESGENERALESBINARIOS

  • ARBOLES BINARIOS DE BSQUEDACaractersticas:Todos los nodos a la izquierda son menores al padre.Todos los nodos a la derecha son mayores al padre.Y solo pueden tener 2 hijos a lo mucho.Cada noto tiene la siguiente forma:Class Nodo{nodo izq;nodo der;int dato;}

  • OPERACIONES SOBRE UN RBOLRecorrer rbolPreordenInordenPostordenInsercin nodoEliminar nodoBuscar nodo con informacinCalcular profundidad del rbolContar nodosContar hojas.

  • RECORRIDOS DE UN RBOL DE BSQUEDA BINARIA (ABB)Recorrido en preorden (prefijo)Visita la raz.Recorre el subrbol izquierdo.Recorre el subrbol derecho.RIDPreorden = A B D G C E H I F

  • PREORDEN (NODO) {NODO es un dato de tipo apuntador} {INFO, IZQ, DER son campos del registro}Si nodo != null entonces{ Visitar NODO {escribir NODO.INFO} llamar a preorden con NODO.IZQ{llamada recursiva a preorden con la rama izquierda del nodo} llamar a preorden con NODO.DER{llamada recursiva a preorden}}RECORRIDOS DE UN RBOL DE BSQUEDA BINARIA (ABB)

  • Recorrido en inorden (infijo)Recorre el subrbol izquierdo.Visita la razRecorre el subrbol derecho.Inorden = D G B A H E I C FIRDRECORRIDOS DE UN RBOL DE BSQUEDA BINARIA (ABB)

  • INORDEN (NODO){NODO es un apuntador a registro}Si NODO != null entonces{INORDEN (NODO.IZQ);Escribir NODO.INFO;INORDEN (NODO.DER);}RECORRIDOS DE UN RBOL DE BSQUEDA BINARIA (ABB)

  • Recorrido en postorden (postfijo)Recorre el subrbol izquierdo.Recorre el subrbol derecho.Visita la raz.

    Postorden : G D B H I E F C A IDRRECORRIDOS DE UN RBOL DE BSQUEDA BINARIA (ABB)

  • POSTORDEN (NODO)Si NODO != null entonces{POSTORDEN (NODO.IZQ);POSTORDEN (NODO.DER);Escribir NODO.INFO;}RECORRIDOS DE UN RBOL DE BSQUEDA BINARIA (ABB)

  • INSERCIN EN UN RBOL BINARIO DE BSQUEDALa insercin es una operacin que se puede realizar eficientemente en un rbol binario de bsqueda. La estructura crece conforme se inserten elementos al rbol. Los pasos que deben realizarse para insertar un elemento a un ABB son los siguientes:Debe compararse el valor o dato a insertar con la raz del rbol. Si es mayor, debe avanzarse hacia el subrbol derecho. Si es menor, debe avanzarse hacia el subrbol izquierdo.

  • Repetir sucesivamente el paso 1 hasta que se cumpla alguna de las siguientes condicionesEl subrbol derecho es igual a vaci, o el subrbol izquierdo es igual a vaci; en cuyo caso se proceder a insertar el elemento en el lugar que le corresponde.El valor o dato que quiere insertarse es igual a la raz del rbol; en cuyo caso no se realiza la insercin.INSERCIN EN UN RBOL BINARIO DE BSQUEDA (cont.)

  • AlgoritmoINSERCION1 (NODO, INFOR)Si NODO Null{Si (INFOR < NODO.INFO) Regresar a INSERCION1 con NODO.IZQ e INFORsinosi ( INFOR > NODO.INFO) Regresar a INSERCION1 con NODO.DER e INFOR sino Escribir El nodo ya se encuentra en el rbol} // } si elseCREA (OTRO) {Crear un nuevo nodo}Hacer OTRO.IZQ = null, OTRO.DER = null,OTRO.INFO = INFOR y NODO = OTRO}INSERCIN EN UN RBOL BINARIO DE BSQUEDA (cont.)

  • Supngase que quieren insertarse las siguientes los siguientes datos en un rbol binario de bsqueda que se encuentra vaci.

    120 87 43 65 140 99 130 22 56INSERCIN EN UN RBOL BINARIO DE BSQUEDA (cont.)

  • ELIMINAR UN NODO DE UN RBOL BINARIO DE BSQUEDAPara eliminar un nodo existen los siguientes casos:

    Si el elemento a borrar es Terminal (hoja), Si el elemento a borrar tiene un solo hijo, Si el elemento a borrar tiene los dos hijo,

  • Caso 1Si el elemento a borrar es terminal (hoja), simplemente se elimina.aux = aux.izq = nullEjemplo eliminar nodo 7ELIMINAR UN NODO DE UN RBOL BINARIO DE BSQUEDA (cont.)

  • Caso 2Si el elemento a borrar tiene un solo hijo, entonces tiene que sustituirlo por el hijoELIMINAR UN NODO DE UN RBOL BINARIO DE BSQUEDA (cont.)

  • Caso 3Si el elemento a borrar tiene los dos hijos, entonces se tienen que sustituir por el nodo que se encuentra mas a la izquierda en el subrbol derecho, o por el nodo que se encuentra mas a la derecha en el subrbol izquierdo.Ejemplo: eliminar el 6ELIMINAR UN NODO DE UN RBOL BINARIO DE BSQUEDA (cont.)

  • ELIMINAR UN NODO DE UN RBOL BINARIO DE BSQUEDA (cont.)

  • ELIMINAR UN NODO DE UN RBOL BINARIO DE BSQUEDA (cont.)// P, T, X, Y son apuntadores del tipo NODO baja(P, dato){ p = busca_nodo(p, dato); // Busca nodo a dar de baja Si (p == NULL) entonces Escribe El dato a dar de baja no existe." Si no Si ((p->izq == NULL) || (p->der == NULL)) entonces y = p; // Si no y = sucesor(p->der); Si (y->izq != NULL) entonces x = y->izq; Si no x = y->der; Si (x != NULL) entonces x->padre = y->padre; Si (y->padre ==NULL) entonces p = x; /* nueva raz */ Si no { t=y->padre; Si (t->izq == y) entonces t->izq = x; Si no t->der = x; } Si (x != y) entonces p->clave = y->clave; Quitar (y); } }

  • CALCULAR PROFUNDIDAD DE UN RBOL// calcula la profundidad de un rbolpublic int profundidad (Nodo raiz) {if (raiz == null) return 0;If (profundidad (raiz.der) > profundidad (raiz.izq))return profundidad (raiz.der) + 1;elsereturn profundidad( raiz.izq) + 1}

  • CONTAR HOJAS.// Cuenta hojas de un rbolpublic int contarHojas (Nodo raiz) {if (raiz = = null) return 0;If ((raiz.der == null) && (raiz.izq == null))Return 1;elsereturn contarHojas (raiz.izq) + contarHojas (raiz.der) }

  • GRAFOS El origen de la palabra grafo es griego y su significado etimolgico es "trazar". Aparece con gran frecuencia como respuesta a problemas de la vida cotidiana, algunos ejemplos podran ser: un grfico de una serie de tareas a realizar indicando su secuenciacin Proyecto, grafos matemticos que representan las relaciones binarias,una red de carreteras, la red de enlaces ferroviarios o areos o la red elctrica de una ciudad. En cada caso, es conveniente representar grficamente el problema dibujando un grafo como un conjunto de puntos(vrtices) con lneas conectndolos (arcos).

  • GRAFOSEn ciencias de la computacin y la matemtica, un grafo es una representacin grfica de diversos puntos que se conocen como nodos o vrtices, los cuales se encuentran unidos a travs de lneas que reciben el nombre de aristas arcos. Al analizar los grafos, los expertos logran conocer cmo se desarrollan las relaciones recprocas entre aquellas unidades que mantienen algn tipo de interaccin.

  • Los grafos son estructuras de datos no lineales que tienen una naturaleza generalmente dinmica. Su estudio podr dividirse en dos grandes bloques:

    GRAFOSDirigidos DigrafosNo DirigidosUn grafo dirigido es un grafo cuyas aristas son todas dirigidas (arcos)Aplicaciones: transporte, planicacin de tareas, cadena alimentar,calicacin de sitios www, cadenas de dependencia, etc.Un grafo no dirigido es un grafo que no tiene un rden especfico GRAFOSEl grado de un Vrtice Ndo, es el nmero de Arcos Aristas incidentes en l.

  • Sea un coleccin cuyos datos son: * Ciudades* Aeropuertos* Computadores de una red* Puntos del plano de una ciudad

    Queremos modelar:+ Rutas entre ciudades+ Rutas areas+ Envo de correo electrnico+ Recorridos tursticospuntos del plano de unaciudadGRAFOS

  • GRAFOSREPRESENTACIN DE GRAFOSSecuencial a travs de Matrz de AdyacenciaEnlazada a travs de Listas de Adyacencia

  • REPRESENTACION DE GRAFOS POR MATRIZ DE ADYACENCIASe asocia cada fila y cada columna a cada nodo del grafo, siendo los elementos de la matriz la relacin entre los mismos, tomando los valores de 1 si existe la arista y 0 en caso contrario..

  • REPRESENTACION DE GRAFOS POR LISTA DE ADYACENCIASe asocia a cada nodo del grafo una lista que contenga todos aquellos nodos que sean adyacentes a l.

  • RECORRIDO EN GRAFOSRecorrer un grafo significa tratar de alcanzar todos los nodos que estn relacionados con uno que llamamos nodo de salida, para ello existen dos tcnicas principalmente:Recorridos:En profundidad.En Anchura.Trata de buscar los caminos que parten del nodo de salida hasta que no es posible avanzar ms. Cuando ya no se puede avanzar ms vuelve atras en busca de caminos alternativos, que no fueron analizados previamente.Recorre el grafo a partir de un nodo dado en niveles; es decir primero los que estn a una distancia de un arco del nodo de salida, despus los que estn a dos arcos y as sucesivamente.

  • RECORRIDO EN GRAFOSDEFINICIONESGrado de un vertice: Numero de aristas que lo contienen.

    Grado de un vrtice:* Nmero de aristas/arcos que lo contienen Grado de salida de un vertice v* Numero de arcos cuyo vertice inicial es v. Grado de entrada de un vertice v* Numero de arcos cuyo vertice final es v.

  • RECORRIDO EN GRAFOSDEFINICIONES

  • RECORRIDO EN GRAFOSDEFINICIONES

  • RECORRIDO EN GRAFOSDEFINICIONES

  • RECORRIDO EN GRAFOSDEFINICIONES

  • RECORRIDO EN GRAFOSBUSQUEDA PRIMERO EN PROFUNDIDADDFS (DEPTH FIRST SEARCH)Equivalente al recorrido en preorden de un arbol, utilizando pilas (recursividad).

  • RECORRIDO EN GRAFOSBUSQUEDA PRIMERO EN PROFUNDIDADDFS (DEPTH FIRST SEARCH)Lo que se quiere es recorrer desde la raz hasta los nodos extremos u hojas por cada una de las ramas. En este caso los niveles de cada nodo no son importantes. La mejor forma de hacer este algoritmo es de forma recursiva, en la funcin se pasa por parmetro el nodo a buscar y el nodo actual (El nodo que esta siendo visitado en cada ambiente de recursin), que en la primera llamada ser el nodo raz..En cada llamada recursiva se marca el nodo actual como visitado y luego se verifica si es el nodo buscado para salir de la recursin ( caso base ). .Si no es el nodo requerido, se hace la llamada recursiva con todos los nodos hijos del nodo actual, no se visitarn todos los hijos de forma consecutiva, sino que el algoritmo recorrer en profundidad hasta llegar a un nodo extremo o nodo hoja (Preorden RID), antes de retornar al ambiente de recursin en donde se encuentran los otros nodos hijos

  • RECORRIDO EN GRAFOSBUSQUEDA PRIMERO EN ANCHURABFS (BREADTH FIRST SEARCH)La bsqueda en anchura supone que el recorrido se haga por niveles. La estrategia es utilizar una cola que nos permita almacenar temporalmente todos los nodos de un nivel, para ser procesados antes de pasar al siguiente nivel hasta que la cola est vaca.Inmediatamente despus de declarar la estructura de cola, se agrega el nodo raz para poder iniciar el proceso de bsqueda. Se hace porque se requiere tener al menos un elemento en la cola, dado que la condicin de salida es que la cola est vaca. Luego marcamos el nodo raz como visitado.Cada vez que se visita un nodo, se desencola y se obtiene el valor del nodo para ir indicando el recorrido. Luego agregamos a la cola todos los nodos del siguiente nivel y los marcamos como visitados antes de comenzar el ciclo de nuevo, en el que procesaremos estos nuevos nodos que hemos agregado a la cola, hasta encontrar el elemento buscado.

  • RECORRIDO EN GRAFOSLa bsqueda en anchura se recomienda cuando lo que se necesita es buscar el camino ms corto en grafos no ponderados.

    La bsqueda en profundidad DFS posee varias aplicaciones la mas importante es para problemas de conectividad, si un grafo es conexo, detectar ciclos en un grafo, nmero de componentes conexas,etc. y es bastante til en otro algoritmos como para hallar las componentes fuertemente conexas en un grafo ( Algoritmo de Kosaraju, Algoritmo de Tarjan), para hallar puntos de articulacin o componentes biconexas ( puentes ), para recorrido en un circuito o camino euleriano, topological sort, flood fill y otras aplicaciones.

    Cuando no tiene importancia el orden en que visitemos los nodos y aristas del grafo, se puede usar cualquiera de los dos algoritmos.