SlideShare ist ein Scribd-Unternehmen logo
1 von 24
Universidad Católica San Pablo
Proyecto PIBAP 03-295 Contrato #040
        Informe Componente 1
 Periodo 1 de Marzo- 30 de Junio 2009
 Ernesto Cuadros Vargas (E2) {ecuadros@gmail.com}
   Alex Cuadros Vargas (E2) {alex.jcv@gmail.com}
     Luis Diaz Basurco (E4) {l.diaz@gmail.com}
Christian López del Alámo (E4) {criloal23@gmail.com}
 Christian Portilla Pauca (E4) {xhrist@xhrist.co.cc}
Edwin Huarhua Chambi (E4) {ehuarhua@gmail.com}
Manuel Bellido Oviedo (E4) {manubellido@gmail.com}


                18 de junio de 2009
Índice general


1. Preliminares                                                                       4
  1.1.   Teoría básica de grafos . . . . . . . . . . . . . . . . . . . . . . . .       4
  1.2.   Algoritmos sobre grafos      . . . . . . . . . . . . . . . . . . . . . . .    6
         1.2.1.   Algoritmo de Dijkstra del camino mínimo . . . . . . . . .            6
         1.2.2.   Algoritmo de Kruskal      . . . . . . . . . . . . . . . . . . . .    9
         1.2.3.   Algoritmo de Prim . . . . . . . . . . . . . . . . . . . . . .       10
  1.3.   Algoritmos     . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   11
         1.3.1.   Dijkstra: Camino mas corto . . . . . . . . . . . . . . . . .        11
         1.3.2.   Floyd-Warshall: Todos los caminos mínimos . . . . . . . .           11
         1.3.3.   Desempeño de los algoritmos de busqueda . . . . . . . . .           13
  1.4.   Editor de Grafo . . . . . . . . . . . . . . . . . . . . . . . . . . . .      14
         1.4.1.   Introducción    . . . . . . . . . . . . . . . . . . . . . . . . .   14
         1.4.2.   Características del editor    . . . . . . . . . . . . . . . . . .   16
         1.4.3.   Funcionalidad del editor . . . . . . . . . . . . . . . . . . .      16
         1.4.4.   Formato de archivo de Editor Grafo        . . . . . . . . . . . .   22




                                           1
Introducción

   En el desarrollo de la plataforma de software que brindará información de
rutas que conecten dos puntos dados de una ciudad se considerará que las posi-
bles rutas de conexión conforman un grafo donde las aristas son las calles y
los nodos las esquinas incluyendo también como nodos importantes los puntos
de origen y destino. La ruta incluirá tanto desplazamientos a pié como con ve-
hículos motorizados  de transporte público y privado  respetando criterios
especícos. Esto obliga a considerar diferentes tipos de grafos como: grafos no
dirigidos en el caso que el desplazamiento sea realizado a pie, y dirigidos en
el caso que se use un vehículo de transporte. Puesto que la elección de la ruta
depende del tiempo, número de trasbordos, costo, etc se trabajar pesos que sern
variables en el tiempo de acuerdo a las condiciones.
   En esta primera parte se trabajará bajo supuestos estables. La informacíon
necesaria que incluyen el catastro de vías y de líneas de transporte público para
la obtención del grafo a tratar, se suponen disponibles independiente de la ciudad
en donde se quiera resolver el problema de conexión. Este trabajo incluirá la
suciente exibilidad para adaptarse a cambios de condiciones y de operación
que se incluirán en una segunda parte de este proyecto donde el abordaje tomará
en cuenta consideraciones estocásticas que surgen en el problema real de ruta
más corta.
   Cabe mencionar que existen diferentes sistemas que implementan variadas
soluciones al problema de la ruta más corta disponibles para diferentes ciudades
del mundo. Estos sistemas son generalmente disponibilizados por la empresa de
transportes contratista encargada del transporte público de la ciudad. Entre es-
tos sistemas, algunos de los que proveen una mayor información son los ofrecidos
por Massachussets Bay Transportation Authority (http://www.mbta.com/) del
estado de Massachussets en los Estados Unidos de América, Transport of Lon-
don (http://www.t.gov.uk/) de la ciudad de Londres en Inglaterra y Verkehrs-
und Tarifverbund Stuttgart (http://www.vvs.de/) de la ciudad de Stuttgart en
Alemania. Este último en particular es capaz de calcular rutas que incluyan
trayectos a pié, en taxi, y los diferentes sistemas de transporte urbano (metro,
ómnibus, tranvía, etc.).
   Estos sistemas lidian con cronogramas de circulación jos para todas las
líneas de transporte. Por esta raízón algoritmos exactos de búsqueda de rutas
pueden ser aplicados [Gallo y Pallottino, 1988; Cherkassky et al. 1996]. Existen
investigaciones especícas en este respecto que evalúan las diferentes técnicas



                                        2
de cálculo de rutas más cortas para el caso particular de redes de transporte
público y privado. Las más relevantes en este contexto son las presentadas por
Zhan y Noon [Zhan, 1997; Zhann y Noon 1998; Zhann y Noon 2000]. Los autores
en un inicio evalúan un conjunto de tres algoritmos de cálculo de la ruta más
corta [Zhan,1997], los cuáles se demostró que ofrecían los mejores resultados
en redes viales reales [Cherkassky et al. 1996], especicamente 1) el algoritmo
de crecimiento de grafos implementado con dos colas [Pallottino 1984], 2) el
algoritmo de Dijkstra [1959] implementado con cubos (buckets) aproximados
[Goldberg y Silverstein, 1995] y 3) el algoritmo de Dijkstra implementado con
buckets dobles [Cherkassky et al. 1996]. En su evaluación, Zhan resume estos tres
algoritmos y demuestran las estructuras de datos y procedimientos relacionados
a ellos.
   En un segundo trabajo Zhan y Noon [1998] tratan el problema especíco
de la aplicación de algoritmos de rutas más cortas en redes viales reales. Es
dicho trabajo los autores prueban diferentes algoritmos en una variedad de re-
des viales reales lo que conlleva a la identicación de algoritmos ideales para
realizar este cálculo. Posteriormente un estudio comparativo entre algoritmos
de establecimiento de etiquetas frente a algoritmos de corrección de etiquetas,
en problemas de cálculo de rutas más cortas entre dos nodos de una red, fue
realizado [Zhan y Noon 2000]. En este estudio también se utilizó redes viales
reales y se comparó especicamente el algoritmo de Dijkstra implementado con
cubos (buckets) aproximados [Goldberg y Silverstein, 1995] y el algoritmo de
crecimiento de grafos implementado con dos colas [Pallottino 1984]. Trabajos
centrados en el cálculo de rutas más cortas en redes viales especícos para
escenarios temporales (por ej. simulación en el tiempo) también han sido desar-
rollados [Kaufman y Smith, 1993; Horn, 2000; Horn, 2006].
   A pesar de ser un tema bien documentado, como mencionado anteriormente,
estos algoritmos exactos pueden ser aplicados en situaciones donde el cronogra-
ma de circulación de las empresas de transporte público es jo. Actualmente
esta no es la situación en las ciudades del país. Por lo tanto una alternativa que
permita incluir la exibilidad necesaria, relajar e introducir fácilmente restric-
ciones de acuerdo a los cambios estructurales del sistema de transporte (tales
como la implementación de servicios de transporte público organizados). Esto
se puede lograr atacando el problema como un cálculo estocástico de rutas más
cortas.
   Nuestro propósito en el presente trabajo es desarrollar una técnica más e-
ciente que las existentes en términos de exibilidad y de tiempo de procesamien-
to. Así mismo, los trabajos existentes al respecto presentan resultados teóricos
y no incluyen su evaluación en redes viales reales como en el caso de algoritmos
exactos. Por lo tanto, pretendemos también realizar esta evaluación.




                                        3
Capítulo 1

Preliminares

    En esta primera parte introducimos los conceptos básicos necesarios para el
desarrollo y entendimiento de los resultados obtenidos hasta el momento.



1.1.         Teoría básica de grafos

Grafos
    Para cualquer conjunto     V,   denotaremos por              V (2)   el conjunto de todos los
pares ordenados o no ordenados de elementos de                   V.
    Un grafo es un par     (V, A) en donde V es un conjunto arbitrário y A es un
subconjunto de   V (2) . Los elementos de V son llamados vértices o nodos y los de
A   son llamadas aristas.
    Para nes del presente estudio el conjunto             V     es nito.
    La denición de grafo implica que a toda arista e ∈ A del grafo se le puede
asociar una pareja ordenada (u, v) o desordenada {u, v} de nodos u, v del grafo.
   Se dene el grado de entrada de v ∈ V como el número de aristas que inciden
en v .
   De forma paralela se dene el grado de salida de v como el número de aristas
que emergen de v .
   El grado de v es la suma de los grados de entrada y salida de v . Así el grado
de un grafo es el máximo grado de sus vértices.
Caminos
    Camino desde un vértice    u∈V      a un vérticev ∈ V es una sucesión {v0 ; v1 ; . . . ; vk }
de vértices de   G = (V ; A)   tal que     v0 = u; vk = v ; (vi ; vi+1 ) ∈ A, para todo
i = 0..k .
    La longitud de un camino        {v0 ; v1 ; ...; vk }   es el número       k   de aristas que lo
forman.
    Se denomina camino simple a un camino en el que todos sus vértices son
distintos.
    Un ciclo es un camino simple       {v0 ; v1 ; . . . ; vk }   tal que   v0 = vk .




                                               4
Grafo acclico es un grafo sin ciclos.
Subgrafos
        Se dice que    G = (V ; A )      es un subgrafo de      G = (V ; A) si V ⊆ V y A ⊆ A.
        El subgrafo inducido por          V   ⊆ V     es un subgrafo     G = (V ; A ) tal que
A = {(u; v) ∈ A : u; v ∈ V }.
        Conexidad
        Antes de denir cuando un grafo es conexo recordemos que un vértice alcan-
zable desde un vértice         u   es cualquier vértice     v   para el que existe un camino de
u   a   v.

        Un grafo (fuertemente) conexo es un grafo (dirigido)                G = (V ; A)   en el que
u; v ∈ V      ,   v   es alcanzable desde     u.   Se denominan componentes (fuertemente)
conexas de un grafo (dirigido) a las clases de equivalencia de vértices según la
relación ser mutuamente alcanzable.
        Un grafo completo es un grafo              G = (V ; A)    en el que   ∀u; v ∈ V ; u = v;
(u; v) ∈ A

        Isomorsmo de grafos
        Dos grafos     G = (V ; A); G = (V ; A ) son isomorfos si            existe una biyección
f :V →V           tal que  (u; v) ∈ A si y solo si (f (u); f (v)) ∈ A

        Grafos etiquetados
        Se denomina grafo etiquetado a un grafo              G = (V ; A)     acompañado de una
función      f : A → E,     donde    E   es un conjunto cuyas componentes se denominan
etiquetas.
        Grafo ponderado es un grafo etiquetado con números reales                 (E = R)
árboles
        Se dene un bosque como un grafo no dirigido aciclico.
        Un árbol es un grafo en el que existe único nodo desde el que se puede acceder
a todos los demás y cada nodo tiene único predecesor, excepto el primero, que
no tiene ninguno. También podemos denir un árbol como:


          Un grafo conexo y sin ciclos.


          Un grafo sin ciclos y con        n−1     aristas, siendo   n   el némero de vértices.


        Grado de un nodo en un árbol es el número de subárboles de aquel nodo.
Denominamos hojas en un árbol a los nodos nales. Un árbol de máximo alcance
es aquel que obtenemos en un grafo conexo y sin ciclos.
        Por otro lado, se denominará árbol de mínima expansión es el árbol de
máximo alcance cuyo valor es mínimo, es decir, la suma de sus aristas es mínima.
        Dentro de los tipos de árboles a considerar en el presente trabajo se tiene:


          Un árbol libre que viene a ser un grafo no dirigido acíclico conexo.


          Un árbol de recubrimiento de un grafo no dirigido               G = (V ; A)   es un a¯bol
          libre   T = (V A )   tal que    V =V       y   A ⊆ A.


                                                     5
Un árbol enraizado es un a¯bol libre con un vértice distinguido denominado
       raíz. La raíz de un árbol                  A   se denota como             raiz(A),       o simplemente        A    si
       no hay confusión.

Theorem 1    Si G es un grafo con                          M  2 vértices, entonces los siguientes
proposiciones son equivalentes:

  1.   G es un árbol libre.
  2.   G es conexo y tiene M − 1 aristas.
  3. Cualquier par de vértices están conectados por un único camino.

  4. Si se añade una arista a                 G se crea un ciclo.
   Sea      A   un árbol enraizado en el vértice                     r   y sea   v   un vértice de        A.   Sea   C    el
único camino de        r   a   v:
  1. Se dice que un vértice               u   es antecesor o predecesor de                     v,   siu   est en   C.     En
       este caso también se dice que                   v   es descendiente o sucesor                 u,
  2. Si     (u; v)   es la última arista de                C,      se dice que       u   es el (único) padre de            v
       y se denota como             u = p(v).         Así mismo, se dice que                v es un       hijo de    u.   El
       conjunto de hijos de un vértice                     v   se denota como            hijos(v).
  3. Dos vértices          v ,v     de A son hermanos, si                 p(v ) = p(v).
  4. Se dice que un vértice                   v   es una hoja si hijos(v)                  =    nodos internos son
       aquellos vértices que no son hojas.

  5. La profundidad de               v   en   A   es la longitud del camino                 C   desde la raíz hasta
       v.
  6. Altura de        A, h(A),       es la profundidad de la hoja de mxima profundidad.

  7. El grado de un vértice               v   se dene como la talla de hijos(v).

   Un a¯bol ordenado es un a¯bol enraizado en el que los hijos de cada vértice
esta« ordenados.



1.2.        Algoritmos sobre grafos

1.2.1.          Algoritmo de Dijkstra del camino mínimo

   Esencialmente el algoritmo Dijkstra del camino mínimo es un algoritmo para
la determinación del camino más corto dado un vértice origen al resto de vér-
tices en un grafo dirigido y con pesos en cada arista. La idea subyacente en este
algoritmo consiste en explorar todos los caminos más cortos que parten del vér-
tice origen y que llevan a todos los demás vértices; cuando se obtiene el camino
más corto desde el vértice origen, al resto de vértices que componen el grafo, el
algoritmo se detiene.




                                                               6
Algoritmo
   Teniendo un grafo dirigido ponderado de                       N   nodos no aislados, sea     x el nodo
inicial, un vector   D    de tamaño       N     guardar al nal del algoritmo las distancias
desde x al resto de los nodos.


  1. Inicializar todas las distancias en                 D     con un valor innito relativo ya que
      son desconocidas al principio, exceptuando la de                        x   que se debe colocar en
      0 debido a que la distancia de             x   a    x    sera 0.


  2. Sea   a=x      (tomamos a como nodo actual).


  3. Recorremos todos los nodos adyacentes de a menos los nodos marcados,
      llamaremos a estos         vi .
  4. Si la distancia desde         x    hasta   vi   guardada en D es mayor que la distancia
      desde   x   hasta   a   sumada a la distancia desde            a hasta vi ; esta se substituye
      con la segunda nombrada, esto es: si                     (D1  Da + d(a, vi )) entonces Di =
      Da + d(a, vi )
  5. Marcamos como completo el nodo                       a.

  6. Tomamos como próximo nodo actual el de menor valor en                                D   (puede hac-
      erse almacenando los valores en una cola de prioridad) y volvemos al paso
      3 mientras existan nodos no marcados.


   Una vez terminado al algoritmo,               D    estar completamente lleno.


Complejidad
   Orden de complejidad del algoritmo:                        O(|V |2 + |E|) = O(|V |2 )      sin utilizar
cola de prioridad,   O((|E| + |V |)log|V |) utilizando cola de prioridad (por ejemplo
un montículo). Podemos estimar la complejidad computacional del algoritmo
de Dijkstra (en términos de sumas y comparaciones). El algoritmo realiza a lo
más   n−1   iteraciones, ya que en cada iteración se añade un vértice al conjunto
distinguido. Para estimar el número total de operaciones basta estimar el número
de operaciones que se llevan a cabo en cada iteración. Podemos identicar el
vértice con la menor etiqueta entre los que no están en                            Sk   realizando   n−1
comparaciones o menos. Despus hacemos una suma y una comparación para
actualizar la etiqueta de cada uno de los vértices que no están en                        Sk . Por tanto,
en cada iteración se realizan a lo sumo                   2(n − 1)       operaciones, ya que no puede
haber más de       n − 1 etiquetas por actualizar en cada iteración. Como no se
realizan más de     n−1 iteraciones, cada una de las cuales supone a lo más 2(n−1)
operaciones, llegamos al siguiente teorema.


Theorem 2    El Algoritmo de Dijkstra realiza O(n2 ) operaciones (sumas y com-
paraciones) para determinar la longitud del camino más corto entre dos vértices
de un grafo ponderado simple, conexo y no dirigido con n vértices.




                                                      7
Pseudocódigo
   Estructura de datos auxiliar:   Q = Estructura de datos Cola de prioridad (se
puede implementar con un montículo)


   DIJKSTRA (Grafo G, nodo-fuente s )
        // inicializamos todos los nodos del grafo. La distancia de
        // cada nodo es infinita y los padres son NULL
       Para cada u en V[G] hacer distancia[u] = INFINITO
       padre[u] = NULL
       fpara
       distancia[s] = 0
       // encolamos el nodo-fuente s
       Encolar (cola, grafo)
       mientras cola no es vaca hacer
           // OJO: Se extrae el nodo que tiene distancia mínima y se
  // conserva la condici'on de Cola de prioridad
            u = extraer-minimo(cola)
            para cada v en adyacencia[u] hacer
                si distancia[v]  distancia[u] + peso (u, v) do
                    distancia[v] = distancia[u] + peso (u, v)
                    padre[v] = u
       fsi

Pseudocódigo sin cola de prioridad
funcion Dijkstra (Grafo G, nodo-salida s)
// Usaremos un vector para guardar las distancias del nodo salida al
// resto. Inicializamos el vector con distancias iniciales
// boleano visto[n]
// vector de boleanos para controlar los vertices
// de los que ya tenemos la distancia minima
para cada w en V[G] hacer
   Si (no existe arista entre s y w) entonces
       distancia[w]=Infinito // marcar la casilla con un -1 por ejemplo
   Sino
       distancia[w] = peso (s, w)
   fsi
fpara
distancia[s] = 0
visto[s] = cierto
// n es el numero de vertices que tiene el Grafo
mientras (no-esten-vistos-todos) hacer
   vertice = coger-el-minimo-del-vector distancia y que no este visto;
   visto[vertice] = cierto;
   para cada w ? sucesores (G, vertice) hacer
        si distancia[w]distancia[vertice]+peso (vertice, w) entonces

                                         8
distancia[w] = distancia[vertice]+peso (vertice, w)
       fsi
   fpara
fmientras
finfuncion

    Al nal tenemos en el vector distancia en cada posición la distancia mínima
del vértice salida a otro vértice cualquiera.



1.2.2.     Algoritmo de Kruskal

    El algoritmo de Kruskal es un algoritmo de la teoría de grafos para encontrar
un a¯bol recubridor mínimo en un grafo conexo y ponderado. Es decir, busca
un subconjunto de aristas que, formando un a¯bol, incluyen todos los vértices
y donde el valor total de todas las aristas del a¯bol es el mínimo. Si el grafo no
es conexo, entonces busca un bosque expandido mínimo (un a¯bol expandido
mínimo para cada componente conexa).

    1. Se marca la arista con menor valor. Si hay más de una, se elige cualquiera
      de ellas.

    2. De las aristas restantes, se marca la que tenga menor valor, si hay más de
      una, se elige cualquiera de ellas.

    3. Repetir el paso 2 siempre que la arista elegida no forme un ciclo con las
      ya marcadas.

    4. El proceso termina cuando tenemos todos los nodos del grafo en alguna
      de las aristas marcadas, es decir, cuando tenemos marcados     n−1    arcos,
      siendo   n   el número de nodos del grafo.


Pseudocódigo
  Entrada: Un grafo ponderado conexo con todos sus pesos diferentes.
  Salida: Las aristas de un a¯bol generador minimal.
i   = 1;
N   = tamagno del grafo de Entrada en numero de vertices;
 mientras (i  N) hacer
escoger la arista de peso minimo A de entre todas las que no han sido                 escogidas;
si A no forma ciclo con las que ya forman parte de la Salida entonces
agnadir A a la Salida;
i = i + 1;
fsi
fmientras
    Por lo tanto, como podemos ver, el algoritmo de Kruskal va generando difer-
entes bosques con las aristas que va seleccionando y posteriormente se van unien-
do hasta formar el a¯bol de expansin mínimo. Complejidad del algoritmo       m   el



                                           9
número de aristas del grafo y  n el número de vértices, el algoritmo de Kruskal
muestra una complejidad     O(mlogm) o, equivalentemente, O(mlogn), cuando se
ejecuta sobre estructuras de datos simples. Los tiempos de ejecución son equiv-
alentes porque:   ”m   es a lo sumo      n2   y   logn2 = 2logn   es   O(logn).   ïgnorando los
vértices aislados, los cuales forman su propia componente del a¯bol de expansin
mínimo,   n?2m,   as que log   n   es   O(logm).
   Se puede conseguir esta complejidad de la siguiente manera: primero se or-
denan las aristas por su peso usando una ordenacin por comparación con una
complejidad del orden de  O(mlogm); esto permite que el paso .eliminar una
arista de peso mínimo de C se ejecute en tiempo constante. Lo siguiente es us-
ar una estructura de datos sobre conjuntos disjuntos para controlar qu vértices
están en que componentes. Es necesario hacer orden de             O(m) operaciones ya que
por cada arista hay dos operaciones de búsqueda y posiblemente una unión de
conjuntos. Incluso una estructura de datos sobre conjuntos disjuntos simple con
uniones por rangos puede ejecutar las operaciones mencionadas en         O(mlogn).
Por tanto, la complejidad total es del orden de            O(mlogm) = O(mlogn). Con
la condición de que las aristas están ordenadas o puedan ser ordenadas en un
tiempo lineal (por ejemplo, mediante el ordenamiento por cuentas o con el or-
denamiento Radix), el algoritmo puede usar estructuras de datos de conjuntos
disjuntos más complejas para ejecutarse en tiempos del orden de       O(m?(n)),
donde   ? es la inversa (tiene un crecimiento extremadamente lento) de la función
de Ackermann.



1.2.3.     Algoritmo de Prim

   El algoritmo de Prim permite hallar el a¯bol minimal de cualquier grafo
ponderado. Hay que seguir los siguientes pasos:


  1. Se marca un nodo cualquiera, ser el nodo de partida.


  2. Seleccionamos la arista de menor valor incidente en el nodo marcado an-
     teriormente, y marcamos el otro nodo en el que incide.


  3. Repetir el paso 2 siempre que la arista elegida enlace un nodo marcado y
     otro que no lo es.


  4. El proceso termina cuando tenemos todos los nodos del grafo marcados.


Pseudocódigo
  Entrada: Un grafo ponderado conexo con todos sus pesos diferentes.
  Salida: Las aristas de un a¯bol generador minimal.
i = 1;
N = tamagno del grafo de Entrada en numero de vertices;
mientras (i  N) hacer
escoger la arista de peso mínimo A de entre todas las que aún no han sido escogidas y son in
si la Salida aún esta vacía, es decir, que estamos en la primera iteracion entonces

                                                  10
escoge la arista A de menor peso;
fsi
si A no forma ciclo con las que ya forman parte de la Salida entonces
agnadir A a la Salida;
i := i + 1;
fsi
fmientras
   En este caso podemos observar que el algoritmo de Prim a cada iteración
va formando un a¯bol que va creciendo hasta completar el a¯bol de expansin
mínimo del grafo de entrada.



1.3.     Algoritmos

1.3.1.    Dijkstra: Camino mas corto

   Este algoritmo resuelve el problema de encontrar la ruta mas corta entre un
nodo origen y un nodo destino en un grafo        G = (V, E), siendo   E el conjunto de
aristas con peso no negativo, asumimos que        w(u, v) ≥ 0

Algorithm 1 Dijkstra(G,w,s)
Require: n ≥ 0 ∨ x = 0
Ensure: y = xn
  INITIALIZE-SINGLE-SOURCE(G,s)
  n←φ
  Q ← V [G]
  while N = 0 do
    u ← EXT RACT − M IN {Q}
    S ← S(U )
    for all each vertex v Adj[u] do
       RELAX(u, v, w)
    end for
  end while


1.3.2.    Floyd-Warshall: Todos los caminos mínimos

   El algoritmo de Floyd-Warshall calcula los caminos mínimos que existan
entre todos los pares de nodos de un Grafo dirigido       G = (V, E).   Donde   V   es el
conjunto de VAlgortices y      E   son el conjunto de Aristas. La complejidad de este
algoritmo es   Θ(V 3 )   y se asume que no existen ciclos de costo negativo.

   Asumiendo que los vértices de        G son V = {1, 2, 3, ..., n} consideremos un
subconjunto   {1, 2, 3, ...k} de vértices para algún k . Para cualquier par de vér-
tices u, v ∈ V , consideremos todos los caminos desde i hacia j cuyos vértices
intermedios son sacados de {1, 2, 3, ...k}, y sea p el camino de costo mínimo




                                            11
de todos ellos (p es un camino simple). El algoritmo Floyd-Warshall explota la
relación de   p   y el camino mínimo entre   i y j con todos los vértices intermedios
en el conjunto   {1, 2, 3, ...k−1}. Ésta relación depende en que k sea o no el vértice
intermedio    del camino p de la siguiente manera:


                  (k)     wij                               if k = 0
                  dij =        (k−1) (k−1)    (k−1)
                          min(dij   , dik  + dkj )          if k   ≥   1



   El seudo-código para el algoritmo de Warshall es el siguiente:


Algorithm 2 FLOYD-WARSHALL(w)
  n ← f ilas(w)
  D(0) ← W
  for k ← 1 to n do
    for i ← 1 to n do
       for j ← 1 to n do
         d(k)ij ← min(d(k−1)ij , d(k−1)ik + d(k−1)kj )
      end for
    end for
  end for
  return D(n)




                                          12
1.3.3.   Desempeño de los algoritmos de busqueda




                            13
1.4.     Editor de Grafo

1.4.1.    Introducción

   Este editor esta basado en el api de google Maps la cual nos permite hacer
una interfaz de usuario para poder desplazarnos por mapas del mundo, hacer
edición sobre los mismos, asimismo como manipular información relativa a los
mapas de google Maps, también se ha hecho uso de YUI Yahoo User Interface
un framework de programación en javascript que nos permite interacción Ajax
entre nuestra interfaz y el servidor remoto mediante el cual se procesa solicitudes
de información de tipo variado como puede ser paginas Web, imágenes, y todo
tipo de información que nos sea útil.




Editor Grafo




                                        14
Google Maps




              15
1.4.2.     Características del editor

   El editor del grafo nos permite hacer la edición de nodos de modo sencillo,
sus principales características son:


      Creación de Nodos del grafo mediante la interfaz


      Almacenamiento de información del nodo del grafo.


      Modicación del nodo mediante la interfaz.


      Almacenamiento de cambios de la información del nodo del grafo.


      Eliminación de nodo de grafo.


      Creación de aristas del grafo mediante la interfaz.


      Almacenamiento de información del arista del grafo.


      Almacenamiento de cambios de la información del nodo del grafo.


      Navegación en el mapa por medio de el mouse.


      Agrandar o disminuir la proporción del mapa.


      Desplazamiento en el mapa por medio del localizador.


      Ver los tipos de mapas como son satelital , en relieve y mixto.


      Nos muestra información del punto central del mapa para ubicar coorde-
      nadas del mismo.


      Se puede hacer la carga de información mediante una archivo especico
      para la carga de información en el mapa.



1.4.3.     Funcionalidad del editor

   El modo de funcionamiento es sencillo y de facil interacción con el usuario:


Edición de nodos:
   En la edición de los nodos podemos crear un nodo al hacer clic sobre el
mapa, inmediatamente se cargara la información en el archivo saved.txt y en el
archivo nodes.txt, además de generar grácamente el nodo correspondiente en
el mapa.




                                       16
Borrado de un nodo, esta tarea se logra haciendo doble clic encima de un nodo
en particular, en ese momento se sucede el cambio en la información registrada
en los archivos de nodos y aristas tanto como en el archivo de información global
del grafo saved.txt.
   Modicación del nodo, al arrastrar el nodo con el mouse la interfaz hará
el desplazamiento del nodo en la interfaz asimismo como la modicación de
la información relacionada con el nodo en particular, tomando en cuenta el
desplazamiento de las aristas asimismo como el nodo.




                                       17
Edición de Aristas:
   Creación de aristas, para poder crear una arista la condición minima de
creación de aristas es que por lo menos haya una arista creada, sin la misma la
consecución de la creación de la misma no sera posible, por tanto para crear una
arista hacemos clic en un nodo y luego procedemos a hacer clic sobre otro nodo
para poder generar gracamente nuestra arista, luego la información relativa a
la arista generada será almacenada.




El borrado de una arista es consecuencia del borrado de un nodo ante el bor-
rado de un nodo se borraran las aristas correspondientes al mismo así como la
información relacionada a la arista.
   La modicación de una arista es dada según la modicación que se de en un
nodo en particular puesto que la arista es dependiente de un nodo en especi-
co, por tanto al ser modicado su localización del nodo será posteriormente
modicada la arista.


Desplazamiento en el mapa:
   El desplazamiento en el mapa puede ser hecho en función del solo uso del
mouse o del uso del mouse mas el desplazador del mapa conjuntamente con la
acción del mouse, para poder desplazarse en el mapa debemos arrastrar con el
mouse el mapa hacia la locación que deseamos ver o haciendo uso del desplazador
podemos hacer clic encima de los indicadores de dirección y desplazarnos hacia
una locación que deseemos ver.




                                       18
Vistas de los mapas:
   En el mapa tenemos distintos tipos de vista, para poder hacer uso de las
mismas solo debemos hacer clic en los botones de la izquierda superior derecha
y esperar la carga de la respectiva vista.


Carga de información en el mapa:
   Para hacer la carga de información del mapa, tenemos que hacer click en
el boton LoadFile mediante el cual cargara un dialogo en el cual accedemos




                                       19
al cuadro de dialogo abrir y seleccionamos un archivo que tenga un formato
adecuado para hacer la carga de información y procedemos a hacer click en el
boton cargar. Dependiendo de la velocidad de conexión se dara a continuación
la carga de información del grafo en el mapa.




                                      20
21
1.4.4.        Formato de archivo de Editor Grafo

   Para poder hacer uso correcto de las características de nuestro editor de
grafo tenemos que tener un formato adecuado el cual es el que a continuación
se detalla:
   En la parte inicial colocamos toda la información de los nodos siguiendo
la norma básica de tener un identicador por Ej.: id1 luego la latitud y a
continuación la longitud.
   Seguidamente se coloca  para hacer la diferencia de la información que
viene a continuación:
   Se coloca información de los edges un identicador de edge por Ej. edge1
luego ideticador de nodo inicial posterior a este un identicador de nodo nal.




                                      22
Ejemplo:

10
-16.398921914003473 -71.53517961502075
-16.397862825349694 -71.53472900390625
-16.396792409131297 -71.53427839279175
-16.397219547077878 -71.53320550918579
-16.398212767836995 -71.5336561203003
-16.399262591524984 -71.53406381607056
-16.40031240955188 -71.53447151184082
-16.40072410135037 -71.53337717056274
-16.39966913937374 -71.53301239013672
-16.398639902667625 -71.53258323669434
4
0 12
0 8
7 6
6 11




                               23

Weitere ähnliche Inhalte

Was ist angesagt?

Was ist angesagt? (19)

Apunte 2. coordenadas_polares
Apunte 2. coordenadas_polaresApunte 2. coordenadas_polares
Apunte 2. coordenadas_polares
 
S04 s2 ejercicios_movimiento_circunferencial (1)
S04 s2 ejercicios_movimiento_circunferencial (1)S04 s2 ejercicios_movimiento_circunferencial (1)
S04 s2 ejercicios_movimiento_circunferencial (1)
 
Aceleración de coriolis
Aceleración de coriolisAceleración de coriolis
Aceleración de coriolis
 
Teoría Básica
Teoría Básica Teoría Básica
Teoría Básica
 
Floyd Prim y Kruscal
Floyd Prim y KruscalFloyd Prim y Kruscal
Floyd Prim y Kruscal
 
Nociones fundamentales
Nociones fundamentalesNociones fundamentales
Nociones fundamentales
 
Aceleracion de mecanismo
Aceleracion de mecanismoAceleracion de mecanismo
Aceleracion de mecanismo
 
velocidad y aplicacion de fuerzas en mecanismos
velocidad y aplicacion de fuerzas en mecanismosvelocidad y aplicacion de fuerzas en mecanismos
velocidad y aplicacion de fuerzas en mecanismos
 
Metodo del poligono
Metodo del poligonoMetodo del poligono
Metodo del poligono
 
Problemas los movimientos acelerados
Problemas los movimientos aceleradosProblemas los movimientos acelerados
Problemas los movimientos acelerados
 
Clase 1 de física 1
Clase 1 de física 1Clase 1 de física 1
Clase 1 de física 1
 
Velocidad en los mecanismos
Velocidad en los mecanismosVelocidad en los mecanismos
Velocidad en los mecanismos
 
Cinema
CinemaCinema
Cinema
 
Metodo de cross
Metodo de crossMetodo de cross
Metodo de cross
 
Dinámica
DinámicaDinámica
Dinámica
 
08 movimiento-rectilc3adneo-uniformemente-variado
08 movimiento-rectilc3adneo-uniformemente-variado08 movimiento-rectilc3adneo-uniformemente-variado
08 movimiento-rectilc3adneo-uniformemente-variado
 
Material de apoyo fisica basica
Material de apoyo fisica basicaMaterial de apoyo fisica basica
Material de apoyo fisica basica
 
CURSO DINAMICA ING. CIVIL CINEMÁTICA DEL MOVIMIENTO RECTILÍNEO
CURSO DINAMICA ING. CIVIL CINEMÁTICA DEL MOVIMIENTO RECTILÍNEOCURSO DINAMICA ING. CIVIL CINEMÁTICA DEL MOVIMIENTO RECTILÍNEO
CURSO DINAMICA ING. CIVIL CINEMÁTICA DEL MOVIMIENTO RECTILÍNEO
 
Cinematicadelaparticula
CinematicadelaparticulaCinematicadelaparticula
Cinematicadelaparticula
 

Andere mochten auch

Innovacion google
Innovacion googleInnovacion google
Innovacion googleJose Benja
 
UCSP Marketing Digital
UCSP Marketing DigitalUCSP Marketing Digital
UCSP Marketing DigitalFuturo Labs
 
Tablas Hash Fash Vmaa
Tablas Hash Fash VmaaTablas Hash Fash Vmaa
Tablas Hash Fash Vmaavicomanuel
 
Crítica de la información. Scott Lash. Notas
Crítica de la información. Scott Lash. NotasCrítica de la información. Scott Lash. Notas
Crítica de la información. Scott Lash. NotasJorge Yunes
 
Arequipa valley - Arequipa esta de moda
Arequipa valley - Arequipa esta de modaArequipa valley - Arequipa esta de moda
Arequipa valley - Arequipa esta de modaAlfredo Gama
 
Generación de números primos fuertes para criptografía
Generación de números primos fuertes para criptografíaGeneración de números primos fuertes para criptografía
Generación de números primos fuertes para criptografíaJuan Salas Santillana
 
20150527_El Modelo de Innovación de Google
20150527_El Modelo de Innovación de Google20150527_El Modelo de Innovación de Google
20150527_El Modelo de Innovación de GoogleSantiago Sanz
 

Andere mochten auch (11)

Innovacion google
Innovacion googleInnovacion google
Innovacion google
 
Leccion02 rsa v3 crypt4you
Leccion02 rsa v3 crypt4youLeccion02 rsa v3 crypt4you
Leccion02 rsa v3 crypt4you
 
Plan Curricular 2006 De Ingenieria Informatica
Plan Curricular 2006 De Ingenieria InformaticaPlan Curricular 2006 De Ingenieria Informatica
Plan Curricular 2006 De Ingenieria Informatica
 
UCSP Marketing Digital
UCSP Marketing DigitalUCSP Marketing Digital
UCSP Marketing Digital
 
Tablas Hash Fash Vmaa
Tablas Hash Fash VmaaTablas Hash Fash Vmaa
Tablas Hash Fash Vmaa
 
Crítica de la información. Scott Lash. Notas
Crítica de la información. Scott Lash. NotasCrítica de la información. Scott Lash. Notas
Crítica de la información. Scott Lash. Notas
 
Generating random primes
Generating random primesGenerating random primes
Generating random primes
 
Arequipa valley - Arequipa esta de moda
Arequipa valley - Arequipa esta de modaArequipa valley - Arequipa esta de moda
Arequipa valley - Arequipa esta de moda
 
Generación de números primos fuertes para criptografía
Generación de números primos fuertes para criptografíaGeneración de números primos fuertes para criptografía
Generación de números primos fuertes para criptografía
 
20150527_El Modelo de Innovación de Google
20150527_El Modelo de Innovación de Google20150527_El Modelo de Innovación de Google
20150527_El Modelo de Innovación de Google
 
Fermentación
FermentaciónFermentación
Fermentación
 

Ähnlich wie Proyecto pibap

Ähnlich wie Proyecto pibap (20)

Algoritmos de Johnson en Python
Algoritmos de Johnson en PythonAlgoritmos de Johnson en Python
Algoritmos de Johnson en Python
 
Generación
GeneraciónGeneración
Generación
 
Titulo informe de estadisticasan etes de ordenads
Titulo informe de estadisticasan etes de ordenadsTitulo informe de estadisticasan etes de ordenads
Titulo informe de estadisticasan etes de ordenads
 
Presentación_T3_JoséJaén (1).pptx
Presentación_T3_JoséJaén  (1).pptxPresentación_T3_JoséJaén  (1).pptx
Presentación_T3_JoséJaén (1).pptx
 
Algoritmo de dijkstra tutorial interactivo
Algoritmo de dijkstra tutorial interactivoAlgoritmo de dijkstra tutorial interactivo
Algoritmo de dijkstra tutorial interactivo
 
Problema del agente viajero monografia
Problema del agente viajero monografiaProblema del agente viajero monografia
Problema del agente viajero monografia
 
Grafos 8.6.1
Grafos 8.6.1Grafos 8.6.1
Grafos 8.6.1
 
Redes.pptx
Redes.pptxRedes.pptx
Redes.pptx
 
Redes.pptx
Redes.pptxRedes.pptx
Redes.pptx
 
Unidad 3 funciones vectoriales de una variable real
Unidad 3 funciones vectoriales de una variable realUnidad 3 funciones vectoriales de una variable real
Unidad 3 funciones vectoriales de una variable real
 
Manual transcad
Manual transcadManual transcad
Manual transcad
 
Suspensión autobus
Suspensión autobusSuspensión autobus
Suspensión autobus
 
Grafos 8.6 2016
Grafos 8.6 2016Grafos 8.6 2016
Grafos 8.6 2016
 
Calculo integro-diferencial-y-aplicaciones.
Calculo integro-diferencial-y-aplicaciones.Calculo integro-diferencial-y-aplicaciones.
Calculo integro-diferencial-y-aplicaciones.
 
LopezGarcia_NestorGerardo__M19S1AI2.docx
LopezGarcia_NestorGerardo__M19S1AI2.docxLopezGarcia_NestorGerardo__M19S1AI2.docx
LopezGarcia_NestorGerardo__M19S1AI2.docx
 
Exposicion de Matematica determinantes 1.pptx
Exposicion de Matematica determinantes 1.pptxExposicion de Matematica determinantes 1.pptx
Exposicion de Matematica determinantes 1.pptx
 
PPObl2-2012
PPObl2-2012PPObl2-2012
PPObl2-2012
 
S4-SCBC.pptx
S4-SCBC.pptxS4-SCBC.pptx
S4-SCBC.pptx
 
S4-SCBC.pptx
S4-SCBC.pptxS4-SCBC.pptx
S4-SCBC.pptx
 
Redes y demanda de transporte
Redes y demanda de transporteRedes y demanda de transporte
Redes y demanda de transporte
 

Mehr von Universidad Católica San Pablo

Ice Slurry Generation Based on Sugar-Ethanol Aqueous Solution
Ice Slurry Generation Based on Sugar-Ethanol Aqueous SolutionIce Slurry Generation Based on Sugar-Ethanol Aqueous Solution
Ice Slurry Generation Based on Sugar-Ethanol Aqueous SolutionUniversidad Católica San Pablo
 
EXPERIMENTAL STUDY OF THE EFFECTS OF LPG ON SPARK IGNITION ENGINE PERFORMANCE
EXPERIMENTAL STUDY OF THE EFFECTS OF LPG ON SPARK IGNITION ENGINE PERFORMANCEEXPERIMENTAL STUDY OF THE EFFECTS OF LPG ON SPARK IGNITION ENGINE PERFORMANCE
EXPERIMENTAL STUDY OF THE EFFECTS OF LPG ON SPARK IGNITION ENGINE PERFORMANCEUniversidad Católica San Pablo
 
EVALUACIÓN DEL ESTADO DE MOTORES DE VEHÍCULOS A GASOLINA MODIFICADOS PARA F...
EVALUACIÓN DEL ESTADO DE MOTORES DE VEHÍCULOS A GASOLINA MODIFICADOS PARA F...EVALUACIÓN DEL ESTADO DE MOTORES DE VEHÍCULOS A GASOLINA MODIFICADOS PARA F...
EVALUACIÓN DEL ESTADO DE MOTORES DE VEHÍCULOS A GASOLINA MODIFICADOS PARA F...Universidad Católica San Pablo
 
ENFRIAMIENTO Y CONSERVACIÓN DE CARACOLES UTILIZANDO PASTA DE HIELO
ENFRIAMIENTO Y CONSERVACIÓN DE CARACOLES UTILIZANDO PASTA DE HIELOENFRIAMIENTO Y CONSERVACIÓN DE CARACOLES UTILIZANDO PASTA DE HIELO
ENFRIAMIENTO Y CONSERVACIÓN DE CARACOLES UTILIZANDO PASTA DE HIELOUniversidad Católica San Pablo
 
AN EXPERIMENTAL CLASSIFICATION OF THE ENCAPSULATED WATER SUPERCOOLING
AN EXPERIMENTAL CLASSIFICATION OF THE ENCAPSULATED WATER SUPERCOOLINGAN EXPERIMENTAL CLASSIFICATION OF THE ENCAPSULATED WATER SUPERCOOLING
AN EXPERIMENTAL CLASSIFICATION OF THE ENCAPSULATED WATER SUPERCOOLINGUniversidad Católica San Pablo
 
Blockage by Dendritic Ice in Supercooled Encapsulated Water
Blockage by Dendritic Ice in Supercooled Encapsulated WaterBlockage by Dendritic Ice in Supercooled Encapsulated Water
Blockage by Dendritic Ice in Supercooled Encapsulated WaterUniversidad Católica San Pablo
 
Diseño de una plataforma para monitorear y controlar el tráfico vehicular u...
Diseño de una plataforma para monitorear y controlar el tráfico vehicular u...Diseño de una plataforma para monitorear y controlar el tráfico vehicular u...
Diseño de una plataforma para monitorear y controlar el tráfico vehicular u...Universidad Católica San Pablo
 
PROYECTO DE INVESTIGACIÓN GESTION DE REDES – AUTODEMA
PROYECTO DE INVESTIGACIÓN GESTION DE REDES – AUTODEMAPROYECTO DE INVESTIGACIÓN GESTION DE REDES – AUTODEMA
PROYECTO DE INVESTIGACIÓN GESTION DE REDES – AUTODEMAUniversidad Católica San Pablo
 
ESPECIFICACIONES DEL THROUGPUT DE LOS ENLACES Y CÁLCULOS MATEMATICOS
ESPECIFICACIONES DEL THROUGPUT DE LOS ENLACES Y CÁLCULOS MATEMATICOSESPECIFICACIONES DEL THROUGPUT DE LOS ENLACES Y CÁLCULOS MATEMATICOS
ESPECIFICACIONES DEL THROUGPUT DE LOS ENLACES Y CÁLCULOS MATEMATICOSUniversidad Católica San Pablo
 
Proyecto de creación del Programa Profesional de Sistemas de Información
Proyecto de creación del Programa Profesional de Sistemas de InformaciónProyecto de creación del Programa Profesional de Sistemas de Información
Proyecto de creación del Programa Profesional de Sistemas de InformaciónUniversidad Católica San Pablo
 
Proyecto PIBAP 03-295 Contrato #040 Informe Componente 1
Proyecto PIBAP 03-295 Contrato #040 Informe Componente 1Proyecto PIBAP 03-295 Contrato #040 Informe Componente 1
Proyecto PIBAP 03-295 Contrato #040 Informe Componente 1Universidad Católica San Pablo
 
“Violencia Familiar: El Mudo Sufrimiento de los Niños y Niñas de Escasos Re...
“Violencia Familiar: El Mudo Sufrimiento de los Niños y Niñas de Escasos Re...“Violencia Familiar: El Mudo Sufrimiento de los Niños y Niñas de Escasos Re...
“Violencia Familiar: El Mudo Sufrimiento de los Niños y Niñas de Escasos Re...Universidad Católica San Pablo
 
Mercado de trabajo y pobreza: un análisis para el sector urbano del departam...
Mercado de trabajo y pobreza: un análisis para el sector urbano del departam...Mercado de trabajo y pobreza: un análisis para el sector urbano del departam...
Mercado de trabajo y pobreza: un análisis para el sector urbano del departam...Universidad Católica San Pablo
 
CRECIMIENTO ECONÓMICO, EMPLEO Y POBREZA: UN ANÁLISIS PARA EL CASO PERUANO
CRECIMIENTO ECONÓMICO, EMPLEO Y POBREZA: UN ANÁLISIS PARA EL CASO PERUANOCRECIMIENTO ECONÓMICO, EMPLEO Y POBREZA: UN ANÁLISIS PARA EL CASO PERUANO
CRECIMIENTO ECONÓMICO, EMPLEO Y POBREZA: UN ANÁLISIS PARA EL CASO PERUANOUniversidad Católica San Pablo
 

Mehr von Universidad Católica San Pablo (20)

Entendiendo La Crisis Financiera
Entendiendo La Crisis FinancieraEntendiendo La Crisis Financiera
Entendiendo La Crisis Financiera
 
SUPERCOOLING WATER IN CYLINDRICAL CAPSULES
SUPERCOOLING WATER IN CYLINDRICAL CAPSULESSUPERCOOLING WATER IN CYLINDRICAL CAPSULES
SUPERCOOLING WATER IN CYLINDRICAL CAPSULES
 
Ice Slurry Generation Based on Sugar-Ethanol Aqueous Solution
Ice Slurry Generation Based on Sugar-Ethanol Aqueous SolutionIce Slurry Generation Based on Sugar-Ethanol Aqueous Solution
Ice Slurry Generation Based on Sugar-Ethanol Aqueous Solution
 
EXPERIMENTAL STUDY OF THE EFFECTS OF LPG ON SPARK IGNITION ENGINE PERFORMANCE
EXPERIMENTAL STUDY OF THE EFFECTS OF LPG ON SPARK IGNITION ENGINE PERFORMANCEEXPERIMENTAL STUDY OF THE EFFECTS OF LPG ON SPARK IGNITION ENGINE PERFORMANCE
EXPERIMENTAL STUDY OF THE EFFECTS OF LPG ON SPARK IGNITION ENGINE PERFORMANCE
 
EVALUACIÓN DEL ESTADO DE MOTORES DE VEHÍCULOS A GASOLINA MODIFICADOS PARA F...
EVALUACIÓN DEL ESTADO DE MOTORES DE VEHÍCULOS A GASOLINA MODIFICADOS PARA F...EVALUACIÓN DEL ESTADO DE MOTORES DE VEHÍCULOS A GASOLINA MODIFICADOS PARA F...
EVALUACIÓN DEL ESTADO DE MOTORES DE VEHÍCULOS A GASOLINA MODIFICADOS PARA F...
 
ENFRIAMIENTO Y CONSERVACIÓN DE CARACOLES UTILIZANDO PASTA DE HIELO
ENFRIAMIENTO Y CONSERVACIÓN DE CARACOLES UTILIZANDO PASTA DE HIELOENFRIAMIENTO Y CONSERVACIÓN DE CARACOLES UTILIZANDO PASTA DE HIELO
ENFRIAMIENTO Y CONSERVACIÓN DE CARACOLES UTILIZANDO PASTA DE HIELO
 
AN EXPERIMENTAL CLASSIFICATION OF THE ENCAPSULATED WATER SUPERCOOLING
AN EXPERIMENTAL CLASSIFICATION OF THE ENCAPSULATED WATER SUPERCOOLINGAN EXPERIMENTAL CLASSIFICATION OF THE ENCAPSULATED WATER SUPERCOOLING
AN EXPERIMENTAL CLASSIFICATION OF THE ENCAPSULATED WATER SUPERCOOLING
 
Blockage by Dendritic Ice in Supercooled Encapsulated Water
Blockage by Dendritic Ice in Supercooled Encapsulated WaterBlockage by Dendritic Ice in Supercooled Encapsulated Water
Blockage by Dendritic Ice in Supercooled Encapsulated Water
 
La lógica del Estado y la lógica de la Iglesia
La lógica del Estado y la lógica de la IglesiaLa lógica del Estado y la lógica de la Iglesia
La lógica del Estado y la lógica de la Iglesia
 
Diseño de una plataforma para monitorear y controlar el tráfico vehicular u...
Diseño de una plataforma para monitorear y controlar el tráfico vehicular u...Diseño de una plataforma para monitorear y controlar el tráfico vehicular u...
Diseño de una plataforma para monitorear y controlar el tráfico vehicular u...
 
PROYECTO DE INVESTIGACIÓN GESTION DE REDES – AUTODEMA
PROYECTO DE INVESTIGACIÓN GESTION DE REDES – AUTODEMAPROYECTO DE INVESTIGACIÓN GESTION DE REDES – AUTODEMA
PROYECTO DE INVESTIGACIÓN GESTION DE REDES – AUTODEMA
 
ESPECIFICACIONES DEL THROUGPUT DE LOS ENLACES Y CÁLCULOS MATEMATICOS
ESPECIFICACIONES DEL THROUGPUT DE LOS ENLACES Y CÁLCULOS MATEMATICOSESPECIFICACIONES DEL THROUGPUT DE LOS ENLACES Y CÁLCULOS MATEMATICOS
ESPECIFICACIONES DEL THROUGPUT DE LOS ENLACES Y CÁLCULOS MATEMATICOS
 
Proyecto de creación del Programa Profesional de Sistemas de Información
Proyecto de creación del Programa Profesional de Sistemas de InformaciónProyecto de creación del Programa Profesional de Sistemas de Información
Proyecto de creación del Programa Profesional de Sistemas de Información
 
Proyecto PIBAP 03-295 Contrato #040 Informe Componente 1
Proyecto PIBAP 03-295 Contrato #040 Informe Componente 1Proyecto PIBAP 03-295 Contrato #040 Informe Componente 1
Proyecto PIBAP 03-295 Contrato #040 Informe Componente 1
 
Plan curricular 2006 de ingenieria informatica
Plan curricular 2006 de ingenieria informaticaPlan curricular 2006 de ingenieria informatica
Plan curricular 2006 de ingenieria informatica
 
Creación de programa sistemas de informacion
Creación de programa sistemas de informacionCreación de programa sistemas de informacion
Creación de programa sistemas de informacion
 
“Violencia Familiar: El Mudo Sufrimiento de los Niños y Niñas de Escasos Re...
“Violencia Familiar: El Mudo Sufrimiento de los Niños y Niñas de Escasos Re...“Violencia Familiar: El Mudo Sufrimiento de los Niños y Niñas de Escasos Re...
“Violencia Familiar: El Mudo Sufrimiento de los Niños y Niñas de Escasos Re...
 
DISCRIMINACIÓN LABORAL POR EDAD
DISCRIMINACIÓN LABORAL POR EDADDISCRIMINACIÓN LABORAL POR EDAD
DISCRIMINACIÓN LABORAL POR EDAD
 
Mercado de trabajo y pobreza: un análisis para el sector urbano del departam...
Mercado de trabajo y pobreza: un análisis para el sector urbano del departam...Mercado de trabajo y pobreza: un análisis para el sector urbano del departam...
Mercado de trabajo y pobreza: un análisis para el sector urbano del departam...
 
CRECIMIENTO ECONÓMICO, EMPLEO Y POBREZA: UN ANÁLISIS PARA EL CASO PERUANO
CRECIMIENTO ECONÓMICO, EMPLEO Y POBREZA: UN ANÁLISIS PARA EL CASO PERUANOCRECIMIENTO ECONÓMICO, EMPLEO Y POBREZA: UN ANÁLISIS PARA EL CASO PERUANO
CRECIMIENTO ECONÓMICO, EMPLEO Y POBREZA: UN ANÁLISIS PARA EL CASO PERUANO
 

Proyecto pibap

  • 1. Universidad Católica San Pablo Proyecto PIBAP 03-295 Contrato #040 Informe Componente 1 Periodo 1 de Marzo- 30 de Junio 2009 Ernesto Cuadros Vargas (E2) {ecuadros@gmail.com} Alex Cuadros Vargas (E2) {alex.jcv@gmail.com} Luis Diaz Basurco (E4) {l.diaz@gmail.com} Christian López del Alámo (E4) {criloal23@gmail.com} Christian Portilla Pauca (E4) {xhrist@xhrist.co.cc} Edwin Huarhua Chambi (E4) {ehuarhua@gmail.com} Manuel Bellido Oviedo (E4) {manubellido@gmail.com} 18 de junio de 2009
  • 2. Índice general 1. Preliminares 4 1.1. Teoría básica de grafos . . . . . . . . . . . . . . . . . . . . . . . . 4 1.2. Algoritmos sobre grafos . . . . . . . . . . . . . . . . . . . . . . . 6 1.2.1. Algoritmo de Dijkstra del camino mínimo . . . . . . . . . 6 1.2.2. Algoritmo de Kruskal . . . . . . . . . . . . . . . . . . . . 9 1.2.3. Algoritmo de Prim . . . . . . . . . . . . . . . . . . . . . . 10 1.3. Algoritmos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 1.3.1. Dijkstra: Camino mas corto . . . . . . . . . . . . . . . . . 11 1.3.2. Floyd-Warshall: Todos los caminos mínimos . . . . . . . . 11 1.3.3. Desempeño de los algoritmos de busqueda . . . . . . . . . 13 1.4. Editor de Grafo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 1.4.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . 14 1.4.2. Características del editor . . . . . . . . . . . . . . . . . . 16 1.4.3. Funcionalidad del editor . . . . . . . . . . . . . . . . . . . 16 1.4.4. Formato de archivo de Editor Grafo . . . . . . . . . . . . 22 1
  • 3. Introducción En el desarrollo de la plataforma de software que brindará información de rutas que conecten dos puntos dados de una ciudad se considerará que las posi- bles rutas de conexión conforman un grafo donde las aristas son las calles y los nodos las esquinas incluyendo también como nodos importantes los puntos de origen y destino. La ruta incluirá tanto desplazamientos a pié como con ve- hículos motorizados de transporte público y privado respetando criterios especícos. Esto obliga a considerar diferentes tipos de grafos como: grafos no dirigidos en el caso que el desplazamiento sea realizado a pie, y dirigidos en el caso que se use un vehículo de transporte. Puesto que la elección de la ruta depende del tiempo, número de trasbordos, costo, etc se trabajar pesos que sern variables en el tiempo de acuerdo a las condiciones. En esta primera parte se trabajará bajo supuestos estables. La informacíon necesaria que incluyen el catastro de vías y de líneas de transporte público para la obtención del grafo a tratar, se suponen disponibles independiente de la ciudad en donde se quiera resolver el problema de conexión. Este trabajo incluirá la suciente exibilidad para adaptarse a cambios de condiciones y de operación que se incluirán en una segunda parte de este proyecto donde el abordaje tomará en cuenta consideraciones estocásticas que surgen en el problema real de ruta más corta. Cabe mencionar que existen diferentes sistemas que implementan variadas soluciones al problema de la ruta más corta disponibles para diferentes ciudades del mundo. Estos sistemas son generalmente disponibilizados por la empresa de transportes contratista encargada del transporte público de la ciudad. Entre es- tos sistemas, algunos de los que proveen una mayor información son los ofrecidos por Massachussets Bay Transportation Authority (http://www.mbta.com/) del estado de Massachussets en los Estados Unidos de América, Transport of Lon- don (http://www.t.gov.uk/) de la ciudad de Londres en Inglaterra y Verkehrs- und Tarifverbund Stuttgart (http://www.vvs.de/) de la ciudad de Stuttgart en Alemania. Este último en particular es capaz de calcular rutas que incluyan trayectos a pié, en taxi, y los diferentes sistemas de transporte urbano (metro, ómnibus, tranvía, etc.). Estos sistemas lidian con cronogramas de circulación jos para todas las líneas de transporte. Por esta raízón algoritmos exactos de búsqueda de rutas pueden ser aplicados [Gallo y Pallottino, 1988; Cherkassky et al. 1996]. Existen investigaciones especícas en este respecto que evalúan las diferentes técnicas 2
  • 4. de cálculo de rutas más cortas para el caso particular de redes de transporte público y privado. Las más relevantes en este contexto son las presentadas por Zhan y Noon [Zhan, 1997; Zhann y Noon 1998; Zhann y Noon 2000]. Los autores en un inicio evalúan un conjunto de tres algoritmos de cálculo de la ruta más corta [Zhan,1997], los cuáles se demostró que ofrecían los mejores resultados en redes viales reales [Cherkassky et al. 1996], especicamente 1) el algoritmo de crecimiento de grafos implementado con dos colas [Pallottino 1984], 2) el algoritmo de Dijkstra [1959] implementado con cubos (buckets) aproximados [Goldberg y Silverstein, 1995] y 3) el algoritmo de Dijkstra implementado con buckets dobles [Cherkassky et al. 1996]. En su evaluación, Zhan resume estos tres algoritmos y demuestran las estructuras de datos y procedimientos relacionados a ellos. En un segundo trabajo Zhan y Noon [1998] tratan el problema especíco de la aplicación de algoritmos de rutas más cortas en redes viales reales. Es dicho trabajo los autores prueban diferentes algoritmos en una variedad de re- des viales reales lo que conlleva a la identicación de algoritmos ideales para realizar este cálculo. Posteriormente un estudio comparativo entre algoritmos de establecimiento de etiquetas frente a algoritmos de corrección de etiquetas, en problemas de cálculo de rutas más cortas entre dos nodos de una red, fue realizado [Zhan y Noon 2000]. En este estudio también se utilizó redes viales reales y se comparó especicamente el algoritmo de Dijkstra implementado con cubos (buckets) aproximados [Goldberg y Silverstein, 1995] y el algoritmo de crecimiento de grafos implementado con dos colas [Pallottino 1984]. Trabajos centrados en el cálculo de rutas más cortas en redes viales especícos para escenarios temporales (por ej. simulación en el tiempo) también han sido desar- rollados [Kaufman y Smith, 1993; Horn, 2000; Horn, 2006]. A pesar de ser un tema bien documentado, como mencionado anteriormente, estos algoritmos exactos pueden ser aplicados en situaciones donde el cronogra- ma de circulación de las empresas de transporte público es jo. Actualmente esta no es la situación en las ciudades del país. Por lo tanto una alternativa que permita incluir la exibilidad necesaria, relajar e introducir fácilmente restric- ciones de acuerdo a los cambios estructurales del sistema de transporte (tales como la implementación de servicios de transporte público organizados). Esto se puede lograr atacando el problema como un cálculo estocástico de rutas más cortas. Nuestro propósito en el presente trabajo es desarrollar una técnica más e- ciente que las existentes en términos de exibilidad y de tiempo de procesamien- to. Así mismo, los trabajos existentes al respecto presentan resultados teóricos y no incluyen su evaluación en redes viales reales como en el caso de algoritmos exactos. Por lo tanto, pretendemos también realizar esta evaluación. 3
  • 5. Capítulo 1 Preliminares En esta primera parte introducimos los conceptos básicos necesarios para el desarrollo y entendimiento de los resultados obtenidos hasta el momento. 1.1. Teoría básica de grafos Grafos Para cualquer conjunto V, denotaremos por V (2) el conjunto de todos los pares ordenados o no ordenados de elementos de V. Un grafo es un par (V, A) en donde V es un conjunto arbitrário y A es un subconjunto de V (2) . Los elementos de V son llamados vértices o nodos y los de A son llamadas aristas. Para nes del presente estudio el conjunto V es nito. La denición de grafo implica que a toda arista e ∈ A del grafo se le puede asociar una pareja ordenada (u, v) o desordenada {u, v} de nodos u, v del grafo. Se dene el grado de entrada de v ∈ V como el número de aristas que inciden en v . De forma paralela se dene el grado de salida de v como el número de aristas que emergen de v . El grado de v es la suma de los grados de entrada y salida de v . Así el grado de un grafo es el máximo grado de sus vértices. Caminos Camino desde un vértice u∈V a un vérticev ∈ V es una sucesión {v0 ; v1 ; . . . ; vk } de vértices de G = (V ; A) tal que v0 = u; vk = v ; (vi ; vi+1 ) ∈ A, para todo i = 0..k . La longitud de un camino {v0 ; v1 ; ...; vk } es el número k de aristas que lo forman. Se denomina camino simple a un camino en el que todos sus vértices son distintos. Un ciclo es un camino simple {v0 ; v1 ; . . . ; vk } tal que v0 = vk . 4
  • 6. Grafo acclico es un grafo sin ciclos. Subgrafos Se dice que G = (V ; A ) es un subgrafo de G = (V ; A) si V ⊆ V y A ⊆ A. El subgrafo inducido por V ⊆ V es un subgrafo G = (V ; A ) tal que A = {(u; v) ∈ A : u; v ∈ V }. Conexidad Antes de denir cuando un grafo es conexo recordemos que un vértice alcan- zable desde un vértice u es cualquier vértice v para el que existe un camino de u a v. Un grafo (fuertemente) conexo es un grafo (dirigido) G = (V ; A) en el que u; v ∈ V , v es alcanzable desde u. Se denominan componentes (fuertemente) conexas de un grafo (dirigido) a las clases de equivalencia de vértices según la relación ser mutuamente alcanzable. Un grafo completo es un grafo G = (V ; A) en el que ∀u; v ∈ V ; u = v; (u; v) ∈ A Isomorsmo de grafos Dos grafos G = (V ; A); G = (V ; A ) son isomorfos si existe una biyección f :V →V tal que (u; v) ∈ A si y solo si (f (u); f (v)) ∈ A Grafos etiquetados Se denomina grafo etiquetado a un grafo G = (V ; A) acompañado de una función f : A → E, donde E es un conjunto cuyas componentes se denominan etiquetas. Grafo ponderado es un grafo etiquetado con números reales (E = R) árboles Se dene un bosque como un grafo no dirigido aciclico. Un árbol es un grafo en el que existe único nodo desde el que se puede acceder a todos los demás y cada nodo tiene único predecesor, excepto el primero, que no tiene ninguno. También podemos denir un árbol como: Un grafo conexo y sin ciclos. Un grafo sin ciclos y con n−1 aristas, siendo n el némero de vértices. Grado de un nodo en un árbol es el número de subárboles de aquel nodo. Denominamos hojas en un árbol a los nodos nales. Un árbol de máximo alcance es aquel que obtenemos en un grafo conexo y sin ciclos. Por otro lado, se denominará árbol de mínima expansión es el árbol de máximo alcance cuyo valor es mínimo, es decir, la suma de sus aristas es mínima. Dentro de los tipos de árboles a considerar en el presente trabajo se tiene: Un árbol libre que viene a ser un grafo no dirigido acíclico conexo. Un árbol de recubrimiento de un grafo no dirigido G = (V ; A) es un a¯bol libre T = (V A ) tal que V =V y A ⊆ A. 5
  • 7. Un árbol enraizado es un a¯bol libre con un vértice distinguido denominado raíz. La raíz de un árbol A se denota como raiz(A), o simplemente A si no hay confusión. Theorem 1 Si G es un grafo con M 2 vértices, entonces los siguientes proposiciones son equivalentes: 1. G es un árbol libre. 2. G es conexo y tiene M − 1 aristas. 3. Cualquier par de vértices están conectados por un único camino. 4. Si se añade una arista a G se crea un ciclo. Sea A un árbol enraizado en el vértice r y sea v un vértice de A. Sea C el único camino de r a v: 1. Se dice que un vértice u es antecesor o predecesor de v, siu est en C. En este caso también se dice que v es descendiente o sucesor u, 2. Si (u; v) es la última arista de C, se dice que u es el (único) padre de v y se denota como u = p(v). Así mismo, se dice que v es un hijo de u. El conjunto de hijos de un vértice v se denota como hijos(v). 3. Dos vértices v ,v de A son hermanos, si p(v ) = p(v). 4. Se dice que un vértice v es una hoja si hijos(v) = nodos internos son aquellos vértices que no son hojas. 5. La profundidad de v en A es la longitud del camino C desde la raíz hasta v. 6. Altura de A, h(A), es la profundidad de la hoja de mxima profundidad. 7. El grado de un vértice v se dene como la talla de hijos(v). Un a¯bol ordenado es un a¯bol enraizado en el que los hijos de cada vértice esta« ordenados. 1.2. Algoritmos sobre grafos 1.2.1. Algoritmo de Dijkstra del camino mínimo Esencialmente el algoritmo Dijkstra del camino mínimo es un algoritmo para la determinación del camino más corto dado un vértice origen al resto de vér- tices en un grafo dirigido y con pesos en cada arista. La idea subyacente en este algoritmo consiste en explorar todos los caminos más cortos que parten del vér- tice origen y que llevan a todos los demás vértices; cuando se obtiene el camino más corto desde el vértice origen, al resto de vértices que componen el grafo, el algoritmo se detiene. 6
  • 8. Algoritmo Teniendo un grafo dirigido ponderado de N nodos no aislados, sea x el nodo inicial, un vector D de tamaño N guardar al nal del algoritmo las distancias desde x al resto de los nodos. 1. Inicializar todas las distancias en D con un valor innito relativo ya que son desconocidas al principio, exceptuando la de x que se debe colocar en 0 debido a que la distancia de x a x sera 0. 2. Sea a=x (tomamos a como nodo actual). 3. Recorremos todos los nodos adyacentes de a menos los nodos marcados, llamaremos a estos vi . 4. Si la distancia desde x hasta vi guardada en D es mayor que la distancia desde x hasta a sumada a la distancia desde a hasta vi ; esta se substituye con la segunda nombrada, esto es: si (D1 Da + d(a, vi )) entonces Di = Da + d(a, vi ) 5. Marcamos como completo el nodo a. 6. Tomamos como próximo nodo actual el de menor valor en D (puede hac- erse almacenando los valores en una cola de prioridad) y volvemos al paso 3 mientras existan nodos no marcados. Una vez terminado al algoritmo, D estar completamente lleno. Complejidad Orden de complejidad del algoritmo: O(|V |2 + |E|) = O(|V |2 ) sin utilizar cola de prioridad, O((|E| + |V |)log|V |) utilizando cola de prioridad (por ejemplo un montículo). Podemos estimar la complejidad computacional del algoritmo de Dijkstra (en términos de sumas y comparaciones). El algoritmo realiza a lo más n−1 iteraciones, ya que en cada iteración se añade un vértice al conjunto distinguido. Para estimar el número total de operaciones basta estimar el número de operaciones que se llevan a cabo en cada iteración. Podemos identicar el vértice con la menor etiqueta entre los que no están en Sk realizando n−1 comparaciones o menos. Despus hacemos una suma y una comparación para actualizar la etiqueta de cada uno de los vértices que no están en Sk . Por tanto, en cada iteración se realizan a lo sumo 2(n − 1) operaciones, ya que no puede haber más de n − 1 etiquetas por actualizar en cada iteración. Como no se realizan más de n−1 iteraciones, cada una de las cuales supone a lo más 2(n−1) operaciones, llegamos al siguiente teorema. Theorem 2 El Algoritmo de Dijkstra realiza O(n2 ) operaciones (sumas y com- paraciones) para determinar la longitud del camino más corto entre dos vértices de un grafo ponderado simple, conexo y no dirigido con n vértices. 7
  • 9. Pseudocódigo Estructura de datos auxiliar: Q = Estructura de datos Cola de prioridad (se puede implementar con un montículo) DIJKSTRA (Grafo G, nodo-fuente s ) // inicializamos todos los nodos del grafo. La distancia de // cada nodo es infinita y los padres son NULL Para cada u en V[G] hacer distancia[u] = INFINITO padre[u] = NULL fpara distancia[s] = 0 // encolamos el nodo-fuente s Encolar (cola, grafo) mientras cola no es vaca hacer // OJO: Se extrae el nodo que tiene distancia mínima y se // conserva la condici'on de Cola de prioridad u = extraer-minimo(cola) para cada v en adyacencia[u] hacer si distancia[v] distancia[u] + peso (u, v) do distancia[v] = distancia[u] + peso (u, v) padre[v] = u fsi Pseudocódigo sin cola de prioridad funcion Dijkstra (Grafo G, nodo-salida s) // Usaremos un vector para guardar las distancias del nodo salida al // resto. Inicializamos el vector con distancias iniciales // boleano visto[n] // vector de boleanos para controlar los vertices // de los que ya tenemos la distancia minima para cada w en V[G] hacer Si (no existe arista entre s y w) entonces distancia[w]=Infinito // marcar la casilla con un -1 por ejemplo Sino distancia[w] = peso (s, w) fsi fpara distancia[s] = 0 visto[s] = cierto // n es el numero de vertices que tiene el Grafo mientras (no-esten-vistos-todos) hacer vertice = coger-el-minimo-del-vector distancia y que no este visto; visto[vertice] = cierto; para cada w ? sucesores (G, vertice) hacer si distancia[w]distancia[vertice]+peso (vertice, w) entonces 8
  • 10. distancia[w] = distancia[vertice]+peso (vertice, w) fsi fpara fmientras finfuncion Al nal tenemos en el vector distancia en cada posición la distancia mínima del vértice salida a otro vértice cualquiera. 1.2.2. Algoritmo de Kruskal El algoritmo de Kruskal es un algoritmo de la teoría de grafos para encontrar un a¯bol recubridor mínimo en un grafo conexo y ponderado. Es decir, busca un subconjunto de aristas que, formando un a¯bol, incluyen todos los vértices y donde el valor total de todas las aristas del a¯bol es el mínimo. Si el grafo no es conexo, entonces busca un bosque expandido mínimo (un a¯bol expandido mínimo para cada componente conexa). 1. Se marca la arista con menor valor. Si hay más de una, se elige cualquiera de ellas. 2. De las aristas restantes, se marca la que tenga menor valor, si hay más de una, se elige cualquiera de ellas. 3. Repetir el paso 2 siempre que la arista elegida no forme un ciclo con las ya marcadas. 4. El proceso termina cuando tenemos todos los nodos del grafo en alguna de las aristas marcadas, es decir, cuando tenemos marcados n−1 arcos, siendo n el número de nodos del grafo. Pseudocódigo Entrada: Un grafo ponderado conexo con todos sus pesos diferentes. Salida: Las aristas de un a¯bol generador minimal. i = 1; N = tamagno del grafo de Entrada en numero de vertices; mientras (i N) hacer escoger la arista de peso minimo A de entre todas las que no han sido escogidas; si A no forma ciclo con las que ya forman parte de la Salida entonces agnadir A a la Salida; i = i + 1; fsi fmientras Por lo tanto, como podemos ver, el algoritmo de Kruskal va generando difer- entes bosques con las aristas que va seleccionando y posteriormente se van unien- do hasta formar el a¯bol de expansin mínimo. Complejidad del algoritmo m el 9
  • 11. número de aristas del grafo y n el número de vértices, el algoritmo de Kruskal muestra una complejidad O(mlogm) o, equivalentemente, O(mlogn), cuando se ejecuta sobre estructuras de datos simples. Los tiempos de ejecución son equiv- alentes porque: ”m es a lo sumo n2 y logn2 = 2logn es O(logn). ïgnorando los vértices aislados, los cuales forman su propia componente del a¯bol de expansin mínimo, n?2m, as que log n es O(logm). Se puede conseguir esta complejidad de la siguiente manera: primero se or- denan las aristas por su peso usando una ordenacin por comparación con una complejidad del orden de O(mlogm); esto permite que el paso .eliminar una arista de peso mínimo de C se ejecute en tiempo constante. Lo siguiente es us- ar una estructura de datos sobre conjuntos disjuntos para controlar qu vértices están en que componentes. Es necesario hacer orden de O(m) operaciones ya que por cada arista hay dos operaciones de búsqueda y posiblemente una unión de conjuntos. Incluso una estructura de datos sobre conjuntos disjuntos simple con uniones por rangos puede ejecutar las operaciones mencionadas en O(mlogn). Por tanto, la complejidad total es del orden de O(mlogm) = O(mlogn). Con la condición de que las aristas están ordenadas o puedan ser ordenadas en un tiempo lineal (por ejemplo, mediante el ordenamiento por cuentas o con el or- denamiento Radix), el algoritmo puede usar estructuras de datos de conjuntos disjuntos más complejas para ejecutarse en tiempos del orden de O(m?(n)), donde ? es la inversa (tiene un crecimiento extremadamente lento) de la función de Ackermann. 1.2.3. Algoritmo de Prim El algoritmo de Prim permite hallar el a¯bol minimal de cualquier grafo ponderado. Hay que seguir los siguientes pasos: 1. Se marca un nodo cualquiera, ser el nodo de partida. 2. Seleccionamos la arista de menor valor incidente en el nodo marcado an- teriormente, y marcamos el otro nodo en el que incide. 3. Repetir el paso 2 siempre que la arista elegida enlace un nodo marcado y otro que no lo es. 4. El proceso termina cuando tenemos todos los nodos del grafo marcados. Pseudocódigo Entrada: Un grafo ponderado conexo con todos sus pesos diferentes. Salida: Las aristas de un a¯bol generador minimal. i = 1; N = tamagno del grafo de Entrada en numero de vertices; mientras (i N) hacer escoger la arista de peso mínimo A de entre todas las que aún no han sido escogidas y son in si la Salida aún esta vacía, es decir, que estamos en la primera iteracion entonces 10
  • 12. escoge la arista A de menor peso; fsi si A no forma ciclo con las que ya forman parte de la Salida entonces agnadir A a la Salida; i := i + 1; fsi fmientras En este caso podemos observar que el algoritmo de Prim a cada iteración va formando un a¯bol que va creciendo hasta completar el a¯bol de expansin mínimo del grafo de entrada. 1.3. Algoritmos 1.3.1. Dijkstra: Camino mas corto Este algoritmo resuelve el problema de encontrar la ruta mas corta entre un nodo origen y un nodo destino en un grafo G = (V, E), siendo E el conjunto de aristas con peso no negativo, asumimos que w(u, v) ≥ 0 Algorithm 1 Dijkstra(G,w,s) Require: n ≥ 0 ∨ x = 0 Ensure: y = xn INITIALIZE-SINGLE-SOURCE(G,s) n←φ Q ← V [G] while N = 0 do u ← EXT RACT − M IN {Q} S ← S(U ) for all each vertex v Adj[u] do RELAX(u, v, w) end for end while 1.3.2. Floyd-Warshall: Todos los caminos mínimos El algoritmo de Floyd-Warshall calcula los caminos mínimos que existan entre todos los pares de nodos de un Grafo dirigido G = (V, E). Donde V es el conjunto de VAlgortices y E son el conjunto de Aristas. La complejidad de este algoritmo es Θ(V 3 ) y se asume que no existen ciclos de costo negativo. Asumiendo que los vértices de G son V = {1, 2, 3, ..., n} consideremos un subconjunto {1, 2, 3, ...k} de vértices para algún k . Para cualquier par de vér- tices u, v ∈ V , consideremos todos los caminos desde i hacia j cuyos vértices intermedios son sacados de {1, 2, 3, ...k}, y sea p el camino de costo mínimo 11
  • 13. de todos ellos (p es un camino simple). El algoritmo Floyd-Warshall explota la relación de p y el camino mínimo entre i y j con todos los vértices intermedios en el conjunto {1, 2, 3, ...k−1}. Ésta relación depende en que k sea o no el vértice intermedio del camino p de la siguiente manera: (k) wij if k = 0 dij = (k−1) (k−1) (k−1) min(dij , dik + dkj ) if k ≥ 1 El seudo-código para el algoritmo de Warshall es el siguiente: Algorithm 2 FLOYD-WARSHALL(w) n ← f ilas(w) D(0) ← W for k ← 1 to n do for i ← 1 to n do for j ← 1 to n do d(k)ij ← min(d(k−1)ij , d(k−1)ik + d(k−1)kj ) end for end for end for return D(n) 12
  • 14. 1.3.3. Desempeño de los algoritmos de busqueda 13
  • 15. 1.4. Editor de Grafo 1.4.1. Introducción Este editor esta basado en el api de google Maps la cual nos permite hacer una interfaz de usuario para poder desplazarnos por mapas del mundo, hacer edición sobre los mismos, asimismo como manipular información relativa a los mapas de google Maps, también se ha hecho uso de YUI Yahoo User Interface un framework de programación en javascript que nos permite interacción Ajax entre nuestra interfaz y el servidor remoto mediante el cual se procesa solicitudes de información de tipo variado como puede ser paginas Web, imágenes, y todo tipo de información que nos sea útil. Editor Grafo 14
  • 17. 1.4.2. Características del editor El editor del grafo nos permite hacer la edición de nodos de modo sencillo, sus principales características son: Creación de Nodos del grafo mediante la interfaz Almacenamiento de información del nodo del grafo. Modicación del nodo mediante la interfaz. Almacenamiento de cambios de la información del nodo del grafo. Eliminación de nodo de grafo. Creación de aristas del grafo mediante la interfaz. Almacenamiento de información del arista del grafo. Almacenamiento de cambios de la información del nodo del grafo. Navegación en el mapa por medio de el mouse. Agrandar o disminuir la proporción del mapa. Desplazamiento en el mapa por medio del localizador. Ver los tipos de mapas como son satelital , en relieve y mixto. Nos muestra información del punto central del mapa para ubicar coorde- nadas del mismo. Se puede hacer la carga de información mediante una archivo especico para la carga de información en el mapa. 1.4.3. Funcionalidad del editor El modo de funcionamiento es sencillo y de facil interacción con el usuario: Edición de nodos: En la edición de los nodos podemos crear un nodo al hacer clic sobre el mapa, inmediatamente se cargara la información en el archivo saved.txt y en el archivo nodes.txt, además de generar grácamente el nodo correspondiente en el mapa. 16
  • 18. Borrado de un nodo, esta tarea se logra haciendo doble clic encima de un nodo en particular, en ese momento se sucede el cambio en la información registrada en los archivos de nodos y aristas tanto como en el archivo de información global del grafo saved.txt. Modicación del nodo, al arrastrar el nodo con el mouse la interfaz hará el desplazamiento del nodo en la interfaz asimismo como la modicación de la información relacionada con el nodo en particular, tomando en cuenta el desplazamiento de las aristas asimismo como el nodo. 17
  • 19. Edición de Aristas: Creación de aristas, para poder crear una arista la condición minima de creación de aristas es que por lo menos haya una arista creada, sin la misma la consecución de la creación de la misma no sera posible, por tanto para crear una arista hacemos clic en un nodo y luego procedemos a hacer clic sobre otro nodo para poder generar gracamente nuestra arista, luego la información relativa a la arista generada será almacenada. El borrado de una arista es consecuencia del borrado de un nodo ante el bor- rado de un nodo se borraran las aristas correspondientes al mismo así como la información relacionada a la arista. La modicación de una arista es dada según la modicación que se de en un nodo en particular puesto que la arista es dependiente de un nodo en especi- co, por tanto al ser modicado su localización del nodo será posteriormente modicada la arista. Desplazamiento en el mapa: El desplazamiento en el mapa puede ser hecho en función del solo uso del mouse o del uso del mouse mas el desplazador del mapa conjuntamente con la acción del mouse, para poder desplazarse en el mapa debemos arrastrar con el mouse el mapa hacia la locación que deseamos ver o haciendo uso del desplazador podemos hacer clic encima de los indicadores de dirección y desplazarnos hacia una locación que deseemos ver. 18
  • 20. Vistas de los mapas: En el mapa tenemos distintos tipos de vista, para poder hacer uso de las mismas solo debemos hacer clic en los botones de la izquierda superior derecha y esperar la carga de la respectiva vista. Carga de información en el mapa: Para hacer la carga de información del mapa, tenemos que hacer click en el boton LoadFile mediante el cual cargara un dialogo en el cual accedemos 19
  • 21. al cuadro de dialogo abrir y seleccionamos un archivo que tenga un formato adecuado para hacer la carga de información y procedemos a hacer click en el boton cargar. Dependiendo de la velocidad de conexión se dara a continuación la carga de información del grafo en el mapa. 20
  • 22. 21
  • 23. 1.4.4. Formato de archivo de Editor Grafo Para poder hacer uso correcto de las características de nuestro editor de grafo tenemos que tener un formato adecuado el cual es el que a continuación se detalla: En la parte inicial colocamos toda la información de los nodos siguiendo la norma básica de tener un identicador por Ej.: id1 luego la latitud y a continuación la longitud. Seguidamente se coloca para hacer la diferencia de la información que viene a continuación: Se coloca información de los edges un identicador de edge por Ej. edge1 luego ideticador de nodo inicial posterior a este un identicador de nodo nal. 22
  • 24. Ejemplo: 10 -16.398921914003473 -71.53517961502075 -16.397862825349694 -71.53472900390625 -16.396792409131297 -71.53427839279175 -16.397219547077878 -71.53320550918579 -16.398212767836995 -71.5336561203003 -16.399262591524984 -71.53406381607056 -16.40031240955188 -71.53447151184082 -16.40072410135037 -71.53337717056274 -16.39966913937374 -71.53301239013672 -16.398639902667625 -71.53258323669434 4 0 12 0 8 7 6 6 11 23