5. Estructuras no lineales estáticas y dinámicas

Slides:



Advertisements
Presentaciones similares
ESTRUCTURA DE DATOS Unidad 04 TDA no lineales - Árboles.
Advertisements

IBD Clase 7.
ESTRUCTURA DE DATOS Unidad 04 Árboles BINARIOS.
ESTRUCTURA DE DATOS Unidad 04 Árboles BINARIOS DE BUSQUEDA.
Árboles Grafo que no contiene ciclos, es decir es un grafo también acíclico, pero a su vez es conexo.
ÁRBOLES EN C UNIVERSIDAD “ALONSO DE OJEDA” Facultad de Ingeniería
Programación y Estructuras de Datos
Igor Santos Grueiro. Muchos objetos tienen CLAVE.
ÁRBOLES BINARIOS DE BUSQUEDA
Operaciones sobre un árbol
Tema 5 Grafos..
Árboles binarios. Algoritmos básicos
Tema 4 Árboles. Árbol sobre matriz.
Tema 4 Árboles. Conceptos Generales..
ESTRUCTURAS DE DATOS AVANZADAS
Cont. Arbol Binario de Búsqueda
Árboles balanceados AVL

Integrantes: Esteban Jiménez Guesseppe Lozada Mario Rodriguez Gustavo Tenorio Fabio.
ÁRBOLES DE EXPRESION.
Definiciones: conjuntos, grafos, y árboles
Definición Estructura de datos jerárquica (no lineal) que puede representarse como un conjunto de nodos enlazados entre sí por medio de ramas. Formalmente,
Arboles (Trees) Arboles Arboles binarios Recorridos de árboles
Cont. Arbol Binario de Búsqueda (2). Sobre los recorridos Las versiones recursivas de los recorridos son costosas debido a la gran cantidad de llamadas.
Diplomado en Informática Aplicada
Almacenamiento y Recuperacion de Información TAD_ABB Ana Lilia Laureano Cruces Universidad Autónoma Metroplotiana.
Estructura de Datos Lineales
Material de apoyo Unidad 4 Estructura de datos
Árboles.
ÁRBOLES BINARIOS DE BÚSQUEDA
Estructuras de Datos MC Beatriz Beltrán Martínez.
Definiciones: conjuntos, grafos, y árboles
Árboles, montículos y grafos Cola de prioridades, montículos
Estructura de Datos En C++
ESTRUCTURAS DE DATOS I Conocer, comprender y analizar algunos de los principales tipos de estructuras de datos.
ARBOLES ESTRUCTURAS DE DATOS.
Estructura de Datos y Algoritmos
Árboles binarios de búsqueda
Arboles M.C. José Andrés Vázquez FCC/BUAP
ARBOLES ESTRUCTURAS DE DATOS.
Definición, propiedades, recorridos x a q yb w e vu fo.
ÁRBOLES BINARIOS DE BÚSQUEDA BALANCEADOS
ARBOLES ROJO – NEGROS. INTEGRANTES Bazan Gonzales Jose Antonio García López Carlos Omar.
Árboles.

Árboles Recomendado: 1. Nivelación Funciones
Árboles Binarios Estructuras de Datos.
Árboles de Búsqueda Binaria
Con el objeto de mejorar el rendimiento en la búsqueda surgen los árboles balanceados. La idea central de estos es la de realizar reacomodó o balanceos.
Grafos..
Unidad 6: Árboles.
Definiciones: conjuntos, grafos, y árboles
1 Árboles de Búsqueda Binaria Agustín J. González ELO-320: Estructura de Datos y Algoritmos.
Punteros, referencias Listas enlazadas Arboles
ARBOLES GENERALIZADOS
Árboles Binarios de Búsqueda (ABB)
Arboles Binarios.
A YUDANTÍA 5: A RBOLES Carlos Pulgar R. Mail: Página Ayudantía:
Árboles Binarios * Recorridos * Tipo
Árboles Equilibrados Estructuras de Datos MC Beatriz Beltrán Martínez Primavera 2015.
Matemáticas Discretas MISTI
Algoritmos y estructura de datos en I.O. Arboles Generales.
Cobol C Pascal Fortran 2. OBJETOS DE DATOS SmallTalk Java C++
ESTRUCTURA DE DATOS II Ing. Freddy Melgar Algarañaz Árboles Binarios *Recorridos *Tipo.
UNIDAD ACADÉMICA PROFESIONAL TIANGUISTENCO LICENCIATURA EN INGENIERÍA DE SOFTWARE UNIDAD DE APRENDIZAJE: ESTRUCTURAS DE DATOS Créditos institucionales.
Tema 3 Árboles. Conceptos Generales. Curso 2014/2015 ETSISI UPM.
TAD’s ARBOLES GENERALIZADOS
Arboles. Árboles ¿Qué son? Son Estructuras de datos “No lineales”” ¿Para que se utilizan? Representar Fórmulas Algebraicas Organizar Objetos Inteligencia.
Árboles Binarios Estructuras de Datos.
Árboles Binarios Estructuras de Datos. Las estructuras dinámicas son las en la ejecución varia el número de elementos y uso de memoria a lo largo del.
Transcripción de la presentación:

5. Estructuras no lineales estáticas y dinámicas Dra. María Lucía Barrón Estrada

Operaciones básicas sobre árboles binarios Conceptos de árbol Árboles binarios Árboles generales Operaciones básicas sobre árboles binarios Creación Inserción, eliminación y búsqueda Recorridos sistemáticos Balanceo Conceptos de grafos Grafos simples Grafos dirigidos Representación de grafos Operaciones básicas sobre grafos El camino mas corto

Conceptos de Árboles Un árbol es una estructura de datos no lineal que representa una relación jerárquica de sus elementos. Los árboles se utilizan para representar información ordenada, relaciones estructurales y para modelar situaciones que se expresan en términos de jerarquías. Tipos de árboles Generales Binarios Binarios de búsqueda AVL, Rojo y Negro, B+, etc.

Árboles binarios Un árbol binario T es un conjunto finito de elementos llamados nodos, tal que: T es vacío (árbol nulo o vacío): No contiene elementos. T contiene un nodo llamado Raíz de T y los nodos restantes de T forman un par ordenado de árboles binarios disjuntos T1 y T2. Si T contiene una raíz R los 2 árboles T1 y T2 se llaman respectivamente subárbol izquierdo y derecho de la raíz R. - 5 1 raíz Subárbol izquierdo derecho

Ejemplo de estructuras que NO son árboles binarios + * - / 2 5 1 12 4 + * - / 2 1 12 4

TERMINOLOGIA DE ÁRBOLES Hijo: Nodo que desciende de otro nodo. Padre: Nodo que tiene hijos (descendientes). Raíz: Único nodo que no tiene padre y tiene nivel 0. Hoja (Terminal): Nodo que sus árboles izquierdo y derecho están vacíos. Camino: Un camino entre dos elementos e1 y e2 de un árbol binario es una secuencia <x1,x2,..,xn> donde x1 es e1 y xn es e2 y cada elemento xi es padre de xi+1. La longitud de un camino <x1,x2,..,xn> es n-1 Rama: Camino que termina en una hoja. Subárbol: es un árbol que depende de otro árbol.

Arista: Línea que une a 2 nodos. Nivel: Es el número de aristas entre ese nodo y la raíz. Profundidad (Altura): Máximo número de nodos de una rama desde la raíz ( Máximo Nivel + 1 ). Generación: Todos los nodos que tienen el mismo número de nivel. Ancestro de X: Cualquier nodo del cuál X es descendiente. Descendiente de X: Cualquier nodo que se encuentre en el subárbol donde X es raíz. Peso: es el numero de elementos de un árbol. Número de Sucesores de cualquier nodo en un árbol binario = 0, 1, 2.

Ejemplo de Árbol y Sus Componentes. raíz Nivel 0 Pedro Juan Maria Ana Raúl Silvia Sofía Tito Eli Subárbol derecho de Pedro Nivel 1 arista Nivel 2 Ancestro? Descendiente? # de nodos? Altura? Generación? hermanos hoja

Árboles Similares: Son aquellos que tienen la misma estructura. Árboles Copia: Aquellos que son similares y tienen el mismo contenido en sus correspondientes nodos. A B C D G * 5 4 3 Árbol A1 Árbol A2 Árbol A3 A1 similar a A2 A3 copia de A1

Aplicaciones de árboles Estatuto if de un LP

Aplicaciones de árboles (a-b)/((c*d)+e) 12/4*2 + (5-1) / - + a b * e c d + * - / 2 5 1 12 4

Representación Gráfica de AB 3) Grafo no dirigido 1) Diagrama de Venn 4)Notación Identada 2) Notación Decimal Dewey 1A 1.1B 1.1.1D 1.1.1.1H 1.1.2E 1. 2C 1.2.1 F 1.2.1.1I 1.2.1.2 J 1.2.2G 5) Anidación de paréntesis ( A ( B ( D ( H ),E ), C ( F ( I, J), G ) ) )

Árbol Binario de Búsqueda Un árbol binario de búsqueda (ABB) es un árbol binario creado de manera especial para facilitar la localización de sus elementos. Se pueden realizar eficientemente operaciones de: Inserción Eliminación Búsqueda Recorrido Un ABB cumple con las siguientes reglas para todo nodo T del árbol: Todos los valores de los nodos del subárbol izquierdo son menor o igual al valor del nodo T. Todo los valores de los nodos del subárbol derecho son mayor o igual al valor del nodo T.

Inserción en un Árbol Binario de Búsqueda. Si el árbol esta vacío, el elemento se inserta en la raíz. Si el árbol no esta vacío el elemento se compara con la raíz si es menor se inserta en el subárbol izquierdo, si es mayor se inserta en el subárbol derecho. El proceso de insertar un elemento es recursivo, ya que la inserción en el subárbol izquierdo o derecho sigue la misma filosofía.

Insertar elementos Insertar 45 Insertar 23 Insertar 2 Insertar 7 65 7 2 38 96 52 48 raíz

Eliminación de un Árbol Binario de Búsqueda. Casos: N- Nodo a eliminar: Si N es hoja (no tiene hijos) entonces N se elimina haciendo nulo el enlace del padre de N hacia N. Si N tiene exactamente un hijo, N se elimina reemplazando el enlace del padre de N con el enlace del hijo de N. Si N tiene 2 hijos, sustituir por el nodo que se encuentra mas a la izquierda en el subárbol derecho de N o por el nodo que esta mas a la derecha en el subárbol izquierdo.

Eliminación de un Árbol BB. 45 23 65 7 2 38 96 52 48 raíz raíz 45 Caso 1: Eliminar 48 (enlace padre n = null) 23 65 2 38 52 96 7 Caso 2: Eliminar 2 (enlace padre n = enlace hijo n) 45 23 65 7 2 38 96 52 48 raíz

Eliminación de un Árbol BB. Caso 3: Eliminar 65 (sustituir nodo por uno de: nodo +Izq de subárbol derecho nodo +Der de subárbol izquierdo ) 45 23 65 7 2 38 96 52 48 raíz 45 23 52 7 2 38 96 48 raíz

Árboles Binarios Cuales son los elementos necesarios para definir un árbol binario? Cuales son las operaciones asociadas a un árbol binario? Será posible usar la misma implementación de las operaciones para todas las aplicaciones?

Interfase de un árbol binario public interface IBinaryTree { public boolean buscar(int d); public void insertar(int d); public int tamaño(); public void remover(int d); public boolean vacio(); … // recorridos public void inorden(); public void postorden(); public void preorden(); }

public class SBinaryTree implements IBinaryTree{ private Nodo raiz; // constructor para un arbol vacio   public void BinaryTree() {     raiz = null;   } public boolean busca(int d) {…} public void inserta(int d) {…} public int tamaño() {..} public void remover(int d){…} public boolean vacio(){…} // recorridos public void inorden(){…} public void postorden(){…} public void preorden(){…} … } class Nodo {     Nodo izquierdo;     Nodo derecho;     int dato;     Nodo(int d) {       izquierdo = null;       derecho = null;       dato = d;     }   }

Implementación usando recursión Los árboles binarios son estructuras definidas recursivamente con dos reglas: Una raíz nula Una raíz no nula que contiene dos subárboles que a su vez son también árboles binarios. Cual es el caso base? Como se podría definir el progreso de los métodos?

Implementación usando recursión Las operaciones sobre un árbol inician siempre en la raíz. Pero, el campo raíz de la clase esta declarado como privado, lo que indica que no esta disponible fuera de la clase. Los métodos de la interfase sirven para establecer la forma de ejecución para los usuarios de la clase. En la clase se pueden definir métodos recursivos que inicien el procesamiento desde la raíz.

Buscar un elemento en un ABB // método para el usuario public boolean busca(int d) {     return busca(raiz, d);   } // metodo auxiliar para el procesamiento   private boolean busca(Nodo nodo, int d) {     if (nodo==null)       return false;     if (d==nodo.dato)       return true;     else if (d<nodo.dato)       return busca(nodo.izquierdo, d);        else       return busca(nodo.derecho, d); }

Obtener el número de elementos // método para el usuario public int tamaño(){ return tamaño(raiz); } // metodo auxiliar para el procesamiento private int tamaño(Nodo raiz){ if (raiz == null) return 0; else return 1+ tamaño(raiz.izquierdo)+ tamaño(raiz.derecho);

Insertar elementos en un ABB public void insertar(int n){ raiz = insertar(raiz, n); } //método auxiliar private Nodo insertar(Nodo r, int n){ if (r == null) r = new Nodo(n); else if (n<=r.dato) r.izquierda = insertar(r.izquierda, n); r.derecha = insertar(r.derecha, n); return r;

Recorridos de un AB Inorden = 2,7,23,38,45,48,52,65,96 Visitar el subarbol izquieredo en inorden Visitar el nodo raiz Visitar el subarbol derecho en inorden Preorden= 45,23,2,7,38,65,52,48,96 Visitar el subarbol izquieredo en preorden Visitar el subarbol derecho en preorden Postorden= 7,2,38,23,48,52,96,65,45 Visitar el subarbol izquieredo en postorden Visitar el subarbol derecho en postorden 45 23 65 7 2 38 96 52 48 raíz

Recorridos de un AB Inorden = D,G,B,A,H,E,I,C,F Visitar el subarbol izquieredo en inorden Visitar el nodo raiz Visitar el subarbol derecho en inorden Preorden= A,B,D,G,C,E,H,I,F Visitar el subarbol izquieredo en preorden Visitar el subarbol derecho en preorden Postorden= G,D,B,H,I,E,F,C,A Visitar el subarbol izquieredo en postorden Visitar el subarbol derecho en postorden raíz A B C F D E G H I

Implementación de Inorden public void inorden(){ inorden(raiz); System.out.println(); } public void inorden(Nodo r){ if (r!=null) { inorden(r.izquierda); System.out.print (r.dato+" "); inorden(r.derecha);

Implementación de Preorden public void preorden(Nodo r){ if (r!=null) { System.out.print (r.dato+" "); preorden(r.izquierda); preorden(r.derecha); } public void preorden(){ preorden(raiz); System.out.println();

Implementación de Postorden public void postorden(){ postorden(raiz); System.out.println(); } public void postorden(Nodo r){ if (r!=null) { postorden(r. izquierda); postorden(r.derecha); System.out.print (r.info+" ");

Ejercicios para ABB Escribe un método que regrese el número de hijos de n Escribe un método que obtenga el padre de n Escribe un método que obtenga para cada nodo su balance (#nodos subárbol izquierdo - #nodos subárbol derecho) Escribe un método para Obtener los nodos de una generación Escribe un método para Buscar el elemento mayor de un árbol binario Escribe un método para encontrar el promedio de los elementos de un árbol que contiene datos enteros.

Arboles Generales Un árbol general, es un conjunto finito no vacío T de elementos llamados nodos, tales que: T contiene un elemento R, llamado Raíz de T. Los restantes elementos de T forman una colección ordenada de 0 o más a árboles disjuntos T1, T2, … Tm. Los árboles T1,T2,…Tm son llamados subárboles de R.

Árboles binarios Vs Generales: Un AB puede estar vacío y el AG no. En un AB un nodo distingue entre sus hijos como izquierdo y derecho; en un AG no hay distinción para hijos. Ejemplo: Suponer que existen 2 árboles: A B D C A B D C Si los 2 son AB son diferentes. Si los 2 son AG son iguales.

Árboles Generales Padre: Nodo del cual dependen otros nodos. Terminología: Padre: Nodo del cual dependen otros nodos. Hijo: Nodo sucesor de otro nodo. Grado de un árbol: Máximo número de sucesores de un nodo. Hermanos: Nodos con el mismo padre. Generación: Todos los nodos de un mismo nivel. Bosque: es una colección de 0 o mas árboles distintos.

Bosque: Es una colección de 0 o más árboles distintos. Ejemplo: Si se elimina la raíz R de un árbol general T se obtiene un bosque que consiste en los subárboles de R. A M E N F H B G D J L K C I

Conversión de un árbol en bosque Arbol 1 Arbol 2 Arbol 3 M E N F H B G D J L K C I

Conversión de Árboles Generales a Árboles Binarios. 1.-Enlazar los hijos de cada nodo de forma horizontal de izquierda a derecha. 2.-Enlazar de forma vertical el nodo padre con el hijo que se encuentra mas a la izquierda. 3.-Eliminar los vínculos viejos entre hijos y padres. 4.-Rotar el diagrama 45º. A B C D

Ejemplo 2. Raiz Raiz A E D I F G B C K J H L X A C L X H G B D E F J K

Convertir un bosque a AB: Enlazar en forma horizontal las raíces de los distintos árboles generales. Enlazar los hijos de cada nodo en forma horizontal. Enlazar en forma vertical el nodo padre con el hijo mas a la izquierda. Eliminar los vínculos del padre con los hijos. Rotar el diagrama resultante. M E N F H B G C I D J L K Arbol 1 Arbol 2 Arbol 3

M E N F H B G C I D J L K Arbol 1 Arbol 2 Arbol 3 Arbol General L

Convertir un bosque a AB: D G F E H I J K M L P S R Q T X U

A B E F C D G H I P Q J K L M T R X S AB:

Representación en memoria de Árboles generales. Los hijos de un nodo se pueden representar de diversas formas: Cada nodo contiene un campo de liga para cada hijo. Cada nodo contiene un arreglo de hijos. Cada nodo contiene un vector de hijos. Cada nodo contiene una lista de hijos.

Representación gráfica Cada nodo contiene un arreglo o vector de hijos Cada nodo contiene un campo de liga para cada hijo. Info h1 h2 ... hn Info hijos Info hijos Cada nodo contiene una lista de hijos

Aplicaciones de árboles generales Directorio de archivos Organigrama de una empresa Contenido de un documento. Diseño por componentes. Juegos Estructuras de un lenguaje de programación.

Recorridos de un arbol general Inorden. Recorrer en Inorden T1 Visitar la Raiz Recorrer en Inorden T2 … Recorrer en Inorden Tn Preorden. Visitar la Raiz Recorrer en Preorden T1 Recorrer en Preorden T2 … Recorrer en Preorden Tn Postorden. Recorrer en Postorden T1 Visitar la Raiz Recorrer en Postorden T2 … Recorrer en Postorden Tn

Otros árboles Árboles balanceados Por altura (AVL) Por peso (perfectamente balanceados) Rojinegros

Árboles Balanceados Árboles balanceados son aquellos ABB que cumplen con una condición de equilibrio (que sus subárboles izquierdo y derecho tengan la misma profundidad) Los árboles balanceados optimizan la búsqueda de elementos. Árboles AVL (1962- Adelson, Velskii y Landis) la altura de los subárboles asociados a cada elemento no pueden diferir en más de 1 y los dos subárboles son también AVL.

Ejemplos de árboles AVL 20 15 18 5 30 Altura = 1 Altura = 2 Altura = 3 15 18 5 Altura = 2 Altura = 1

Inserción en árboles balanceados Insertar 10,18,27 35 20 25 15 40 18 10 27 35 20 40 Insertar 37,45 35 20 25 15 40 45 37 15 25

Inserción en árboles balanceados Caso 1. Las ramas izquierda y derecha del árbol tienen la misma altura. (HRI = HRD ) 35 20 40 15 35 20 40 Caso 1.1 Inserta elemento en rama izquierda (RI) 50 35 20 40 Caso 1.2 Inserta elemento en rama derecha (RD)

Inserción en árboles balanceados Caso 2. Las ramas izquierda y derecha del árbol tienen altura diferente. (HRI ≠ HRD ) 15 35 20 40 Caso 2.1.1 Inserta en RI 50 Caso 2.1 suponer HRI < HRD 35 Caso 2.1.2 Inserta en RD 50 35 20 40 75 20 40 50

Inserción en árboles balanceados Caso 2. (continuación) Las ramas izquierda y derecha del árbol tienen altura diferente. (HRI ≠ HRD ) 15 35 20 40 Caso 2.2.1 Inserta en RI 5 Caso 2.2 suponer HRI > HRD 15 35 20 40 Caso 2.1.2 Inserta en RD 15 35 20 40 50

Reestructuración Factor de equilibrio: Es la diferencia entre la altura de la rama derecha y la altura de la rama izquierda. FE = HRD - HRI Cada nodo tiene asociado un factor de equilibrio que se calcula para todos los elementos de la rama donde se realizó la inserción. Este se utiliza para saber si el árbol esta balanceado o debe reestructurarse. -1 65 1 -1 45 70 -1 33 54 68 50

Rotaciones Caso 1 Rotación simple por la rama izquierda padre.fe = -2 padre.izq = hijo.der hijo.der = padre padre = hijo 15 35 20 -1 -2 20 15 35 padre.fe = -2 hijo.fe = -1 Caso 2 Rotación simple por la rama derecha 75 35 50 1 2 padre.der = hijo.izq hijo.izq = padre padre = hijo padre.fe = 2 hijo.fe = 1

Rotaciones Caso 3 Rotación compuesta Derecha Izquierda p padre.fe = 2 45 35 50 hijo.der = n.izq n.izq= hijo padre.izq = n.der n.der = padre padre = n p h n 35 padre.fe = 2 hijo.fe = -1 -1 50 45 Caso 4 Rotación compuesta Izquierda Derecha 35 20 1 -2 25 20 35 padre.fe = -2 hijo.fe = 1 25

5.3 Grafos Un grafo es una estructura de datos no lineal que consta de: Un conjunto finito V de elementos llamados vértices (Nodos, Puntos). Un conjunto E de aristas tales que cada arista e ε E esta identificada por un único par (desordenado) [u,v] de nodos de V denotado como e = [u,v].

E = (u, v) los vértices u, v son vecinos. Un grafo se denota como G = (V, E). NODOS VECINOS O ADYACENTES: Dos nodos son vecinos si existe una arista que los una. E = (u, v) los vértices u, v son vecinos. EL GRADO DE UN NODO U: es el número de aristas que contienen a u. NODO AISLADO: Son aquellos nodos que tienen grado 0. GRAFO ETIQUETADO: Es un grafo donde cada arista tiene un valor asignado.

Ejemplo de grafos: Miami Las Vegas Los Ángeles Portland Chicago New York V(G)= Los Ángeles, Portland, Chicago, New York, Las Vegas, Miami. E(G)={(Los ángeles, Chicago),(Los ángeles, New York), (Chicago, New York), (Chicago, Las Vegas), (Las vegas, New York), (Las Vegas, Miami)}

( Los Ángeles, Chicago) = ( Chicago, Los Ángeles) Las aristas no están ordenadas lo que significa que: ( Los Ángeles, Chicago) = ( Chicago, Los Ángeles) ( u1, v2) = (u2, v1) Grado (Los Ángeles) = 2 Grado (Chicago) = 3 Grado de Portland = 0

Grafo dirigido Un grafo dirigido es una estructura de datos no lineal que consta de: Un conjunto finito de elementos llamados vértices. Un conjunto E de aristas con orientación (flechas) que conectan a 2 nodos. Miami Los Ángeles Portland Chicago New York Las Vegas

Terminología: Un camino P de longitud n desde U hasta V es una secuencia de n+1 nodos escrita como: P (V0,V1,…,Vn). Donde: U = V0 Vi es adyacente a Vi-1 para toda i = 1, 2, …, n V = Vn Bucle: Conexión de un vértice consigo mismo. Camino Cerrado: Es un camino donde V0 = Vn , el vértice inicial y el final son el mismo. Camino Simple: Es aquel donde todos los vértices son distintos (Solo V0 puede ser = a Vn).

Ciclo: Camino simple cerrado de longitud 3 o mayor. K-Ciclo: Es un ciclo de longitud K. Grafo Convexo: Grafo donde existe un camino entre cualesquiera dos de sus nodos. Grafo Completo: Un grafo es completo si cada nodo U de G es adyacente a todos los demás nodos de G. Multigrafo: Es una generalización de un grafo que: Contiene bucles y /o Contiene aristas múltiples que conectan a los mismos extremos.

Grafo Completo Dirigido

Máximo Numero De Aristas: GRAFO: Gn = n ( n - 1 ) G3 = 4(3) = 12 = 6 2 2 2 GRAFO DIRIGIDO: GDn = n ( n – 1 ) G4 = 4 (3) = 12 G1: CICLO A, B, C, A GRAFO ACICLICO: Es un grafo que no contiene ciclos. (Un árbol es un grafo aciclico). F A B E C D

Grafo G Subgrafo S1 Subgrafo S2 Subgrafo S3 Un Subgrafo S1 de un grafo G se define como: V (S1) Є V (G) E (S1) Є E (G) S1 es un subconjunto de G si y solo si V (S1) Є V (G) y E (S1) Є E (G). Ejemplo: Grafo G Subgrafo S1 Subgrafo S2 Subgrafo S3

Grafo débilmente conectado: Para cada par de vértices (u,v) existe un camino de u a v tal que vo = u y vn= v y para cada componente de la ruta (vi, vi+1) existe en E(G) el componente (vi, vi+1) o (vi+1,vi). El camino quizá no puede recorrerse debido a la orientación de sus aristas.

Representación secuencial de grafos: Se basa en una matriz de adyacencia. Suponga que G es un grafo dirigido simple de m nodos y que los nodos de G han sido ordenados y llamados V1, V2, … , Vn. La matriz de adyacencia para G es de tamaño m x m definiendo cada elemento como: aij = 1 : si Vi es adyacente a vj. Existe e = (vi, vj) 0 : en caso contrario. Ejemplo 1: 0 0 0 1 1 0 1 1 1 0 0 1 0 0 1 0 A = V1 V2 V3 V4 V1 V2 V3 V4 X Y Z W X Y Z W V1 = X V2 = Y V3 = Z V4 = W X W Z Y = A1

Para un grafo no dirigido, la matriz de adyacencia es una matriz simétrica: ai,j = aj,i X Y Z W X Y 0 1 1 1 1 0 1 1 1 1 0 2 1 1 2 0 X Y Z W Z W

Considere las potencias A1, A2, A3 … de la matriz de adyacencia ak(i,j) = la entrada i,j de la matriz Ak. A1 – Representa el número de caminos de longitud 1 desde el nodo vi hasta vj. Ak – Representa el número de caminos de longitud k desde el nodo vi hasta el nodo vj. 0 0 1 1 2 0 2 3 1 0 1 2 1 0 1 1 1 0 0 1 1 0 2 2 1 0 1 1 0 0 1 1 0 0 0 1 1 0 1 2 0 0 1 1 1 0 0 1 A2= A4= A3= Caminos de long. 2 Caminos de long. 3 Caminos de long. 4

Representación en memoria dinámica: Un grafo se puede representar con una LISTA DE ADYACENCIA. Una lista de adyacencia para un vértice a es una lista ordenada de todos los vértices adyacentes a a. Si el Número de nodos es fijo se pueden almacenar en un arreglo. Ejemplo: Lista de nodos adyacentes a cada nodo. Arreglo de nodos b c a d a d c b

* Si el número de nodos puede variar, se deben almacenar en una lista. Lista de Nodos a b c d

Operaciones sobre grafos: Buscar un vértice/arista. Insertar un vértice/arista. Eliminar un vértice/arista. Recorrer el grafo. Número de vértices Vacío. Los vértices se mantienen en una lista de vértices. No pueden existir vertices repetidos. Los aristas se mantienen en una lista ordenada para cada vértice.

Búsqueda de el camino más corto: Encontrar el camino más corto desde A (nodo inicial) hasta I (nodo final): Marcar todos los nodos con infinito, y seleccionar nodo inicial (iniciar con 0) como nodo actual Calcular los caminos del nodo actual a los nodos adyacentes, reemplazar el camino actual por el nuevo solo si este es menor. Marcar el nodo actual como “visitado”. Seleccionar como nodo actual el nodo con camino de valor mínimo. Repetir para el nodo actual seleccionado los pasos 2, 3, 4 hasta llegar al nodo final o hasta agotar todos los nodos.

∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ Ejemplo: (3,A) (5,A, B) * 2 * B E 3 1 5 * ∞ ∞ A 3 (7,A, B, E) G C * * 7 1 ∞ ∞ (5,A) ∞ 4 2 * F I 2 ∞ 5 D * ∞ 1 (8, A, B, E, G) (8, A, B, E, G) ∞ * ∞ H (5,A, D) ∞ (4,A) * ∞ ∞ (10,A, D, H)

Ejemplo 2. Encontrar el camino mas corto de A a Z