Descarga la aplicación para disfrutar aún más
Vista previa del material en texto
UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO FACULTAD DE ESTUDIOS SUPERIORES ACATLÁN APLICACIÓN DEL ALGORITMO DE DIJKSTRA AL PROBLEMA DE LA RUTA MÁS CORTA Y SU DISTANCIA (CASO PRÁCTICO DEL FERROCARRIL EN MÉXICO) T E S I S QUE PARA OBTENER EL TÍTULO DE A C T U A R I O P R E S E N T A: RODRIGO ISRAEL SANTIAGO GONZÁLEZ Asesor: DRA. MARICARMEN GONZÁLEZ VIDEGARAY Mayo, 2012 UNAM – Dirección General de Bibliotecas Tesis Digitales Restricciones de uso DERECHOS RESERVADOS © PROHIBIDA SU REPRODUCCIÓN TOTAL O PARCIAL Todo el material contenido en esta tesis esta protegido por la Ley Federal del Derecho de Autor (LFDA) de los Estados Unidos Mexicanos (México). El uso de imágenes, fragmentos de videos, y demás material que sea objeto de protección de los derechos de autor, será exclusivamente para fines educativos e informativos y deberá citar la fuente donde la obtuvo mencionando el autor o autores. Cualquier uso distinto como el lucro, reproducción, edición o modificación, será perseguido y sancionado por el respectivo titular de los Derechos de Autor. A mis padres por su apoyo durante mis estudios. A mi esposa por su gran dedicación a mi persona. No es tarea de la Universidad ofrecer lo que la sociedad le pide, sino lo que la sociedad necesita. EDW. Índice General Introducción ........................................................................... i Actualidad del ferrocarril en México .................................................... i Ferrocarriles participantes en México ................................................. iii Delimitación del problema ................................................................... v Hipótesis ............................................................................................ vii Justificación ....................................................................................... vii Capítulo 1 .............................................................................. 1 Fundamentos de la Teoría de Grafos ................................. 1 Introducción ......................................................................................... 1 Definiciones ......................................................................................... 1 Subgrafos ............................................................................................. 5 Diagramas ............................................................................................ 5 Isomorfismo en grafos ......................................................................... 7 Matriz de incidencia y matriz de adyacencia ....................................... 8 Caminos y Conexiones ...................................................................... 10 Digrafo etiquetado y ponderado ........................................................ 20 Capítulo 2 ............................................................................ 23 Introducción al Análisis de Algoritmos ............................ 23 Conceptos Básicos ............................................................................. 23 Correctez de un algoritmo .................................................................. 24 Notación para expresar complejidad en tiempo (complejidad asintótica) ........................................................................................... 25 Funciones de Complejidad en tiempos más usuales .......................... 28 Tipos de Algoritmos .......................................................................... 30 Complejidad de los problemas ........................................................... 30 Comparación de Algoritmos .............................................................. 32 Algoritmos de exploración en grafos ................................................. 35 Clasificación de Algoritmos para rutas cortas ................................... 36 Capítulo 3 ............................................................................ 37 El problema de la ruta más corta ..................................... 37 Algoritmo de Dijkstra ........................................................................ 38 Algoritmo Glotón ............................................................................... 38 Análisis del Algoritmo de Dijkstra .................................................... 39 Correctez del algoritmo de Dijkstra ................................................ 43 Diagrama de flujo del Algoritmo de Dijkstra ................................. 47 Ejemplo del Algoritmo de Dijkstra................................................. 48 Pseudocódigo del Algoritmo de Dijkstra ........................................ 50 Desarrollo ............................................................................ 51 Análisis del Grafo del Ferrocarril en México .................................... 51 Vértices ...................................................................... 52 Aristas ........................................................................ 52 Estructura ........................................................................................... 53 Conclusiones ....................................................................... 54 Anexos .................................................................................. 56 Código de la Clase Dijkstra ............................................................... 56 Ejecución del Programa ..................................................................... 62 Diagrama de .................................................................... 65 Bibliografía.......................................................................... 66 Introducción Actualidad del ferrocarril en México El ferrocarril es un medio de transporte que tiene sus comienzos en México en el año de 1837. En la actualidad, existen tres rubros donde se desempeñan los ferrocarriles como son: transporte turístico, transporte de pasajeros y transporte de carga esta última es la actividad principal del ferrocarril en el país, la cual se complementa con intercambios comerciales a nivel ferroviario únicamente con los países del Norte de América y con las navieras de todo el mundo en los principales puertos del país. Tomando en cuenta lo anterior y para ubicar el porcentaje de participación de México a nivel de América del Norte y tomando como base el total de toneladas movidas por ferrocarril durante 2010, en esta área, la participación de Estados Unidos fue del 88% con 2,705.6 millones de toneladas-kilómetroa (Asociación Americana de Ferrocarriles, 2011), la de Canadá del 10% con 299.2 millones de toneladas- kilómetro (Transport Canada, 2010), mientras que México solamente participa con el 3% con 78.8 millones de toneladas-kilómetro (Dirección General de Transporte Ferroviario y Multimodal, 2010) (Figura 1). a Total de toneladas movidas por kilómetro recorrido. 3% 88% 10% Figura 1. Toneladas kilómetro en FFCC - Norte América 2010 México Estados Unidos Canada ii | Introducción Comparando al transporte ferroviario nacional con los otros medios de transporte de carga, léanse aéreo, marítimo y carretero, en 2010 el ferrocarril se encontraba con una participación del 12% (Dirección General de Planeación, 2011) (Figura 2). El transporte ferroviario nacional es un medio que desde su privatización no ha dejado de crecer, con excepción de la recesión mundial del 2009, en cuanto los datos de carga transportada (Dirección General de Transporte Ferroviario y Multimodal, 2010) y participación en el mercado. 0.6 470 105 272 0 100 200 300 400 500Áereo Carretero Ferroviari o Marítimo (Cifras en miles de toneladas) Figura 2. Miles de toneladas transportadas en México 2010 0 20,000 40,000 60,000 80,000 100,000 120,000 1990 1995 2000 2005 2010 2015 Figura 3. Evolución del ferrocarril en México 1995 - 2010 Toneladas (miles) Toneladas-Km (millones) iii | Introducción Ferrocarriles participantes en México En México existen actualmente siete ferrocarriles (FFCC), los cuales aparecieron a partir de que el 12 de Mayo de 1995, el gobierno Mexicano promulga la Ley Reglamentaria del Servicio Ferroviario de la cual se desprende que la empresa paraestatal, Ferrocarriles Nacionales de México por sus siglas (FNM) sería concesionada a particulares para construir, operar y explotar vías férreas así como prestar el servicio público de transporte ferroviario. Para impedir que existiera un monopolio, la empresa se concesiono por partes, de las cuales surgieron dos ferrocarriles clase I de acuerdo a la clasificación de la AARb. 1. Nombre: Kansas City Southern México (KCSM) Inicio de operaciones: Enero de 1997 Kilometraje de vías: 4054.2 km Concesión que opera: Ferrocarril del Noreste (Líneas A, B, BB, BC, BD, BF, F, L, LA, LB, LJ, N, NB, NC, ND, NE, NF, O, OA, V, XX) Fronteras: Nuevo Laredo y Matamoros Puertos: Tampico y Lázaro Cárdenas y Veracruz 2. Nombre: Ferrocarril Mexicano (FXE) Inicio de operaciones: Febrero de 1998 Kilometraje de vías: 8251.8 km Concesiones que opera: Ferrocarril del Pacifico Norte (Líneas A, AE, AK, B, BC, I, IB, IC, IN, M, MA, P, R, RA, T, TC, TE, TF, TG, TH, TL, TM, U, UA, TI) Línea Corta Ojinaga – Topolobampo (Línea Q) Línea Corta Nacozari (TA y TB) Fronteras: Mexicali, Nogales, Ojinaga, Ciudad Juárez y Piedras Negras Puertos: Manzanillo, Topolobampo y Tampico 3. Nombre: Ferrosur (FSRR) Inicio de operaciones: Junio de 1998 Kilometraje de vías: 1638.7 km b Association of American Railroads (Asociación Americana de Ferrocarriles, Incluye a los ferrocarriles más importantes de Norte América, se especializa en mejorar la seguridad y productividad del transporte ferroviario) iv | Introducción Concesiones que opera: Ferrocarril del Sureste (Líneas A, E, EA, FA, G, GA, GF, HB, HC, S, SA, SC, V, VB, Z, ZA) Línea Corta del Sur y Oaxaca (Líneas VK y VC) Línea Corta de Hidalgo (H, HA) Línea Corta Tres Valles – San Cristóbal (GB) Fronteras: N/A Puertos: Veracruz 4. Nombre: Ferrocarril Coahuila Durango (LFCD) Inicio de operaciones: Abril de 1998 Kilometraje de vías: 952.5 km Concesiones que opera: Ferrocarril Coahuila Durango (Líneas DA, DC, DF, RB, RC, RD, RK, RL) Fronteras y Puertos: N/A 5. Nombre: Ferrocarril del Istmo de Tehuantepec (FIT) Inicio de operaciones: Octubre de 1999 Kilometraje de vías: 1790.1 km Concesiones que opera: Línea Corta del Istmo de Tehuantepec (Z) Línea Corta Chiapas-Mayab (FA, FD, FN, FX, K) Fronteras y Puertos: N/A 6. Nombre: Ferrocarril y Terminal Ferroviaria del Valle de México(TFVM) Inicio de operaciones: Mayo de 1998 Kilometraje de vías: 176.5 km Concesiones que opera: Terminal Ferroviaria del Valle de México (Líneas A, B, C, H, N, NA, S, SH, VK) Fronteras y Puertos: N/A 7. Nombre: Administradora de la Vía Corta Tijuana – Tecate (ADMICARGA) Inicio de operaciones: Septiembre de 2000 Kilometraje de vías: 71.4 km Concesiones que opera: Línea Corta Ferrocarril Tijuana - Tecate (Línea UB) Fronteras y Puertos: Tijuana y Tecate v | Introducción El porcentaje de participación de los Ferrocarriles en 2010 por empresa Ferroviaria tomando en cuenta las Toneladas – Kilómetro transportadas se divide como se muestra en la Figura 4. Delimitación del problema El objetivo del presente trabajo es desarrollar un programa que determine la ruta más corta entre dos estaciones dentro de la red del Ferrocarril en México y su respectiva distancia, el algoritmo principal del programa deberá cumplir las siguientes características: Rápido (El usuario deberá obtener el resultado en un tiempo corto) Confiable (El usuario deberá obtener el resultado correcto y sin variaciones cada vez que realice una consulta) Flexible (El usuario deberá poder modificar de forma sencilla los parámetros de entrada y salida de información también debe tener la capacidad de calcular rutas alternas válidas dentro del negocio del Ferrocarril, contemplando una serie de reglas y factores ya sean determinadas por el usuario o por la naturaleza misma del Ferrocarril. A continuación se enlistan las diferentes limitaciones que tenemos para que las rutas sean válidas en el ámbito del Ferrocarril. Factores legales y de concesión: Se deben seguir las reglas dadas de alta ante la SCT (Secretaría de Comunicaciones y Transportes). Cada Ferrocarril tiene concesión sobre las líneas por donde puede dar servicio, sin embargo existen registrados ante la SCT factores y 32% 58% 9% 0% 1% 1% 0% Figura 4. Participación de los FFC en Toneladas-Km (millones) KCSM FXE FSRR TFVM LFCD FCCM ADMI vi | Introducción vías por derecho de paso que se pagan al Ferrocarril propietario si se desea dar servicio utilizando dichos tramos. Factores de infraestructura: La infraestructura de una estación nos puede ocasionar que el intercambio no se efectué en la estación más cercana dada la capacidad del patio de intercambio, por lo que se tiene que realizar el intercambio en una estación más alejada pero con una mayor capacidad. Otra restricción se puede presentar en la capacidad de carga de la vía, ya que si el tren rebasa esta restricción se debe encontrar una vía altera. Factores orográficos: Se puede restringir a que se utilice una vía cuando la pendiente esta es muy grande y si el material que se transporte es peligroso existen dos casos. a. Materiales No Peligrosos Se tienen que usar locomotoras ayudadoras cuando se transita en el sentido positivo de la inclinación por lo cual se necesita conocer si la ruta pasa por determinadas estaciones y en el sentido en que lo hacen. Para este caso existen tramos registrados ante la SCT quien autoriza la sobretasa que cada Ferrocarril cobra por cruzar por dichos tramos. b. Materiales Peligrosos Si se transportan materiales peligrosos no se puede pasar por dichos tramos y se debe buscar una ruta alterna. Factores climatológicos: Si se presentan inundaciones o deslaves que pueden afectar el paso por una vía por lo que se necesita obtener rutas alternas. Factores comerciales: La concesión permite derechos de paso a los diferentes ferrocarriles y cuando existe algún acuerdo comercial entre los mismos, un ferrocarril puede recorrer las líneas de otro. Lo anterior implica que los ferrocarriles buscan obtener la mayor participación de las rutas creando rutas alternas, por lo que se necesita conocer las rutas que maximicen el recorrido de un ferrocarril determinado para un origen y destino. vii | Introducción Hipótesis Se pretende demostrar que convirtiendo la red del ferrocarril en México en un modelo y aplicando el algoritmo de Dijkstra en un programa para el cálculo de rutas cortas y su distancia, podremos satisfacer las características anteriormente mencionadas. Para lograr lo anterior en el primer capítulo se expondrán las definiciones, conceptos, propiedades y teoremas básicos de la teoría de grafos que nos permitan incluir todas las características del problema real en la teoría y así poder modelar de forma correcta el problema. En el segundo capítulo se revisarán los conceptos generales de la complejidad de los algoritmos para verificar que nuestro algoritmo seleccionado cumpla con los requisitos necesarios para poder alcanzar el objetivo del presente trabajo y que se adapte a las características que se definan en el primer capítulo de la teoría de grafos. En eltercer capítulo se analizará el problema de la ruta más corta y los diferentes algoritmos que se pueden aplicar a dicho problema, se analizará porque se eligió el algoritmo así como un análisis profundo de este y sus características. En el cuarto capítulo se desarrolla la adaptación del modelo del grafo del ferrocarril en México y sus características, así como la estructura elegida para la incorporación del algoritmo en el programa, la justificación del lenguaje de programación que se utilizó para el desarrollo así como los pasos que se llevaron acabo para la implementación del algoritmo y una ilustración de los resultados finales del programa en ejecución. En los anexos se agrega el código del algoritmo utilizado y una ilustración del grafo de la red del ferrocarril en México. Justificación Las áreas Comercial, de Finanzas y de Logística de un ferrocarril requieren de las rutas y sus distancias para diferentes usos, de entre los que se encuentran los siguientes: viii | Introducción 1. Cálculo de Tarifas (TUCEc): Existen dos principales variables para realizar el cálculo de la TUCE, el primero es el producto que se transporta y el segundo es la distancia recorrida por cada Ferrocarril participante del flete. Cada Ferrocarril registra ante la SCT Factores Fijos y Factores Variables dependiendo del producto donde el factor variable se multiplica por la distancia recorrida. Este cálculo existía desde FNM (Ferrocarriles Nacionales de México) y a partir de la privatización se ha modificado para quedar de la siguiente manera: Como puede verse en el cálculo de la TUCE, va implícita la distancia recorrida por cada uno de los FFCC, por lo tanto es necesario conocer la ruta que tendrá el movimiento. Antes de continuar daremos unas definiciones relativas a los conceptos de la TUCE. Ferrocarriles participantes: Son tanto Nacionales como Internacionales y se identifican con un máximo de 4 caracteres, existe actualmente cerca de 740 registrados ante la AAR tomando en cuenta las líneas cortas. Estación: Lugar donde se inicia, termina, pasa o se intercambian carros con o sin carga, existen alrededor de 50,000 estaciones registradas vigentes. Existen dos formas de identificar una estación de Ferrocarril Internacionalmente: Nacionalmente: Standard Carrier Alpha Code (SCAC): FC propietario de la estación Freight Station Accounting Code (FSAC): Número de hasta 5 dígitos identificador de la estación Standard Point Location Code(SPLC): Localización geográfica de la estación Línea: Existen 106 diferentes líneas en México Poste Kilométrico: Número que indica el kilómetro en que se encuentra la estación con respecto al comienzo de la línea. La unión de las anteriores nos da la estación operativa o CIRC7 c Tarifa Única de Carga Express (TUCE): Serie de reglas dadas de alta ante la SCT la cuales especifican el cobro máximo que un ferrocarril está autorizado para cobrar a sus clientes por el servicio de flete de mercancía así como de regreso de vacío de carros de Ferrocarril. ix | Introducción Estación: GUADALAJARA, JA MÉXICO SCAC: FXE FSAC: 09678 SPLC: 944300000 Estación: GUADALAJARA, JA MÉXICO Línea: I (Esta línea corre de Irapuato a Manzanillo) Poste Kilométrico: 0260 Puntos de Intercambio: Puntos de interconexión o conocidos como regla 260, son las estaciones donde un ferrocarril recibe o entrega carros de o a otro ferrocarril. Existen alrededor de 8,300 puntos de intercambio registrados. Se identifican con un máximo de 5 caracteres y están asociados a alguna estación. Ejemplo: Estación: Celaya Intercambio: CELAY (Punto de intercambio entre FXE y KCSM) Ruta: Formada por el origen y el destino de la ruta así como los participantes y los puntos de intercambio entre ellos. Ejemplos: 1. Guadalajara JA a Veracruz VL: FXE_09678 – FSRR06055 Figura 5. Ruta Guadalajara JA – Veracruz VL (FXE – FSRR) Guadalajara, JA Lechería, EM Veracruz, VL x | Introducción 2. Guadalajara JA a Veracruz VL: FXE_09678 – KCSM06055 3. Puebla PU a Durango DG: FSRR09056 – LFCD01418 Figura 7. Ruta Puebla PU – Durango DG Puebla, PU Lechería, EM Escalón, CI Durango, DG Figura 6. Ruta Guadalajara JA – Veracruz VL (FXE – KCSM) Veracruz, VL Guadalajara, JA Lechería, EM Celaya, GJ xi | Introducción En los ejemplos anteriores podemos ver las variantes de las rutas, ya que aunque es el mismo origen y destino en las rutas uno y dos, en la primera ruta el Ferrocarril FXE entrega en el punto de intercambio de Lechería para que el Ferrocarril Ferrosur lo lleve al destino Veracruz. En la segunda el encargado de llevar la mercancía de Lechería a Veracruz es el Ferrocarril KCSM, cada uno por sus vías correspondientes. Podemos realizar una clasificación de rutas como se muestra a continuación: En el presente trabajo nos enfocaremos a trabajar con rutas Nacionales. Distancia: Se dividen en los dos tipos siguientes. a) Horaria: Distancia física que recorre el Ferrocarril, la unidad es en kilómetros y se calcula hasta décimas, estas se encuentran definidas en los horarios dados de alta ante la Dirección General de Transporte Ferroviario y Multimodal. Dirección de Regulación Técnica Operativa de Transporte Ferroviario de la SCT. b) Comercial: Distancia que se calcula en base a la TABLA DE DISTANCIAS NUM. 8 aprobada por la SCT, según Oficio Núm. 23031-EPS-2142, Folio 120994, Exp.- 302/1, de noviembre 3 de 1977. La cual está dada en base a la logística del movimiento de trenes y contempla 81 tablas, está dada en kilómetros enteros. Estas son las distancias que se utilizan para el cálculo de la TUCE y las reglas para su cálculo son las siguientes. o Regla No. 1 Sección III.- Las distancias que servirán de base para la aplicación de las cuotas serán las que figuran en la o las Tablas de Distancias aprobadas para cada empresa porteadora por la Secretaría de Comunicaciones y Transportes, Dirección General de Ferrocarriles en Operación. Se obtiene la distancia comercial de un origen a un destino tomando el valor más grande que se recorra en una línea. Es decir, no se pueden sumar las distancias de tramos recorridos en una misma línea. o Regla No. 1 Sección IV.- a) Si el solicitante de un servicio de transporte no expresa la ruta o línea por la cual se hará el transporte, ésta será fijada por la empresa porteadora en donde se origine el xii | Introducción embarque; pero el importe que se cobre, será el correspondiente a la ruta más corta, a menos que ésta estuviera interrumpida por causa de fuerza mayor, pues en este caso se cobrará el servicio por la ruta o línea que se haya usado. b) En aquellas estaciones en donde existan vías anchas y angostas, el carro que se cargue determinará la ruta. Cuotas a distancias no publicadas o Regla No. 1 Sección V.- Las cuotas por distancias que figuran en las Tablas de cuotas se aplican por Secciones de 10 en 10 kilómetros hasta 250 kilómetros, de 25 en 25 desde 250 kilómetros hasta 1,000 y de 50 en 50 de 1,000 kilómetros en adelante. Para encontrar cuotas a distancias intermedias, se aplicarán las correspondientes a la distancia publicada inmediata anterior o posterior, en la forma siguiente: Secciones de 10 en 10 Las Fracciones menores de 5 kilómetros se desprecian y las de 5 a 9 se elevan a 10 kilómetros. Secciones de 25 en 25 Las Fracciones menores de 13 kilómetros se desprecian y las de 13 a 24 se elevan a 25 kilómetros. Secciones de 50 en 50 Las Fracciones menores de 25 kilómetros se desprecian y las de 25 a 49 se elevan a 50 kilómetros. 2. Alquiler de carros (CAR HIRE): De acuerdo a lo establecido en las reglas del CAR HIRE publicadas por la AAR, el CAR HIRE se entiende como la contraprestación que paga un ferrocarril signatario de los acuerdos deintercambio de la AAR por el uso de equipo ferroviario (y sus accesorios, en los casos que así aplica) propiedad de otro ferrocarril o entidad signatarios. El cómputo de dicha contraprestación se efectúa por el tiempo que permaneció el equipo en territorio del ferrocarril usuario y por el kilometraje recorrido, de acuerdo a tarifas negociadas o por omisión aplicables entre ambas partes. El CAR HIRE opera de manera automática, sin necesidad de contrato específico entre el propietario del equipo y el FC usuario, bajo los criterios de la AAR (Circular OT- 10). Por lo tanto, se necesita conocer la distancia de los tramos recorridos del carro en territorio del ferrocarril usuario. 3. Estadística: El principal indicador estadístico para comparar los servicios de carga de un medio de transporte es el de Toneladas –Kilómetro el cual equivale al desplazamiento de una tonelada de carga la distancia de un kilómetro. Por ejemplo si un tren generó 200 Toneladas- Kilómetro por recorrer diez kilómetros con veinte toneladas, este es comparable a uno que recorra cuarenta kilómetros con cinco toneladas. Su uso implica conocer la distancia recorrida. xiii | Introducción 4. Documentación de fletes: Para que la carga sea transportada se debe llenar un documento donde el embarcador especifica de manera explícita las características específicas del servicio a realizar por el porteador de la carga, en el caso del ferrocarril, uno de eso datos es la ruta a seguir, tomando en cuenta origen, destino, FFCC participantes e intercambios entre los mismos. Si el cliente proporciona la ruta, se utilizará la misma, de lo contrario se debe identificar la ruta óptima para el servicio. 5. Asignación de carros vacíos: El área de logística de un ferrocarril necesita maximizar la asignación de carros vacíos de su flota a los clientes que los solicitan, por lo que se necesita una matriz de distancias de toda la red propiedad del ferrocarril con la distancia mínima entre todas las estaciones. 6. Costos y Rentabilidad: También es necesaria la distancia recorrida para obtener los costos variables como gasto de diesel, horas de trabajo etc., así como el cálculo de la rentabilidad Capítulo 1 Fundamentos de la Teoría de Grafos Introducción Muchas situaciones del mundo real pueden ser descritas convenientemente por medio de un diagrama, los cuales consisten en un conjunto de puntos y líneas que unen ciertos pares de estos. Por ejemplo, los puntos pueden representar personas, con líneas uniendo pares de amigos; o los puntos pueden ser centros de comunicación con líneas representando ligas de comunicación. Notemos que en estos diagramas las personas están principalmente interesadas en conocer si dos puntos están unidos por una línea; y la forma en la que están unidas es abstracta e inmaterial. Una abstracción matemática de situaciones de este tipo da lugar al concepto de grafo. Definiciones En primer lugar se darán las definiciones fundamentales de la Teoría de Grafos para ubicar el contexto del problema que vamos a resolver. Definición. Un grafo es una pareja G = (V, E) de conjuntos tales que ; es decir que cada elemento de E es a su vez un subconjunto de 2 elementos de V y donde V es finito y no vacío. Los elementos de V son los vértices (o nodos, o puntos) de la grafo G, los elementos de E son sus aristas o lados. Un grafo con un conjunto de vértices V se dice que es un grafo en V. El conjunto de vértices en un grafo G es referido como V (G) y su conjunto de aristas como E (G). Definición. Un grafo G consta de una tripleta ordenada (V (G), E (G), f (G)) la cual consiste en un conjunto no vacío V (G) de vértices, un conjunto E (G), independiente de V (G), de aristas, y una función de incidencia f (G) que asocia con cada arista de G un par no ordenado (no necesariamente distinto) de 2 | Fundamentos de la Teoría de Grafos vértices de G. Si e es una arista y u y v son vértices tales que, entonces se dice que e une a u y v. Los vértices u y v son llamados los extremos de e. Definición. El número de vértices de un grafo G es su orden, escrito como ; su número de aristas es denotado por a lo que llamamos el tamaño del grafo. Definición. Dos vértices u, v de un grafo G = (V, E) se dicen adyacentes si {u, v} ∈ E (G), asimismo dos aristas son adyacentes si tienen un mismo vértice como extremo. Definición. Análogamente si e = {u, v} decimos que el lado e es incidente a los vértices u y v. Definición. Una arista con extremos idénticos es llamada bucle, una arista con extremos distintos una liga. Definición. Un grafo que contiene bucles es llamado pseudografo. Definición. Un grafo que contiene dos o más ligas para el mismo par de vértices es llamado multígrafo. El conjunto de los grafos está contenido en el de los multígrafos pero no a la inversa. Definición. Un grafo es finito si tanto su conjunto de vértices como su conjunto de aristas son finitos. Definición. Un grafo es simple si no es pseudografo ni multígrafo. Definición. El grado de un vértice v en G es el número de aristas incidentes a él. Denotaremos a como el mínimo grado de G y a como el máximo grado de G. Definición. Los vecinos de un vértice v se definen como: De aquí se puede ver que si un grafo es simple entonces , también si el orden de una grafo G es p, entonces es claro que Definición. Un vértice de grado cero es llamado vértice aislado. Definición. Un vértice de grado uno es llamado vértice terminal. 3 | Fundamentos de la Teoría de Grafos Teorema. Sea G un grafo de orden p y tamaño q con Entonces Demostración. Al sumar el grado de cada vértice de G, cada arista es contada dos veces, una vez por cada vértice en el que incide. Corolario. En cualquier grafo el número vértices de grado impar es par. Demostración. Si definimos a y como el conjunto de vértices de grado par e impar respectivamente, es claro que , además de ser independientes, por lo tanto. De aquí que Donde los dos elementos de la derecha de la ecuación son pares, por lo tanto la suma de la izquierda debe contener un número par de sumandos, pues cada elemento de ésta es impar. Definición. Un grafo G es r-regular o regular de grado r si De esto se observa que: . Definición. El complemento de un grafo denotado por se define como el grafo tal que Definición. Un grafo simple G = (V, E) se dice completo si cada vértice está conectado a cualquier otro vértice en G. Definición. Un grafo G = (V, E) se dice vacío si , es decir, si no tiene aristas. Definición. Un grafo simple bipartita G = (V, E), es en el que V (G) puede ser particionado en dos subconjuntos X y Y, tales que cada arista tiene un extremo en X y un extremo en Y , de tal manera que toda arista e ∈ E conecta un vértice de X con un vértice de Y, a tal partición se le llama bipartición del grafo. 4 | Fundamentos de la Teoría de Grafos Definición. Un grafo completo, denotado por , se llama a un grafo de orden p en donde a todo par de vértices estos son adyacentes. Figura 1.2 Ejemplos de grafos completos u v w x v u u u v w x y Figura 1.1 Ejemplo de un grafo bipartita 5 | Fundamentos de la Teoría de Grafos Subgrafos Definición. Sea G = (V, E) un grafo. Si H = (W, F) es un grafo tal que W ⊆ V y F ⊆ E decimos que H es un subgrafo de G. Si F contiene todas las aristas de E que unen a los puntos de W en G se dice que H es un subgrafo completo de G generado por W. Si W = V decimos que H es un subgrafo extendido de G. Definición. Dado S ⊆ V (G) el grafo inducido por S es el ⊆-máximo subgrafo de G con S como su conjunto de vértices, este grafo es denotada como G [S]. Denotamos a G – S como el grafo inducido obtenido a partir de V (G) – S. Si S = {v} denotaremos a G – S como G – v en vez de G – {v} Dado X ⊆ E (G) el grafo inducido por X es el ⊆-mínimo subgrafo de G con S comosu conjunto de aristas, este grafo la denotaremos igualmente como G [X]. Un subgrafo H de G es llamada generador si V (H) = V (G). De aquí podemos observar que G – X es un grafo generador Si son pares de vértices no adyacentes en G, , entonces se define como el grafo formado a partir de G, denotamos G + { uv } como G + uv únicamente. Diagramas La forma usual de representar una grafo es dibujando un punto por cada vértice y uniendo dos de estos puntos por una línea si los correspondientes dos vértices forman una arista. La forma (diagrama) en la que estos puntos y líneas son dibujados es considerada irrelevante, todo lo que importa es la información de cuales pares de vértices forman una arista y cuáles no. Y es esta representación la que nos ayuda a comprender muchas de sus propiedades. La mayoría de las definiciones y conceptos en la teoría de grafos provienen de la representación del mismo grafo. Daremos dos ejemplos de diagramas de grafos 1. G = (V (G), E (G), f (G)) V (G) = { } E (G) = f (G) está definida por: 6 | Fundamentos de la Teoría de Grafos 2. H = (V (H), E (H), f (H)) V (H) = {u, v, w, x, y} E (G) = {a, b, c, d, e, f, g, h} f (H) está definida por: Se puede observar en las figuras que dos aristas en un grafo se pueden interceptar en un punto que no sea un vértice (por ejemplo y del grafo G en la figura 1.3). Definición. Los grafos en los que su diagrama es interceptado solamente en sus extremos son llamados planos, ya que estos pueden ser representados en un plano de una manera sencilla. Definición. Un grafo dirigido o digrafo G = (V, E) consta de un conjunto V de vértices y conjunto E de aristas, que son pares ordenados de elementos de V. La relación entre V y E es irreflexiva. Los elementos de V también son llamados vértices, más los elementos de E son llamados aristas dirigidas, arcos o flechas, por lo tanto si (u, v) es un arco de G, entonces (v, u) no lo es necesariamente. f f f f Figura 1.3 Diagramas de los grafos G y H 7 | Fundamentos de la Teoría de Grafos Isomorfismo en grafos Definición. Dos grafos y G2 son idénticos (denotado G = H) si: V (G1) = V (G2), E (G1) = E (G2) y f (G1) = f (G2). Si dos grafos son idénticos pueden ser representados por diagramas idénticos. Si el diagrama de dos grafos es el mismo, pero esta etiquetado de distinta forma, ya no son idénticos pero se les llama Isomórficos. Definición. Los grafos y son isomorfos si existe una función biyectiva f de en con la propiedad de que, para cada par de vértices u, v ∈ , u, v son adyacentes en si y sólo si f (u), f (v) son adyacentes en . Es decir {u, v} ∈ ⇔ {f (u), f (v)} ∈ . Si y son isomorfos lo denotamos . Si dos grafos G1 y G2 son isomorfos, tienen el mismo número de vértices, el mismo número de aristas y el mismo número de vértices de cualquier grado. Para mostrar que dos grafos son isomórficos, se debe indicar un isomorfismo entre los mismos. El par de mapeos definidos por Es un isomorfismo entre los grafos G y H de la figura 1.1; G y H evidentemente tienen la misma estructura, y difieren solamente en el nombre de los vértices y aristas. Definición. Un grafo G es denso cuando en número de aristas es cercano al cuadrado de su orden o Definición. Un grafo G es disperso cuando en número de aristas es mucho menor al cuadrado de su orden o 8 | Fundamentos de la Teoría de Grafos Matriz de incidencia y matriz de adyacencia Definición. Sea G = (V, E) un grafo con n vértices y p aristas, entonces le corresponde una matriz n × p denominada la matriz de incidencia de G. Si denotamos los vértices de G por y las aristas por . Entonces la matriz de incidencia de G es la matriz donde es el número de veces (0, 1 ó 2) en que el vértice y son incidentes. Definición. Otra matriz asociada a G es la matriz de adyacencia; esta es una matriz n × n en donde es el número de aristas que van de hasta . Es claro que A es una matriz simétrica en donde si no hay bucles la diagonal está compuesta de ceros. Si el grafo es denso, nos conviene representarlo de esta forma o también si lo que se desea es conocer de manera rápida si existe una arista conectando dos vértices dados. Como A es una matriz de n × n requiere de n2 entradas si G es una grafo con un número grande de aristas estaríamos ingresando a la base de datos un gran número de ceros que no aportan información pero ocupan espacio. Es por eso, que se usan otros métodos de almacenamiento como lo es la lista de adyacencia descrita a continuación. Definición. Sea G grafo con , la lista de adyacencia asocia a cada es una lista de vértices adyacentes a ordenados de manera numérica o alfabética. Podemos notar que esta forma de almacenamiento utiliza a lo más n × q entradas, lo que en el caso de un grafo disperso nos reduce la cantidad de memoria usada en la base de datos. 9 | Fundamentos de la Teoría de Grafos Figura 1.4: (a) Matriz de Incidencia, (b) Matriz de Adyacencia y (c) Lista de Adyacencia (b) (a) v2 v2 v1 v1 v1 v1 v3 v3 v3 v3 v2 v3 v4 v4 v4 v4 (c) 10 | Fundamentos de la Teoría de Grafos Caminos y Conexiones Definición. Un camino en G es una secuencia finita no nula , en donde los términos son alternativamente vértices y aristas, tales que para 1 ≤ i ≤ k, los extremos de son y . Decimos que W es un camino desde hasta o un . Los vértices y son llamados el origen y término de W, respectivamente y sus vértices internos. En un grafo simple, un camino está determinado por la secuencia de sus vértices. Para referirnos al mismo camino recorrido inversamente usaremos la notación Definición. Un sub-camino de un camino es una sub-secuencia contigua de sus vértices. Esto es, para cualquier , la sub-secuencia de vértices es un sub- camino de W. Definición. El entero k es la longitud de W denotado como . Definición. Denotemos con a un camino de u a v. Entonces definimos la distancia δ de un vértice s a un vértice v: Definición. Un camino más corto es aquel donde . Demostración. Denotemos la arista del vértice uv como u → v. Tomemos un camino más corto de s a v, s⇝v, y un camino más corto de s a u, s⇝u. Si un camino más corto de s a v pasa por u (s ⇝ u → v), el último vértice que se incluyó en el camino es, precisamente, u → v y entonces se da la igualdad . Si ningún camino más corto de s a v pasa por u, entonces un camino más corto debe tener menos arcos que el que pasa por u. El camino que pasa por u primero llega a u por un camino más corto de s a u ( ; una vez en el vértice u, la forma más directa de llegar a v es utilizando el vértice u → v, por lo que tenemos que la longitud de s ⇝ u → v es Pero como existe un camino más corto de s a v que no pasa por u, tenemos 11 | Fundamentos de la Teoría de Grafos Esto se ilustra en la gráfica de la siguiente figura. Definición. Un camino es cerrado si tiene longitud positiva y si el vértice origen y término son el mismo. Definición. Un camino cerrado es un ciclo si todos los vértices (excepto los extremos) son distintos. Definición. Un paseo en G se define como un camino en el cual ninguna arista es repetida. Definición. Una trayectoria se define como un camino en el cual ningún vértice se repite. Toda trayectoria es un paseo pero no a la inversa. Definición. Un ciclo se define como un camino cerrado en el cual no hay vértices que se repitan salvo el primero y el último, llamaremos la longitud de un ciclo al número de vértices distintos que en éste haya. Definición. Dado un vértice o una arista de G diremos que son acíclicos si no son parte de ningún ciclo enG. Figura1.5 Propiedad de la distancia s u v δ(s, u) = 2 ( = =>) δ(s, v) = 2 sin pasar por u ( ⇒ ) ≤ δ(s, u) + 1 = 3 (= =>) 12 | Fundamentos de la Teoría de Grafos Teorema. Todo u-v-camino contiene una u-v-trayectoria Demostración. Sea W un u-v-camino en G. Si u = v, entonces la trayectoria u-u resuelve el problema, por lo tanto podemos suponer que . Digamos que . Si ningún vértice se repite en W, entonces ya es una trayectoria. De lo contrario tal que con j < k. De aquí que podemos afirmar que es un nuevo u-v- camino contenido en W, si en no hay vértices que se repitan, entonces es una u-v-trayectoria contenida en W, de lo contrario podemos repetir el proceso anterior hasta obtener la trayectoria deseada dado que el número de vértices que aparecen más de una vez en W es finito. Definición. Dos vértices u y v de G están conectados si existe una (u,v) - trayectoria en G. Definición. Un grafo G es conexo si y sólo si para todo u está conectado a v. Un grafo que no cumple lo anterior es llamado inconexo. La conexión es una relación de equivalencia en V(G). Si existe una partición de V(G) en subconjuntos no vacios tal que dos vértices u, v están conectados si y solo si ambos u, v pertenecen al mismo conjunto . Los subgrafos son llamados los componentes de G. Si G tiene exactamente un solo componente entonces G es conexo, de lo contrario G es inconexo. Se denota al número de componentes de G por c(G). La noción de conexidad es importante para la aplicación de la teoría de grafos a las ciencias sociales; constituye la versión matemática de uno de los aspectos de la noción psicológica de cohesividad de grupo; intuitivamente se refiere a la densidad de relaciones. 2 1 4 5 3 Figura 1.6 (a) Ejemplo de un paseo. (b) Ejemplo de un ciclo. (c) Ejemplo de una trayectoria. 5 4 1 2 3 (a) (b) (c) 2 1 6 4 5 3 13 | Fundamentos de la Teoría de Grafos Definición. Un grafo G = (V, E) es regular de grado k, si cada vértice tiene grado k; es decir, un grafo es regular si todos los vértices tienen el mismo grado. A un grafo que sea por si mismo una trayectoria de orden n lo denotaremos por , de igual forma un ciclo de longitud n es llamado un n-ciclo y se denota por . Un 3-ciclo es llamado un triangulo. Diremos también que un ciclo es par o impar dependiendo de la paridad de su orden. Teorema. Un grafo G no trivial es bipartita si y sólo si G no contiene ciclos impares. Demostración. Sea G un grafo no trivial. Supongamos que G es bipartita, por lo tanto particiones tales que se cumple que e es una x-y-arista. Sea un ciclo de grado n en G, de no existir el resultado se cumple por vacuidad. Supongamos sin pérdida de generalidad que , en consecuencia y así para toda 1 ≤ i ≤ n, si y sólo si i es impar y si y sólo si i es par. Ahora como y entonces , por consiguiente n es par. De aquí concluimos que todo ciclo de G tiene longitud par. Para el reciproco supongamos que G no contiene ciclos impares y asumamos de momento que G es conexa. Sea , por lo tanto existe una u-v-trayectoria en G, por lo que podemos definir a como una de longitud mínima. Definamos ahora como el conjunto que contiene a u y a todo vértice tal que la longitud de sea par; y a como el conjunto que contiene a todo vértice tal que la longitud de sea impar. Por construcción es claro que X y Y son una partición de V (G). Sea , veamos ahora que x y y pertenecen a distintos elementos de la partición. Podemos suponer sin pérdida de generalidad que , si suponemos que entonces existen , u-x- trayectoria mínima y , u-y-trayectoria mínima, ambas de longitud par, por lo tanto es un ciclo impar en G, lo cual es una contradicción que viene de suponer que . De aquí que y como consecuencia toda arista de G es una X-Y-arista. Si G no hubiera sido conexa, podemos suponer que las componentes conexas de G, de tal forma que si G no (a) (b) 1 2 3 4 5 6 7 1 2 3 4 5 6 7 Figura 1.7 (a) Grafo conexo y (b) Grafo inconexo 14 | Fundamentos de la Teoría de Grafos contiene ciclos impares, entonces ninguna contiene ciclos impares, por lo que aplicado el proceso anterior obtenemos que cada es bipartita. Digamos que las particiones bipartitas de cada . Por lo que es claro que son una bipartición de G. Definición. Un camino hamiltoniano es una trayectoria que pasa por todos los puntos del grafo. Definición. Un circuito hamiltoniano es un camino hamiltoniano que vuelve a su punto de partida. Definición. Una arista que une dos vértices de un ciclo, pero no es esta misma una arista del ciclo es una cuerda. Definición. El diámetro de un grafo es el máximo de las distancias entre cualesquiera par de vértices, equivalentemente el contorno de un grafo es el mínimo de las distancias entre cualesquiera par de vértices. (si G no tiene un ciclo el valor del su diámetro es ∞ y el de su contorno cero). Definición. Dado un grafo G y decimos que v es un vértice de corte si el número de componentes de G cumple con , con lo que podemos afirmar que si G es conexa, v es vértice de corte si y sólo si es inconexa.Un grafo con vértices de corte se llama separable. Definición. Existe una definición análoga para aristas, dada e es un puente si > ( ). Teorema. Sea G conexo y sea , entonces son equivalentes: i) v es un vértice de corte ii) partición de V(G – v) tales que T X-Y-trayectoria se cumple que . iii) tales que T x-y-trayectoria se cumple que . Demostración. Sea G conexa y . Sea v vértice de corte en G. Sabemos por definición que , digamos entonces que son las componentes conexas de . Definimos a y . Sea T una X-Y-trayectoria en G tal que con y , sin pérdida de generalidad supongamos que y . Supongamos ahora que , por lo tanto T es una X-Y-trayectoria en , más aún T sería una C1 – Ck – trayectoria, de aquí que 15 | Fundamentos de la Teoría de Grafos es conexa, lo cual es una contradicción que viene de suponer que , por consiguiente . Sea X, Y una partición de V (G) tal que T X-Y-trayectoria se cumple que . Sea y , ahora como toda x-y-trayectoria es una X-Y-trayectoria, entonces toda x-y- trayectoria contiene a v. Sean tales que T x-y-trayectoria se cumple que . Supongamos que es conexa, entonces existe una x-y-trayectoria en , lo cual es una contradicción pues todas las x-y-trayectorias pasaban por v y no lo hace. Contradicción que viene de suponer que es conexa, de aquí que es inconexa y por lo tanto como G es conexa Teorema. Sea G conexo con y entonces son equivalentes: i) e es un puente. ii) V(G) partición de V(G) tales que T X-Y-trayectoria, T pasa por e. iii) tales que toda u-v-trayectoria pasa por e. iv) e es acíclica. Demostración. Sea G conexa con y . Sea e puente y sean las componentes conexas de , definimos X , una partición de V (G). Sea una X- Y- trayectoria en G con y por lo tanto si suponemos que T no pasa por e, entonces en tenemos que u estaría conectado a v por T y por definición estarían en la misma componente conexa de , lo cual es una contradicción. De aquí que T pasa por e. Sea una partición de los vértices de G, tal que T X-Y-trayectoria, T para por e. Sea y , como toda u-v-trayectoria es una X-Y-trayectoria, entonces toda u-v- trayectoria pasa por e. i Sea tales que toda u-v-trayectoria pasa por e = (x, y) y supongamos que ciclo en G tal que . Tomamos a T una u-v-trayectoria tal que una u-v-trayectoria que dependiendo del sentido en el que se recorra a pasa o 16 | Fundamentos de la Teoría de Grafos no por e, si tomamos el caso en el que no lo hace tenemos una u-v-trayectoria que no pasa por e, lo cual es una contradicción que viene de suponer que e estaba en algún ciclo. Por lo que e es acíclico. i Por contrapuesto si e = (x, y) no es un puente, entonces en hayuna x-y-trayectoria digamos T. Por lo tanto es un ciclo en G que contiene a e. Definición. Dado un grafo G con definimos la conexidad puntual de G, denotada por , como el mínimo número de vértices necesarios para que, al quitarlos de G, ésta se desconecte o lleguemos al grafo trivial con un solo vértice. Decimos entonces que es un bloque si y B es un subgrafo máximo por contención con esta propiedad. Es claro que dos bloques pueden intersectarse a lo más en un vértice de corte, ya que si lo hicieran en dos o más, la unión , tendría también conexidad puntual mayor o igual a 2, contradiciendo la maximidad de y . Llamaremos bloque terminal a un bloque que tenga un solo vértice de corte. Definición. Un árbol es un grafo conexo sin ciclos, esto es que cada arista de un árbol represente un puente. Diremos que un grafo (conexo o inconexo) es un bosque si es un grafo acíclico. De modo que toda componente conexa de un bosque es un árbol. Llamaremos también árbol (bosque) generador de un grafo G a un subgrafo generador que sea un árbol (bosque). Veremos ahora una propiedad importante que tienen estos grafos: Teorema. Un árbol de orden p tiene tamaño p – 1 Demostración. Por inducción sobre p. Como es el único árbol con p = 1 se cumple la base de inducción. Sea T árbol con y supongamos que el resultado se cumple para toda k < p. Sea , por lo que sabemos que e es un puente, de aquí que T – e tiene exactamente dos componentes conexas, Figura 1.8 (a) Ejemplo de un árbol. (b) Vértices terminales del mismo árbol. (b) (a) 17 | Fundamentos de la Teoría de Grafos digamos árboles con y como su órdenes y tamaños. Como por hipótesis de inducción tenemos que con . Sabemos también que y por lo tanto: Por inducción tenemos que el tamaño de un árbol es su orden menos uno. Teorema. Todo árbol no trivial contiene al menos dos vértices terminales. Demostración. Sea T árbol con orden p, tamaño q y ordenados de tal forma que si . Ahora si suponemos que no existen 2 vértices con grado uno entonces se cumple que y , por lo tanto: Sin embargo por el teorema anterior y como la suma de los grados de un grafo G es igual a dos veces su tamaño tenemos que: Por lo tanto: Lo cual es una contradicción con la primera desigualdad que viene de suponer que T no contenía al menos 2 vértices terminales. Sabemos que en un grafo conexo dados dos vértices existe una trayectoria que los une, sin embargo en árboles podemos decir un poco más: Teorema. Dado T árbol, si , entonces T contiene una única u-v-trayectoria. 18 | Fundamentos de la Teoría de Grafos Demostración. Sea T árbol y sean . Supongamos que existen P y Q dos u-v-trayectorias distintas, por lo tanto existe un vértice tal que el vértice que sigue después de x en P sea distinto del que le sigue en Q, y sea y el primer vértice en P, después de x, que también esté en Q. De aquí que podamos construir el siguiente ciclo lo cual es una contradicción que viene de suponer que existían dos u-v-trayectorias distintas en T. Definición. Un árbol de expansión de un digrafo de n vértices es un grupo de n-1 aristas que conecta todos los vértices. Todo vértice es alcanzable desde cualquier otro vértice. En digrafos, los vértices no tienen una dirección asociada. Un grafo puede tener varios árboles de expansión Propiedades de los árboles de expansión: No contienen ciclos – un ciclo necesita n aristas en un grafo de n-vértices. Existe exactamente un camino entre dos vértices cualquiera – existe por lo menos un camino entre cualesquiera dos vértices ya que todos los vértices están conectados. Más aún, no hay más de un camino entre un par de vértices. Añadir una arista que no pertenece al árbol crea un ciclo – Supongamos una arista que no pertenece al árbol (x, y), la arista añadida y el camino en el árbol. De aquí que exista un ciclo. Por ejemplo, si añadimos una arista (A, D) al árbol de expansión mostrado en la parte final de la figura anterior, entonces tendremos un ciclo (A, B, D, A). C D B A C D B A C D B A C D B A C D B A Figura1.10 Dígrafo y cuatro de los árboles de expansión del grafo. y x v u . . . . . . . . . . . . P Q Figura 1.9 Se observan las 2 u-v-trayectorias y el ciclo que se forma al suponer que son distintas. 19 | Fundamentos de la Teoría de Grafos Remover una arista de un ciclo como el anterior crea un árbol de expansión. Después de remover la arista existirán (n – 1) aristas. Todos los vértices del grafo estarán conectados: supongamos que la arista (x, y) que pertenece al grafo original es removida. Los vértices x y y estarán aún conectados porque x y y estuvieron en un ciclo. Para otro par de vértices, en el camino del grafo original remplaza la arista (x, y) por el camino entre x y y. Al remover la arista (B, D) del ciclo (A, B, D, A) se crea un árbol de expansión. Los árboles de expansión tienen aplicaciones en el diseño de redes de comunicación. Si los vértices representan ciudades y las aristas distancias y necesitáramos colocar líneas eléctricas entre cada ciudad estos serían un buen modelo, los árboles de expansión también son útiles en problemas de rutas (rutas del correo, camiones escolares, vendedores viajeros, etc.). Figura1.11 Añadir una arista que no pertenece al árbol crea un ciclo. Al añadir la arista (A, D) C D B A C D B A Al remover la arista (B, D) C D B A C D B A Figura1.12 Remover una arista del grafo crea un árbol de expansión a) No es un árbol de expansión b) Árbol de expansión 20 | Fundamentos de la Teoría de Grafos Digrafo etiquetado y ponderado Cuando estamos trabajando con digrafos con pesos heterogéneos en las aristas, debemos precisar de mejor manera algunas de las definiciones. Definición. Un grafo G es etiquetado si sus aristas y/o vértices tienen asignado alguna identificación. Definición. Un grafo G es ponderado si a cada arista e de G se le asigna un número real w(e) denominado peso o longitud de e. La matriz de pesos del Digrafo etiquetado y ponderado quedaría de la siguiente forma, donde si y tendremos que Definición. Sea un digrafo con una función de pesos en las aristas . Esta función asigna a cada arista un peso que, en general, puede ser un número real y puede ser negativo 4 3 4 2 1 5 6 3 8 2 10 6 3 9 1 3 1 2 4 Figura 1.13 Digrafo etiquetado y ponderado 21 | Fundamentos de la Teoría de Grafos Definición. El peso de un camino , está dado por: Definición. El peso de un camino más corto o distancia es: Propiedad: Sea un camino de a que pasa por . Entonces . Lema. Sub-caminos de caminos más cortos, son caminos más cortos. Dado un digrafo ponderado con función de pesos , sea el camino más corto del vértice al vértice y para cualquier i y j tal que , sea del sub-camino de W del vértice al vértice . Entonces, es un camino más corto de a . Demostración. Si descomponemos el camino W en , entonces tendremos que . Ahora, asumamos que existe un camino desde hacia con peso . Entonces, es un camino desde hacia cuyo peso es menor que , lo que contradice la asunción de que p es un camino más corto desde hacia . 6 1 1 1 2 2 3 4 4 7 9 9 1 1 2 2 3 5 6 8 9 7 Figura1.14 Camino de peso mínimo o distancia entre y . 22 | Fundamentos de la Teoría de Grafos Definición. es un árbol de caminos más cortos si cumple con: i. son los vértices para los cuales ii. es un árbol dirigido con raíz en s. iii. es tal que Capítulo 2 Introducción al Análisis de Algoritmos Conceptos Básicos Un algoritmo, llamado así por el erudito del siglo XIX Abu Jafar Muhammad Ibn Musu Al- Khowarizmi, es definido en forma general como sigue: Un conjunto de reglas e instrucciones bien definidas finitaspara obtener un resultado a partir de un conjunto específico de argumentos en un tiempo finito. El uso de algoritmos se ha incrementado ampliamente con la evolución de los sistemas de cómputo, pero tiene las siguientes características: Entrada: El algoritmo trabaja a partir de una entrada (o datos). Excepcionalmente, el algoritmo trabajará a partir de 0 entradas. Salida: El algoritmo produce una salida (resultado), que corresponde a la solución del problema planteado. Secuencia finita de pasos: El algoritmo define una secuencia de pasos cuya ejecución transforma a la entrada en la salida. Definición precisa: Cada uno de estos pasos debe estar bien definido y tener un nivel adecuado de detalle. Terminación: El algoritmo debe siempre terminar su ejecución proporcionando una solución correcta. El algoritmo más famoso en la historia, data de tiempos de antes de los antiguos Griegos, este es el algoritmo de Euclides para calcular el máximo común divisor de dos enteros. Para trabajar con un algoritmo debemos cubrir dos aspectos. El primero de ellos consiste en demostrar la correctez del algoritmo, esto es, que el algoritmo termina y produce la solución correcta frente a cualquier ejemplar del problema. La segunda consiste en hacer el análisis del algoritmo. 24 | Introducción al Análisis de Algoritmos Correctez de un algoritmo Las demostraciones de correctez de un algoritmo generalmente se hacen por inducción en el número de veces que se repiten los enunciados del algoritmo, o si el algoritmo trabaja de manera recursiva, por una fórmula que contempla el costo de cada invocación. Debemos encontrar una invariante, que se refiere a predicados que deben ser verdaderos antes de que se inicie la ejecución (la base de inducción) y al terminar la ejecución. Generalmente se demuestra que si en el ciclo k el predicado se evalúa a verdadero, con las operaciones que se ejecutan en el ciclo, el predicado seguirá siendo verdadero en el ciclo k + 1 (paso inductivo). No es tan difícil encontrar esa invariante, pues tiene que ver con la manera en que describimos la salida del algoritmo. Todos los algoritmos que resuelven un determinado problema pueden no resultar iguales, porque alguno de ellos puede resultar más rápido que otros. Por lo tanto, se está en la necesidad de encontrar patrones que indiquen cuando un algoritmo es mejor que otro y porque. Para esto se introduce el concepto de complejidad computacional. La complejidad de un algoritmo mide la cantidad de esfuerzo computacional que se requiere para resolver un problema utilizando un algoritmo. El diseño de buenos algoritmos requiere creatividad e ingenio y no existen, en general, reglas para diseñar algoritmos. Es decir, no existe un algoritmo para diseñar algoritmos. Existen varios algoritmos para resolver un mismo problema, la pregunta es ¿cuál es el “mejor”?. El mejor es aquel que utilice los mínimos recursos informáticos para llevar a cabo la tarea determinada. Tiempo: Utilizando el tiempo empleado por el algoritmo como medida de eficiencia del mismo, aunque en general deben tenerse en cuenta los recursos que emplea para obtener la solución. Se define como un instante al caso particular de un problema con datos específicos para todos los parámetros del problema. Teniendo en cuenta que un algoritmo podrá resolver rápidamente determinados casos particulares de un problema y tardar demasiado en la resolución de otros. Las diferentes instrucciones típicas de un algoritmo son instrucciones de asignación, aritmética y lógicas. El número total de las mismas resulta de la suma de todas las instrucciones definidas anteriormente y determina el tiempo requerido en la ejecución del algoritmo. Es importante hacer notar que estamos suponiendo que cada una de estas instrucciones toma una cantidad constante de tiempo, independientemente del tamaño de la entrada y que es el mismo para todas las operaciones. Esto en general no va a ser cierto. 25 | Introducción al Análisis de Algoritmos Si el tiempo de ejecución es demasiado grande, puede suceder que el algoritmo sea en la práctica inútil, pues el tiempo necesario para su ejecución puede sobrepasar el tiempo disponible del ordenador. Espacio: La complejidad de espacio de un algoritmo (para una entrada dada) es el número de objetos elementales que este algoritmo necesita almacenar durante su proceso de ejecución. El espacio ocupado por un algoritmo es determinado por el número y tamaño de las variables y estructuras de datos usadas por el algoritmo. En ocasiones se tendrá que hacer un balance entre tiempo y espacio, ya que para reducir el tiempo se requerirá de más espacio y viceversa. Esta situación es referida como negociación tiempo-espacio. La característica de los problemas de optimización combinatoria de tener un conjunto numerable de soluciones, hace que la obtención de la mejor solución sea un problema que podría tener poco interés matemático. Sin embargo es frecuente que este tipo de problemas tengan n! soluciones factibles. Si un ordenador puede examinar soluciones por segundo podría terminar su tarea para: n = 20 en unos 800 años n = 21 en cerca de 16,800 años Un algoritmo se considera eficiente si y solo si es polinomial. Definición. Un algoritmo es polinomial si el número de operaciones elementales necesarias para resolver un ejemplo de tamaño n está acotado por una función polinomial en n. Notación para expresar complejidad en tiempo (complejidad asintótica) El análisis asintótico es un medio de comparar el rendimiento relativo. La complejidad en tiempo de un algoritmo se ocupa de determinar una expresión del número de operaciones primitivas necesitadas como una función del tamaño del problema. Ya que la medida de contar el número de iteraciones es algo difícil, el propósito no es obtener una cuenta exacta del número de iteraciones, más bien, lo que se busca es encontrar cotas asintóticas de la cuenta de iteraciones. El análisis asintótico hace uso de la notación de Landau: O(O mayúscula) y o(o – minúscula). Otras notaciones también son usadas en el análisis de algoritmos como son: y . 26 | Introducción al Análisis de Algoritmos La tasa u orden de crecimiento del tiempo que toma un algoritmo , se considera que es un algoritmo más eficiente que otro, si el tiempo que toma su peor caso tiene menor orden de crecimiento. La notación representa que está acotando a la función por arriba, es decir que la está acotando en el peor de los casos. Definición. Se dice que una función es de orden si y solo si se cumple que existen unas constantes positivas c y , ambas independientes de n, tales que: Decidir que es de orden supone que cg(n) es una cota superior del algoritmo. Es decir que f no crece más rápido que g. Diremos también que f y g tienen el mismo orden si y . Para estimar la bondad de los distintos algoritmos, se utilizará el análisis del peor caso, un estudio experimental de los algoritmos suministra información importante para su utilización práctica, dependiendo del instante del problema que se ha de resolver. El tiempo de ejecución de un algoritmo depende de la naturaleza y tamaño de la entrada. Una función temporal de la complejidad de un algoritmo es una función del tamaño del problema y especifica el tiempo máximo que se necesita para resolver un instante de un tamaño dado. Es decir, la función temporal de complejidad da una medida de la proporción en que se incrementa el tiempo de resolución con respecto a un incremento en el tamaño del problema. Se refiere a la función temporal de complejidad del peor caso de un algoritmo como su cota del peor caso (una cota superior del tiempo invertido). La notación O mayúscula tiene unas cuantas implicaciones. La complejidad de un algoritmo es una cota superior de tiempo de ejecución del algoritmo para valores de n lo suficientemente grandes. Más aún,esta notación indica solo los términos más dominantes en el tiempo de ejecución y representa el hecho de que para una n grande, los términos con un crecimiento menor tienden a ser insignificantes si se compara con el término de mayor crecimiento. Por ejemplo, si el tiempo de ejecución de un algoritmo es , entonces para todo el segundo término domina al primer término y para todo el tercer término domina al segundo término. Así, la complejidad del algoritmo es . Otra importante implicación de ignorar las constantes en el análisis de la complejidad es que se asume que las operaciones elementales, tales como la suma, multiplicación, asignación y operaciones lógicas, requieren una misma cantidad de tiempo. Se dice que un algoritmo es bueno si la complejidad del peor caso está acotada por una función polinomio de los parámetros del problema. 27 | Introducción al Análisis de Algoritmos El siguiente ejemplo ilustra que es , para cuando Sea y Para y Verificamos lo anterior al sustituir , entonces tendríamos Para una n suficientemente grande, tiene una cota superior de Se escribe Un algoritmo que cumpla esto es llamado algoritmo polinomio y un algoritmo polinomio se dice que es fuertemente polinomio si su complejidad está acotada por una función polinomial en n y m y no aparecen las expresiones log(C) o log(U). En caso contrario se dice que el algoritmo es débilmente polinomial. La notación de representa que se está acotando asintóticamente a la función por abajo, lo que significa que está acotando a en el mejor de los casos. Definición. Se dice que una función es de orden si y solo si existen unas constantes positivas c y tales que: Decir que es supone que cg(n) es una cota inferior del algoritmo. Ejemplo: El mejor caso en tiempo de ejecución del ordenamiento por inserción (cuando el arreglo de entrada se encuentra ordenado previamente) es . El peor caso del ordenamiento por inserción (cuando el arreglo se encuentra en orden inverso) es . Por lo que el tiempo de ejecución del ordenamiento por inserción cae entre y , ya que cae entre una función lineal de n y una función cuadrática de n. La notación de representa que esta acotando a la función por los extremos, lo que significa que está acotando a tomando en cuenta el mejor caso y el peor caso en ese rango. Se dice que una función es si y solo si se cumple que existen unas constantes positivas y , tales que: 28 | Introducción al Análisis de Algoritmos La notación es más precisa que las notaciones y , ya que es si y solo si es a la vez una cota inferior y superior de . Definición. Sean y funciones reales definidas para toda (donde n0 es un número positivo real fijo). Se dice que si y solo si El Valor de n0 no dependerá de n, pero podría depender de c. Por ejemplo, pero . La notación o-minúscula es como O-mayúscula, pero nos da una cota superior que no es asintóticamente justa. Definición. Sean y funciones reales definidas para toda (donde n0 es un número positivo real fijo). Se dice que si y solo si Lo anterior quiere decir que si , entonces la razón de crecimiento de es mayor que la razón de crecimiento de . Funciones de Complejidad en tiempos más usuales Las funciones de complejidad algorítmica más usuales, ordenadas de mayor a menor eficiencia (tiempo de ejecución) son: : Complejidad constante. El tiempo de ejecución del algoritmo es constante. Ejemplo: Obtener un elemento de un arreglo, dado su índice. Ya que el índice provee acceso directo al arreglo, el tiempo que toma en completar la tarea es independiente del tamaño n del arreglo. : Complejidad logarítmica. Esta complejidad suele aparecer en determinados algoritmos con iteración o recursión no estructural, es lograda al dividir el problema en segmentos más pequeños y solo analizar un elemento de entrada en cada segmento. Ejemplo: Algoritmo de búsqueda binaria (Binary search). : Complejidad lineal. Es en general, una complejidad buena y bastante usual. Suele aparecer en la evaluación de un bucle simple cuando la complejidad de las operaciones interiores es constante o en algoritmos con recursión estructural. 29 | Introducción al Análisis de Algoritmos Ejemplo: Encontrar el elemento mínimo en un arreglo. : Complejidad lineal – logarítmica: Típicamente alcanzada al dividir el problema en sub- problemas, resolviendo estos de forma independiente y después combinando los resultados. A diferencia de los algoritmos de complejidad logarítmica, cada elemento en los sub-problemas debe ser examinado. Ejemplo: Algoritmo de ordenamiento por intercalación o mezcla (Merge sort). : Complejidad cuadrática. Aparece en bucles o recursiones doblemente anidados. Aparece cuando tenemos que examinar todos los pares de elementos de datos. Ejemplo: Algoritmo de ordenamiento por selección (Selection sort). : Complejidad cúbica. Aparece en bucles o recursiones triples. Para un valor grande de n empieza a crecer en exceso. Ejemplo: Multiplicación de matrices - Cada elemento de la matriz resultante es obtenido al multiplicar dos vectores de tamaño n. Esto requiere un tiempo n. Ya que existen n2 elementos en la matriz resultante, toma un tiempo de n3 computar la matriz resultante completa. : Complejidad polinómica. Si k crece, la complejidad del programa es mala. : Complejidad exponencial. Debe evitarse en la medida de lo posible. Puede aparecer en un subprograma recursivo que contenga dos o más llamadas internas. En problemas donde aparece esta complejidad suele hablarse de explosión combinatoria. Cualquier función exponencial con una base mayor a uno crece más rápidamente que cualquier función polinomio. Los números Fibonacci crecen exponencialmente. Ejemplo: Resolver el problema de la sub-secuencia más larga mediante el enfoque de fuerza-bruta. Algunos ejemplos de cotas polinomiales son y algunos débilmente polinomiales como . Se dice que un algoritmo es exponencial en tiempo, si su ejecución no puede ser acotada polinomialmente por la longitud de la entrada. Algunos ejemplos son Se dice que un algoritmo es pseudopolinomial si su tiempo de ejecución es polinomicamente acotado en n, m, C y U. Algunos ejemplos son y 30 | Introducción al Análisis de Algoritmos Tipos de Algoritmos La Teoría de la Complejidad estudia la manera de clasificar algoritmos como buenos o malos y de clasificar problemas de acuerdo a la dificultad inherente de resolverlos. Algoritmos Determinísticos: Tiene la propiedad de que el resultado de cada operación, se define en forma única. En otras palabras nos garantizan en cada paso la solución. Algoritmos No Determinísticos: Tiene la propiedad de que el resultado de una o varias operaciones, se determina dentro de un conjunto especificado de posibilidades. En otras palabras están adivinando en cada paso la solución pero no garantizan llegar a la solución óptima en el mejor de los casos. Para determinar si los algoritmos son buenos o malos se determinaron las siguientes convenciones: 1. Todos los algoritmos, desde constantes hasta polinomiales, son polinomiales. 2. Todos los algoritmos exponenciales y factoriales, son exponenciales. 3. Los algoritmos polinomiales son “buenos” algoritmos. 4. Los algoritmos exponenciales son “malos” algoritmos. Por lo tanto los problemas los podemos clasificar como: a) Fáciles si su método de solución cuyo tiempo de ejecución en una computadora crece de forma “razonable” o polinomial. b) Difíciles si no existe algoritmo. Realizar la determinación anterior se denomina establecer la complejidad computacional del problema. Hay razones para preferir algoritmos polinomiales a algoritmos exponenciales. Las funciones de complejidad exponencial tienen un crecimiento explosivo y en general resuelven solo pequeños problemas. Complejidad de los problemas Dependiendo de los requerimientosdel problema se pueden clasificar de la siguiente forma: 1. Problemas de búsqueda: Encontrar un valor, en los datos de entrada, que satisfaga una propiedad. 2. Problemas de estructura: Transformar los datos de entrada para satisfacer una propiedad. 3. Problemas de construcción: Construir un valor que satisfaga una propiedad. 31 | Introducción al Análisis de Algoritmos 4. Problemas de optimización: Encontrar el mejor valor, en los datos de entrada, que satisfaga una propiedad. 5. Problemas de decisión: Decidir si una entrada satisface o no una propiedad. 6. Problemas adaptativos. Mantener una propiedad todo el tiempo. Podemos clasificar los problemas en cuatro clases de acuerdo a su grado de dificultad: 1. Problemas indecidibles. Son aquellos problemas para los cuales no se puede escribir un algoritmo. Por ejemplo, se ha probado que un programa que se detendrá en una Máquina de Turín (1937) es de esta clase. El problema de Turing al igual que el décimo problema de Hilbert y el de programación cuadrática en enteros, son problemas de este tipo, es decir que no sólo no existe un algoritmo polinomial para su solución sino que no existe algoritmo. 2. Problemas intratables (problemas que se demuestran que son difíciles). Son aquellos problemas para los cuales no se pueden desarrollar algoritmos polinomiales. En otras palabras, sólo se pueden resolver con algoritmos exponenciales. 3. Problemas NP (donde NP se entiende por Polinomial no Determinístico). Esta clase incluye problemas que se pueden resolver en tiempo polinomial si podemos adivinar correctamente que ruta computacional se puede seguir. El concepto de adivinar es extraño ya que todos los programas computacionales son Determinísticos. En general, esta clase incluye todos los problemas que tienen algoritmos exponenciales pero que no se ha probado que no se puedan resolver con algoritmos de tiempo polinomial. 4. Problemas P (donde P se entiende por polinomial). Esta clase incluye todos los problemas que tienen algoritmos de tiempo polinomial. Se pueden considerar como una subclase de la clase anterior. Un problema se dice polinomial si existe un algoritmo para el cual el tiempo requerido para su solución, está acotado por una función polinomial del tamaño del problema (donde entendemos por tamaño como la longitud de un código). Se tiene así por ejemplo que en un grafo G (V, E) donde y , un problema de la ruta más corta se encuentra a lo más en un tiempo , un flujo máximo en un tiempo , un árbol de peso mínimo en un tiempo . Sin embargo no todos los problemas combinatorios son polinomiales. 5. Problemas NP-completos: Subconjunto de problemas NP que son los más difíciles de resolver. Se dice que un problema pertenece a esta clase si cada problema de la clase NP puede reducirse en tiempo polinomial a este. 32 | Introducción al Análisis de Algoritmos El siguiente ejemplo nos dejará más claro cómo funciona y como se describe un algoritmo, en éste encontraremos el mínimo dentro de una lista de elementos de un orden parcial. Algoritmo del mínimo elemento y su posición en una lista. [Dado un listado de elementos de un orden parcial, encuentra el mínimo y lo despliega junto con su ubicación en la lista.] 1. [La variable MIN representa el “primer elemento” actual] 2. [Declara la variable p que nos dará la ubicación del elemento deseado] 3. [Para cada elemento de la lista, distinto de , si el elemento es menor que MIN, entonces MIN es remplazado por y p por k. 4. Desplegar MIN y p. Como este algoritmo hace n-1 comparaciones, es claro que su complejidad es n -1 = O(n), por lo que es polinomial y eficiente. Comparación de Algoritmos Se comparará la eficiencia de dos algoritmos utilizados para encontrar, si aparece y de ser así dónde, una palabra dentro de una lista ordenada alfabéticamente. Usaremos la relación a < b para indicar que la palabra a, alfabéticamente, se encuentra antes que la palabra b. El primer algoritmo llamado algoritmo secuencial de búsqueda realiza la búsqueda de la manera más lógica, empezando desde el principio, compara cada palabra de la lista con la palabra buscada, si la encuentra detiene el proceso y avisa que la palabra existe en la lista, si recorre toda la lista y no la encuentra despliega que no fue encontrada. 33 | Introducción al Análisis de Algoritmos Algoritmo secuencial de búsqueda. [Determina si la palabra dada LLAVE aparece en un listado de palabras ordenado alfabéticamente, si aparece desplegar la posición] 1. [Si la k-ésima palabra de la lista es LLAVE su ubicación es desplegada y el algoritmo termina]. Para k = 1 hasta n desplegar k y detener 2. Desplegar “no se encontró” Es claro que el algoritmo necesitará hacer n comparaciones antes de terminar en el peor de los casos, es decir, cuando la palabra no se encuentre en la lista. Por lo tanto la complejidad de este algoritmo es . El siguiente algoritmo lleva el nombre de Algoritmo Binario de Búsqueda, para esto definamos lo que es el piso de un número real x, denotado por , como el máximo entero menor que x. Con esto podemos describir el algoritmo formalmente como sigue: Algoritmo Binario de Búsqueda. [Determina si la palabra LLAVE aparece en un listado de palabras ordenado alfabéticamente, si lo aparece despliega donde.] 1. [j y k representan la primera y la última palabra de la sublista siendo considerada. Inicialmente j = 1 y k = n] 1.1 j = 1 1.2 k = n 2. [W (m) es la palabra a la mitad entre W (j) y W (k).] Mientras j<k hacer a) b) [Si la m-ésima palabra es LLAVE despliega su ubicación y el algoritmo termina] c) [Si LLAVE está antes alfabéticamente que W (m), entonces la nueva sublista se tomará entre W (j) y W (m – 1)] Si LLAVE < W (m), entonces k = m – 1 34 | Introducción al Análisis de Algoritmos d) [Si LLAVE está después alfabéticamente que W (m), entonces la nueva sublista se tomará entre y ] Si LLAVE > W (m), entonces j = m + 1. 3. Desplegar “no se encontró” Para determinar la complejidad de este algoritmo observemos que los pasos uno y tres sólo se realizan una vez por lo que su orden es constante . Ahora en el paso dos es claro que el mayor número de iteraciones se dará si la palabra no se encuentra en la lista. Llamemos B(n) al número de iteraciones del paso 2, como después de realizar este paso por primera vez habrá una lista con a lo más palabras a considerar, entonces Demostraremos ahora por inducción fuerte que Si n = 1 es claro que la desigualdad se da. Supongamos ahora que la desigualdad anterior se cumple para todo entero n con , probaremos entonces que Por la primera desigualdad Sin embargo por Hipótesis Inductiva Por lo tanto: Por consiguiente . Como en cada iteración del paso 2 sólo se hacen dos comparaciones y dos asignaciones, el orden de cada una es constante. Por lo que la complejidad resultante del paso 2 es . 35 | Introducción al Análisis de Algoritmos Algoritmos de exploración en grafos Uno de los problemas fundamentales con grafos son las distintas maneras que tenemos de garantizar que todos los vértices de un grafo (o que todas las aristas) son alcanzados, con un cierto objetivo en mente. Esto tiene muchas aplicaciones, como puede ser contar el número de aristas presentes en un grafo, verificar que todas las conexiones en una red de computadoras están funcionando, etc. Definición. La exploración de un grafo significa visitar cada uno de sus vértices exactamente una vez. Esto es cumplido al visitar los vértices de una forma sistemática. Los algoritmos de exploración que vamos a revisar tienen todos un funcionamiento local; esto es, para llevar a cabo la exploración no es necesario tener presente toda la gráfica, sino únicamente, en cada momento, al vértice desde el que se hace la exploración en esa iteración, junto con los vecinos de
Compartir