Professional Documents
Culture Documents
El algoritmo de Dijkstra hace uso y define etiquetas a partir del nodo origen y
para cada uno de los nodos subsiguientes. Estas etiquetas contienen
información relacionada con un valor acumulado del tamaño de los arcos y con
la procedencia más próxima de la ruta.
Iteración 1
Tabulamos la iteración 1:
Iteración 2:
En este paso, evaluamos las posibles salidas desde el nodo 3, es decir los
nodos 4 y 5. De manera que debemos asignar las etiquetas para cada nodo:
En este caso, podemos observar que la etiqueta del nodo 4, contiene el menor
valor acumulado posible para llegar a este. Así entonces, la etiqueta del nodo 4
pasa a ser permanente.
Tabulamos la iteración 2:
Iteración 3:
En este paso, evaluamos las posibles salidas desde el nodo 4, es decir los
nodos 2 y 5. De manera que debemos asignar las etiquetas para cada nodo:
Etiqueta nodo 2 = [valor acumulado, procedencia] iteración
Etiqueta nodo 2 = [40 + 15, 4] 3
Etiqueta nodo 2 = [55, 4] 3
En este caso, podemos observar que el nodo 2 ahora cuenta con 2 etiquetas
temporales, y definitivas, ya que no existe otra ruta hacia dicho nodo. De
manera que se elige la etiqueta que tenga el menor valor acumulado. Así
entonces, la etiqueta del nodo 2 con procedencia del nodo 4, pasa a ser
permanente.
Tabulamos la iteración 3:
Iteración 4:
En este paso, evaluamos las posibles salidas desde el nodo 2 y el nodo 5. Sin
embargo, el nodo 2 solo tiene un posible destino, el nodo 3, el cual ya tiene una
etiqueta permanente, de manera que no puede ser reetiquetado. Ahora,
evaluamos el nodo 5 y es un nodo que no tiene destinos. Así entonces, su
etiqueta temporal pasa a ser permanente, en este caso cuenta con 2 etiquetas
que tienen el mismo valor, es decir, alternativas óptimas. De esta manera
concluye el algortimo de Dijkstra.
¿Cuál es la ruta más corta?
La ruta más corta entre el nodo 1 (origen) y cualquier otro nodo de la red
(destino), se determina partiendo desde el nodo destino y recorriendo las
procedencias de sus etiquetas. Por ejemplo:
Es necesario considerar, que los valores utilizados en los arcos de la red objeto
de estudio del algoritmo de Dijkstra, no necesariamente representan distancias.
Si bien, es un modelo que aborda el denominado "problema de la ruta más
corta"; en la práctica, puede utilizarse para optimizar: distancia, costos, tiempo.
Esta ciudad es atravesada por el río Pregolya, el cual se bifurca para rodear
con sus brazos a la isla Kneiphof, dividiendo el terreno en cuatro regiones
distintas, las que entonces estaban unidas mediante siete puentes llamados
Puente del herrero, Puente conector, Puente verde, Puente del mercado,
Puente de madera, Puente alto y Puente de la miel.El problema fue formulado
en el siglo XVIII y consistía en encontrar un recorrido para cruzar a pie toda la
ciudad, pasando sólo una vez por cada uno de los puentes, y regresando al
mismo punto de inicio.
HISTORIA
Problema de los puentes de Königsberg
El problema, formulado originalmente de manera informal, consistía en
responder a la siguiente pregunta:
Aplicaciones de encaminamiento:
Una variante distribuida al algoritmo del Bellman-Ford se usa en protocolos de
encaminamiento basados en vector de distancias, por ejemplo el protocolo de
encaminamiento de información (RIP). El algoritmo es distribuido porque
envuelve unas series de nodos (routers) dentro de un sistema autónomo (AS),
un conjunto de redes y dispositivos router IP administrados típicamente por un
Proveedor de Servicios de Internet (ISP). Se compone de los siguientes pasos:
1. Cada nodo calcula la distancia entre el mismo y todos los demás dentro de
un AS y almacena esta información en una tabla.
2. Cada nodo envía su tabla a todos los nodos vecinos.
3. Cuando un nodo recibe las tablas de distancias de sus vecinos, este
calcula la ruta más corta a los demás nodos y actualiza su tabla para reflejar
los cambios.
Las desventajas principales del algoritmo de Bellman-Ford en este ajuste son:
· No es escala bien.
· los cambios en la topología de red no se reflejan rápidamente ya que las
actualizaciones se distribuyen nodo por nodo.
· Contando hasta el infinito (si un fallo de enlace o nodo hace que un nodo
sea inalcanzable desde un conjunto de otros nodos, estos pueden estar
siempre aumentando gradualmente sus cálculos de distancia a él, y mientras
tanto puede haber bucles de enrutamiento).
Algoritmo de la Ruta más corta - Ejemplo
Un minero ha quedado atrapado en una mina, la entrada a la mina se
encuentra ubicada en el nodo 1, se conoce de antemano que el minero
permanece atrapado en el nodo 9, para llegar a dicho nodo hay que atravesar
una red de túneles que van conectados entre sí. El tiempo de vida que le queda
al minero sin recibir auxilio es cada vez menor y se hace indispensable hallar la
ruta de acceso al nodo 9 más corta. Las distancias entre nodos de la mina se
encuentran en la siguiente gráfica dadas en cientos de metros. Formule un
modelo de transbordo y resuelva mediante cualquier paquete de herramientas
de investigación operativa que permita establecer la ruta más corta para poder
así auxiliar al minero.
VARIABLES DE DECISIÓN
El nombre de las variables en este caso poco importa, dado que de ser
escogida para la solución básica eso significa simplemente que será empleada
como ruta para ir a rescatar al minero, sin embargo, nada tiene de malo el que
se le pueda asociar con el envío de unidades desde la entrada de la mina hacia
el minero, por ende, puede sugerirse este como nombre de las variables.
"Cantidad de unidades enviadas desde el nodo i hacia el nodo j".
X12 = Cantidad de unidades enviadas desde el nodo 1, hacia el nodo 2
X13 = Cantidad de unidades enviadas desde el nodo 1, hacia el nodo 3
X23 = Cantidad de unidades enviadas desde el nodo 2, hacia el nodo 3
X24 = Cantidad de unidades enviadas desde el nodo 2, hacia el nodo 4
X32 = Cantidad de unidades enviadas desde el nodo 3, hacia el nodo 2
X34 = Cantidad de unidades enviadas desde el nodo 3, hacia el nodo 4
X35 = Cantidad de unidades enviadas desde el nodo 3, hacia el nodo 5
X46 = Cantidad de unidades enviadas desde el nodo 4, hacia el nodo 6
X47 = Cantidad de unidades enviadas desde el nodo 4, hacia el nodo 7
X54 = Cantidad de unidades enviadas desde el nodo 5, hacia el nodo 4
X56 = Cantidad de unidades enviadas desde el nodo 5, hacia el nodo 6
X57 = Cantidad de unidades enviadas desde el nodo 5, hacia el nodo 7
X58 = Cantidad de unidades enviadas desde el nodo 5, hacia el nodo 8
X67 = Cantidad de unidades enviadas desde el nodo 6, hacia el nodo 7
X69 = Cantidad de unidades enviadas desde el nodo 6, hacia el nodo 9
X76 = Cantidad de unidades enviadas desde el nodo 7, hacia el nodo 6
X78 = Cantidad de unidades enviadas desde el nodo 7, hacia el nodo 8
X79 = Cantidad de unidades enviadas desde el nodo 7, hacia el nodo 9
X87 = Cantidad de unidades enviadas desde el nodo 8, hacia el nodo 7
X89 = Cantidad de unidades enviadas desde el nodo 8, hacia el nodo 9
Hay que recordar que el objetivo de este modelo es la consecución de un plan
de ruta que nos permita encontrar al minero lo más pronto posible al recorrer la
distancia mínima posible, por ende, la clave para plantear el modelo como si
fuese de transbordo es establecer una demanda y oferta igual a la unidad (1).
X12 + X13 = 1
X69 + X79 + X89 = 1
Restricciones de Balance
En palabras sencillas: "Todo lo que entra a cada nodo es igual a lo que sale de
él"
FUNCIÓN OBJETIVO
ZMIN = 4X12 + 2X13 + 2X23 + 7X24 + 4X32 + 9X34 + 6X35 + 1X46 + 5X47 + 2X54 +
4X56 + 3X57+ 2X58 + 1X67 + 5X69 + 4X76 + 3X78 + 5X79 + 2X87 + 7X89
INGRESANDO LOS DATOS A WINQSB
Grafo conexo
Para hablar de grafo conexo, diremos que dos vértices u, v V(G) están
"conectados" si existe un camino (u, v) en G. Entonces, es fácil ver que la
conexión es una relación de equivalencia en V(G).
Fig. 3.3
Observe que en la fig. 3.3 no existe (por ejemplo) un camino entre los vértices
de la componente G1 y los de la componente G4. Deducimos de aquí que
un grafo G es conexo si y sólo si todo par de vértices de G puede ser unido
por un camino.
Un grafo es conexo si cada par de vértices está conectado por un camino; es
decir, si para cualquier par de vértices (a, b), existe al menos un camino posible
desde a hacia b.
Un grafo es doblemente conexo si cada par de vértices está conectado por al
menos dos caminos disjuntos; es decir, es conexo y no existe un vértice tal que
al sacarlo el grafo resultante sea disconexo.
Es posible determinar si un grafo es conexo usando un algoritmo Búsqueda en
anchura (BFS) o Búsqueda en profundidad (DFS).
En términos matemáticos la propiedad de un grafo (fuertemente) conexo
permite establecer una relación de equivalencia para sus vértices, la cual lleva
a una partición de estos en "componentes (fuertemente) conexos", es decir,
porciones del grafo, que son (fuertemente) conexas cuando se consideran
como grafos aislados. Esta propiedad es importante para muchas
demostraciones en teoría de grafos.
4.3.7-Gráficas en computadora
Las computadoras se han convertido en una herramienta poderosa para
producir imágenes en forma rápida y económica. De hecho, no existe ninguna
área en que no se puedan aplicar las gráficas por computadora con algún
beneficio y, como consecuencia, no es sorprendente encontrar que se haya
generalizado tanto la utilización de las gráficas por computadora.
Los avances en la tecnología de la computación han hecho que las gráficas
interactivas por computadora sean una herramienta práctica. Hoy en día,
vemos que las gráficas por computadora se utilizan de manera rutinaria en
diversas áreas, como en la ciencia, ingeniería, empresas, industria, gobierno,
arte, entretenimiento, publicidad, educación, capacitación y presentaciones
gráficas.
Con pocas excepciones, los paquetes generales de gráficas están diseñados
para utilizarse con especificaciones de coordenadas cartesianas. Si los valores
de las coordenadas de una imagen se especifican en alguna otra estructura de
referencia (esférica, hiperbólica, etc.), es necesario convertirlos a coordenadas
cartesianas antes de poder capturarlos en el paquete de gráficas. Los paquetes
para propósitos especiales pueden permitir que se empleen otras estructuras
de coordenadas que son apropiadas para la aplicación. En general, se pueden
utilizar varias estructuras cartesianas de referencia distintas para crear y
desplegar una escena. Podemos construir la forma de objetos individuales,
como árboles o muebles, en una escena en estructuras de coordenadas de
referencia separadas, que se conocen como coordenadas de modelado, o a
veces como coordenadas locales o coordenadas maestras. Una vez que se
especifican las formas de objetos individuales, podemos colocar los objetos en
las posiciones adecuadas en la escena al utilizar una estructura de referencia
llamada coordenadas mundiales. Por último, la descripción de las coordenadas
mundiales a una o más estructuras de referencia de dispositivos de salida para
su despliegue. Estos sistemas de coordenadas de despliegue reciben el
nombre de coordenadas de dispositivo o coordenadas de pantalla en el caso
de un monitor de video. Las definiciones del modelado y de las coordenadas
mundiales nos permite establecer cualquier dimensión de punto flotante o de
entero conveniente sin obstáculos por las restricciones de un dispositivo de
salida particular.
Por lo general, un sistema de gráficas primero convierte las posiciones de
coordenadas mundiales a coordenadas de dispositivo normalizado, en el rango
de 0 a 1, antes de realizar la conversión final para especificar las coordenadas
de dispositivo.
Es posible describir una imagen de muchas maneras. Si supone que tenemos
un dispositivo de rastreo,una imagen se especifica por completo por el conjunto
de intensidades para las posiciones de pixel en el despliegue. En contraste, se
puede describir una imagen como un conjunto de objetos complejos, como
árboles y terreno o muebles y muros, colocados en posiciones de coordenadas
específicas en la escena. Las formas y los colores de los objetos se pueden
describir, a nivel interno, con matrices de pixel o con conjuntos de estructuras
geométricas básicas, como segmentos de línea recta y áreas de color de
polígonos. Entonces, la escena se despliega ya sea al cargar las matrices de
pixel en el búfer de estructura, o al convertir mediante rastreo las estructuras
geométricas básicas en patrones de pixel. Por lo regular, los paquetes de
programación de gráficas ofrecen funciones para describir una escena en
términos de estas estructuras geométricas básicas, que reciben el nombre de
primitivos de salida. y agrupar conjuntos de primitivos de salida en estructuras
más complejas. Cada primitivo de salida se especifica con los datos de las
coordenadas de entrada y otra información referente a la manera en que se
debe desplegar ese objeto. Los puntos y segmentos de línea recta son los
componentes geométricos más simples de las imágenes. Los primitivos de
salida adicionales que se pueden utilizar para crear una imagen incluyen
circunferencias y otras secciones cónicas, superficies cuadráticas, curvas y
superficies de "spline”, áreas de color de polígonos y cadenas de caracteres.
El trazo de líneas se efectúa mediante el cálculo de posiciones intermedias a lo
largo de la trayectoria de la línea entre dos posiciones extremas específicas.
Un dispositivo de salida se dirige para llenar estas posiciones entre los
extremos. Cuando se tienen dispositivos análogos, como un trazador vectorial
a base de pluma o un despliegue de rastreo aleatorio, se puede trazar una
línea recta de manera tenue de un extremo al otro. Se generan voltajes de
reflexión horizontal y vertical linealmente variables que son proporcionales a los
cambios requeridos en las direcciones de x y y para producir la línea tenue.
Los dispositivos digitales despliegan un segmento de línea recta al trazar
puntos discretos entre los dos extremos. Las posiciones de coordenadas
discretas a lo largo de la trayectoria de la línea se calculan a partir de la
ecuación de la línea. Para un despliegue de video de rastreo, el color
(intensidad) de la línea se carga entonces en el búfer de estructura, el
controlador de video "traza los pixeles" de la pantalla. Las posiciones en la
pantalla se expresan como valores enteros, de modo que las posiciones
trazadas sólo puedan aproximarse a las posiciones de la línea reales entre dos
extremos específicos.
Para los algoritmos a nivel de dispositivo de gráficas de rastreo que se verán
en los siguientes temas. las posiciones de objetos se especifican directamente
en coordenadas de dispositivo enteras.
Método Directo
Este método permite dibujar una línea, entre los puntos (xi,yi) y (xf,yf), utilizando la ecuación y = mx +
b generando a continuación la secuencia (xi+1 = xi + Δx, round (yi + 1)).
Con este cálculo se obtiene el píxel más cercano o sea aquel cuya distancia a la recta es menor.
Este método no es tan eficiente debido a que en cada iteración se requiere una multiplicación y una suma en
punto flotante, más la invocación del método de truncamiento.El uso de la función de redondeo y el hecho
de que para cada valor (discreto) de x se grafica un solo valor de y, ocasiona que la gráfica sea discontinua
para |m|>1.
Algoritmo DDA
El analizador diferencial digital (DDA; digital differential analyzer) es un algoritmo de línea de conversión de
rastreo que se basa en el cálculo ya sea de Δy, o de Δx, por medio de las siguientes ecuaciones:
Δy = m Δx
Δx = Δy/m
Se efectúa un muestreo de la línea e intervalos unitarios en una coordenada y se determinan los valores
enteros correspondientes más próximos a la trayectoria de la línea para la otra coordenada.
Se debe considerar primero una línea con pendiente positiva. Si la pendiente es menor o igual que 1, se
lleva a cabo un muestreo de x intervalos unitarios (Δx = 1) y se calcula cada valor sucesivo de y como
yk+1 = yk + m.
El subíndice k toma valores enteros a partir de 1 y aumenta a razón de 1 hasta que se alcance el valor final.
Ya que m puede ser cualquier número real entre 0 y 1, los valores calculados de y deben redondearse al
entero más cercano.
Para las líneas con una pendiente positiva mayor que 1, se revierten la funciones de x yde y. Es decir, se
realiza un muestreo de y en intervalos unitarios (Δy = 1 ) y se calcula cada valor sucesivo de x como
xk+1 = xk + 1/m.
Las ecuaciones anteriores se basan en la suposición de que las líneas deben procesarse del extremo
izquierdo al derecho. Si este procesamiento se revierte, de manera que sea el extremo derecho donde se
inicia, entonces se tiene ya sea Δx = -1 y
yk+1 = yk - m
o ( cuando la pendiente es mayor que 1 ) Δy - 1 con
xk+1 = xk - 1/m
Algoritmo de Punto Medio - Bresenham
Un algoritmo preciso y efectivo para la generación de líneas de rastreo, desarrollado por Bresenham,
convierte mediante rastreo las líneas al utilizar sólo cálculos incrementales con enteros que se pueden
adoptar para desplegar circunferencias y otras curvas.
El algoritmo de línea de Bresenham se basa en probar el signo de un parámetro entero, cuyo valor es
proporcional a la diferencia entre las separaciones de las dos posiciones de pixel de la trayectoria real de la
línea.
Para realizar el trazo de línea de Bresenham para una línea con una pendiente positiva menor que 1 se
deben seguir los siguientes pasos:
1.Se capturan los dos extremos de la línea y se almacena el extremo izquierdo en (x0 , y0).
2.Se carga (x0 , y0)en el búfer de estructura; es decir, se traza el primer punto.
3.Se calculan las constantes Δx , Δy, 2Δy y 2Δy-2Δx y se obtiene el valor inicial para el parámetro de
decisión como p0 = 2Δy - Δx.
4.En cada xk,a lo largo de la línea, que inicia en k=0, se efectúa la prueba siguiente: si pk <0, el siguiente
punto que se debe trazar es (xk +1, yk) y pk +1 = pk + 2Δy. De otro modo, el siguiente punto que se debe
trazar es (xk +1, yk+1) y pk +1 = pk + 2Δy - 2Δx
5.Se repite el paso 4 Δx veces.
Como la circunferencia es un componente que se utiliza con frecuencia en imágenes y gráficas, la mayor
parte de los paquetes de gráficas incluye un procedimiento para generar ya sea circunferencias completas o
arcos circulares. De modo más general se puede ofrecer un solo procedimiento para desplegar ya sea
curvas circulares o elípticas.
Una circunferencia se define como un conjunto de puntos que se encuentran, en su totalidad, a una
distancia determinada r de una posición central (xc , yc). Esta relación de distancia se expresa por medio del
teorema de Pitágoras en coordenadas cartesianas como
(x - xc)2 + (y - yc)2 = r2
La forma de la circunferencia es similar en cada cuadrante. Se puede generar la sección circular del
segundo cuadrante del plano de xy al notar que las dos secciones circulares son simétricas con respecto del
eje de las y. Y las secciones circulares del tercero y el cuarto cuadrantes se pueden obtener a partir de las
secciones del primero y el segundo cuadrantes al considerar la simetría en relación con el eje de
las x.También se puede decir que hay simetría entre octantes. Las secciones circulares en octantes
adyacentes dentro de un cuadrante son simétricas con respecto de la línea a 45° que divide los dos
octantes. Al aprovechar la simetría de la circunferencia de esta manera, se podrá generar todas las
posiciones de pixel alrededor de una circunferencia, calculando sólo puntos dentro del sector de x = 0 a x =
y.
Al igual que en el algoritmo de la línea de rastreo, en el algoritmo de punto medio se efectúa un muestreo en
intervalos unitarios y se determina la posición del pixel más cercano a la trayectoria específica de la
circunferencia en cada paso. Para un radio r determinado y una posición central en la pantalla (xc ,yc), se
puede establecer primero el algoritmo para calcular las posiciones de pixel alrededor de una trayectoria
circular centrada en el origen de coordenadas (0,0). Así, cada posición calculada (x , y) se mueve a su
posición propia en la pantalla al sumar xc,a x y yc a y. A lo largo de la sección circular de x =0 a x = y en el
primer cuadrante, la pendiente de la curva varía entre 0 y -1. Por tanto, se puede tomar pasos unitarios
en la dirección positiva de x en este octante y utilizar un parámetro de decisión para determinar cuál de las
dos posiciones posibles de y está más próxima a la trayectoria de la circunferencia en cada paso. Las
posiciones de los otros siete octantes se obtienen entonces por simetría.
Para aplicar el método punto medio, se debe definir una función de circunferencia como:
f circunferencia (x , y)= x2 + y2 - r2
f circunferencia (x , y)= 0. Si el punto estpa en el interior de la circunferencia, la función de la circunferencia es
negativa; y si está en su exterior, es positiva
Al igual que en el algoritmo para el trazo de líneas de Bresenham, el método del punto medio calcula las
posiciones de pixel a lo largo de una circunferencia utilizando adiciones y sustracciones de enteros, si
se supone que los parámetros de la circunferencia se especifican en coordenadas enteras de pantalla. Se
pueden resumir los pasos del algoritmo de la circunferencia de punto medio como sigue:
1. Se capturan el radio r y el centro de la circunferencia (xc , yc) y se obtiene el primer punto de una
circunferencia centrada en el origen como (x0 , y0) = (0 ,r).
2. Se calcula el valor inicial del parámetro de decisión como p0 = 5/4 - r.
3. En cada xk posición, al iniciar en k = 0, se realiza la prueba siguiente. Si pk < 0, el siguiente punto a lo
largo de la circunferencia centrada en (0 , 0) es (xk+1 , yk) y pk+1 = pk +2xk+1 +1. De otro modo, el siguiente
punto a lo largo de la circunferencia es (xk + 1, yk -1) y pk+1 = pk + 2xk+1 + 1 -2yk+1 donde 2xk+1 = 2xk +
2 y 2yk+1 = 2yk -2.
4. Se determinan puntos de simetría en los otros siete octantes.
5. Se mueve cada posición de pixel calculada (x , y) a la trayectoria circular centrada en (xc , yc)setrazan los
valores de las coordenadas: x = x + xc y= y + yc .
6. Se repiten los pasos 3 a 5 hasta que x ≥ y.
Algoritmo de Punto Medio - Bresenham
El planteamiento que utilizamos aquí es similar a aquel que empleamos en el despliegue de una
circunferencia de rastreo. Dados los parámetros rx, ry y (xc , yc), determinamos los puntos (x, y) para una
elipse en posición estándar centrada en el origen y luego alteramos los puntos, de modo que la elipse esté
centrada en (xc , yc).
El método de punto medio para elipse se aplica a lo largo del primer cuadrante en dos partes.
Definimos la ecuación de una elipse con (xc , yc) = (0,0) como
felipse(x, y) = r2yx2 + r2xy2 - r2xr2y
que tiene las propiedades siguientes:
felipse(x, y) < 0 si (x , y) está adentro de la frontera de la elipse
felipse(x, y) <=0 si (x , y) está en la frontera de la elipse
felipse(x, y) < 0 si (x , y) está afuera de la frontera de la elipse
Así, la función de la elipse felipse(x, y) sirve como un parámetro de decisión en el algoritmo de punto medio.
En cada posición del muestreo, seleccionamos el pixel siguiente a lo largo de la trayectoria de la elipse de
acuerdo con el signo de la función de la elipse evaluada en el punto medio entre los dos pixel candidatos.
En los pasos siguientes se presenta el algoritmo de la elipse de punto medio:
1.Se capturan rx , ry y el centro de la elipse (xc , yc ) y se obtiene el prime punto de una elipse centrada en el
origen como (x0 , y0 )= (0 , ry)
2.Se calcula el valor inicial del parámetro de decisión en la región 1 como p10 = r2y - r2x ry + (1 r2x )/4
3.En cada posición xk en la región 1, al iniciar en k=0 , se realiza la prueba siguiente. Si p1k <0, el punto
siguiente a lo largo de la elipse centrada en (0 ,0) es (xk+1 , yk) y p1k+1 = p1k +2 r2y xk+1 + r2y
De otro modo, el punto siguiente a lo largo del círculo es (xk +1 , yk - 1) y p1k+1 = p1k +2 r2y xk+1 - 2
r2xyk+1 +r2y con 2 r2y xk+1 = 2 r2y xk + 2 r2y , 2 r2x yk+1 = 2 r2x yk - 2 r2x
4.Se calcula el valor inicial del parámetro de decisión en la región 2 utilizando el último punto (x0 , y0)
calculado en la región 1 como p20 = r2y (x0 + 1/2)2 + r2x(y0 - 1)2 - r 2x r2y
5.En cada yk posición en la región 2, al iniciar en k = 0, se realiza la prueba siguiente. Si p2k >0, el punto
siguiente a lo largo de la elipse centrada en (0 ,0) es (xk , yk - 1) y p2k+1 = p2k - 2r2x yk+1 + r2x
De otro modo, el punto siguiente a lo largo del círculo es (xk +1 , yk - 1) y p2k+1 = p2k +2 r2y xk+1 - 2
r2xyk+1 +r2x utilizando los mismos cálculos incrementales para x y y que en la región 1.
6.Se determinan puntos de simetría en los otros tres cuadrantes.
7.Se mueve cada posición de pixel calculada (x , y) a la trayectoria elíptica centrada en (xc , yc)y se trazan
los valores de las coordenadas:
x = x + xc y = y + yc
8.Se repiten los pasos para la región 1 hasta que 2 r2y x>= 2 r2x y.
4.4-Análisis asintótico de las funciones
En Ciencias de la Computación se presenta con frecuencia la situación de
analizar dos o más algoritmos que resuelven el mismo problema para
determinar cuál de ellos requiere menos recursos.
Técnica derivada del análisis matemático de algoritmos basada en dos
conceptos fundamentales: la caracterización de datos de entrada y la
complejidad asintótica. Peor caso: Los casos de datos de entrada que
maximizan la cantidad de trabajo realizado por un algoritmo. Mejor caso: Los
casos de datos de entrada que minimizan la cantidad de trabajo realizado por
un algoritmo. Caso promedio: El valor medio de la cantidad de trabajo realizado
por un algoritmo. Se debe tener en cuenta la distribución probabilística de los
datos de entrada que se manejan.
4.4.1-Complejidad de los algoritmos
Definición: Sea Dn el conjunto de datos de entrada de tamaño n para un
algoritmo, y sea I ∈ Dn un elemento cualquiera. Sea t(I) la cantidad de trabajo
realizado por el algoritmo para procesar la entrada I. Se definen entonces las
siguientes funciones: Complejidad del peor caso: W(n) = max{t(I) : I ∈ Dn}
Complejidad del mejor caso: B(n) = min{t(I) : I ∈ Dn} Complejidad del caso
promedio: A(n) = P I∈Dn P r(I) ∗ t(I), donde P r(I) es la probabilidad de que
ocurra la entrada I
Denotamos el tamaño de instancia con n
Calculamos el número de operaciones y el consumo de memoria para varios
diferentes valores de n
Graficamos el desempeño del algoritmo en función de n
Buscamos a una función simple que nos dé una cota superior al
comportamiento observado.
Complejidad constante. Es la más deseada.
log n: Complejidad logarítmica. Esta complejidad suele aparecer en
determinados algoritmos con iteración o recursión no estructural.
n: Complejidad lineal. Es, en general, una complejidad buena y bastante usual.
Suele aparecer en la evaluación de ciclo principal simple cuando la complejidad
de las operaciones interiores es constante o en algoritmos de recursión normal.
n log n. También aparece en algoritmos con recursión no es estructurada y se
considera una complejidad buena.
n². Complejidad cuadrática: Aparece en ciclos o recursiones dobles.
n3. Complejidad cúbica: Aparece en ciclos o recursiones triples. Para un valor
grande de n empieza a crecer en exceso.
np: Complejidad polinómica (p∈N, p>3). Si p crece, la complejidad del algoritmo
es bastante mala.
c n: Complejidad exponencial. Debe evitarse en la medida de lo posible. Puede
aparecer en subprogramas recursivos que contengan dos o más llamadas
internas. En algoritmos donde aparece esta complejidad suele hablarse de
explosión combinatoria.
n!: Complejidad factorial. Es la complejidad más mala de todas, aunque
afortunadamente aparece con muy poca frecuencia.
Algunas de las funciones más comunes en el análisis de algoritmos, y en
particular de la notación O, son mostradas en la siguiente figura, la cual
presenta las funciones y sus respectivas gráficas.
4.4.2-Acotación de problemas
Énfasis en el peor caso, ya que representa una cota superior para la cantidad
de trabajo realizado por un algoritmo La idea fundamental consiste en tratar de
encontrar una función W(n), fácil de calcular y conocida, que acote
asintóticamente el orden de crecimiento de la función TA(n) Se estudia la
eficiencia asintótica de algoritmos: Cómo se incrementa la cantidad de trabajo
realizado por un algoritmo a medida que se incrementa (con valores
“suficientemente grandes”) el tamaño de la entrada Para realizar este
procedimiento se necesitan herramientas especiales: las notaciones asintóticas
Sea f una función de N en R, es decir, f: N→R. o(g) es el conjunto de las
funciones f, también de los naturales a los reales, tales que f = O(g)y o(g) ≠
Θ(g). En otras palabras o(f )= O(f )– Θ(f ) donde “– “ denota la diferencia de
conjuntos. De la expresión anterior se puede concluir que para toda función f
de los naturales en los reales, ninguna función g esta al mismo tiempo en Θ(f )
y en o(f ) En otras palabras Θ(f ) ∩ o(f )= ∅ Por lo regular o(g) se lee “o
pequeña de g”. Es fácil recordar que las funciones o(g) son las funciones “más
pequeñas” de O(g).
(g) es el conjunto de las funciones f, de los naturales a los reales, tales que.
Por lo regular ω (g) se lee “omega pequeña de g”. Sin embargo, ω (g) es muy
poco usada, probablemente porque es difícil recordar que las funciones en ω
(g) son las funciones más grandes de Ω (g).
4.4.3-Transformación de problemas
Definición 1 Sean f(n) y g(n) dos funciones [f,g : Z+ → R+ ]. Se dice que f(n) es
“O grande” de g(n) y se escribe como: f(n) = O(g(n)) Si existen dos constantes
positivas c, n0 tal que f(n) ≤ c g(n) para todo n≥ n0
Ejemplo 1 Sea f(n)=n3 + 20 n2 + 100 n f(n) = O(g(n)) Puesto que: n 3 + 20 n2 +
100 n <= n3 + 20 n3 + 100 n3 = 121 n3 Escogiendo C = 121 y n 0 = 0 Es
suficiente para que se cumpla la definición.
Otro ejemplo, sea f(n)=lg n, y g(n)=(n/4)2 a b g () f () g () <=f () g ()>f ()
Podemos observar que: g(n) < f(n) para todo n, ¿tal que a < n < b. Será que
g(n) = O(f(n)) ?, la respuesta es NO pues si hacemos n0=a, la igualdad anterior
no se cumple para n > b, y por lo tanto no se cumple para todo n > n 0. ¿Será
que f(n) = O(g(n)) ?, la respuesta es SI pues si hacemos n0=b, la igualdad
anterior si se cumple para n > b, y por lo tanto se cumple para todo n > n0. Lo
anterior considerando por ejemplo c=1.
Definición 2 Sean f(n) y g(n) dos funciones [f,g : Z+ → R+ ]. Se dice que f(n) es
“Omega grande” de g(n) y se escribe como: f(n) = Ω(g(n)) Si existen dos
constantes positivas c y n0 tal que f(n) ≥ c g(n) para todo n≥ n0
Ejemplo, sea f(n)=lg n, y g(n)=(n/4)2
¿Será que f(n) = Ω(g(n)) ?, la respuesta es NO porque no se puede encontrar c
y n0 que satisfaga f(n) que satisfaga f(n) ≥ cg(n) para todo n ≥ n 0. ¿Será que
g(n) = Ω(f(n)) ?, la respuesta es SI pues si hacemos n0=b, la igualdad anterior si
se cumple para c=1 y n ≥ b, y por lo tanto se cumple para todo n > n0.
4.4.4-Cotas superiores e inferiores
Definición 3 (Cota Asintótica) Sean f(n) y g(n) dos funciones [f,g : Z+ → R+ ].
Se dice que f(n) es “Theta grande” de g(n) y se escribe como: f(n) = Θ(g(n)) Si
existen dos constantes positivas c1 c2, y n0 tal que c2 g(n) ≤ f(n) ≤ c2 g(n) para
todo n≥ n0
Las cotas de complejidad nos ayudan a clasificar los algoritmos de acuerdo a
su tiempo de ejecución. Si tenemos un algoritmo que para una
entrada n tarda f(n) en ejecutarse, lo que nos interesa es encontrar una cota
que crezca de manera similar a f(n).
En términos más sencillos, si tenemos una función O(n2), quiere decir que el
tiempo de ejecución f(n) nunca será mayor a cn2. Como estamos acotando por
la parte superior, si un algoritmo cumple O(n2), también cumple O(n3) (o
cualquier otra función de orden mayor), ya que si f(n) ≤ cn2 con mayor
razón f(n) ≤ cn3.
Dada una función f, queremos estudiar aquellas funciones g que a los sumo
crecen tan lentamente como f. Esta cota define que, para una función g(n),
tenemos una función asintótica la cual cumple:
Ω(g(n)) = {f(n): con constantes positivas c y n0 tales que 0 ≤ cg(n) ≤ f(n),
toda n > n0.}
Esto significa que para valores más grandes que n0, los resultados de f(n) no
pueden ser menores a Ω(n).
Como esta notación especifica un límite inferior, es común que se utilice para
acotar el caso de mejor tiempo de ejecución, ya que cualquier otro caso tiene
que ser forzosamente mayor a éste.
Al igual que con la cota superior, la cota inferior que es más útil es aquella que
se aproxima en mayor grado a f sin sobrepasarla, y estará implícito dentro del
libro. También de manera análoga a O, existe una notación similar a Ω que es
ω (omega minúscula). En esta cota se cumple que 0 ≤ cg(n) < f(n), y tampoco
es utiliza comúnmente.
Esta notación se acostumbra utilizarla para acotar el tiempo medio de ejecución
de un algoritmo.
Figura 2.1: Representación gráfica de la notación Θ
Fuentes
http://teoriasdelosalgoritmo.blogspot.mx/2013/02/algoritmo-de-euclide-grupo-
10.html
http://teoriasdelosalgoritmo.blogspot.mx/2013/02/algoritmo-para-la-ruta-mas-
corta-grupo-8.html
https://www.ingenieriaindustrialonline.com/herramientas-para-el-ingeniero-
industrial/investigacion-de-operaciones/algoritmo-de-la-ruta-mas-corta/
https://www.ingenieriaindustrialonline.com/herramientas-para-el-ingeniero-
industrial/investigacion-de-operaciones/algoritmo-de-dijkstra/
http://cidecame.uaeh.edu.mx/lcc/mapa/PROYECTO/libro23/unidad_1__grficas_
por_computadora.html
https://www.ecured.cu/Grafo_conexo
https://sites.google.com/site/algoritmosyestructuras2/unidad-iii-fundamentos-de-
analisis-asintomatico-de-algoritmos/analisisasintotico.pdf?attredirects=0&d=1
http://pier.guillen.com.mx/algorithms/02-analisis/02.4-cotas.htm
http://teoriadegrafos.blogspot.mx/2007/03/grafos-conexos.html
https://es.wikibooks.org/wiki/Matem%C3%A1tica_Discreta/Teor%C3%ADa_de_
grafos#Grafos_conexos
https://prezi.com/hhym8cdy9_xf/grafo-de-euler-algoritmo/