Documentos de Académico
Documentos de Profesional
Documentos de Cultura
DE ALGORITMOS
Versión 1 .0
Página 1
Co p yrigh t
© 2003 de Instituto Nacional de Capacitación. Todos los derechos reservados. Copiapó, Chile.
Este documento puede ser distribuido libre y gratuitamente bajo cualquier soporte siempre y
cuando se respete su integridad.
Página 2
P r e fa c i o
El m anual ha sido concebido para ser leído en form a secuencial, pero tam bién
para ser de fácil consulta para verificar algún tema específico.
El Autor.
Copiapó, Enero 20 0 3
Página 3
Í n d i c e Ge n e r a l
Página
Pre s e n ta ció n 7
1. In tro d u cció n
1.1. Motivación y Objetivos 8
1.2. Algunas Notas sobre la Historia de los Algoritmos 10
1.3. Fundamentos Matemáticos 11
Página 4
4.6.3. Método del Teorem a Maestro 45
4.6.4. Método de la Ecuación Característica 46
4.6.5. Cambio de Variable 48
4.7. Ejemplos y Ejercicios 49
7. Algo ritm o s d e Bú s qu e d a
7.1. Introducción 78
7.2. Búsqueda Lineal 78
7.3. Búsqueda Binaria 80
7.4. Árboles de Búsqueda 81
7.5. Búsqueda por Transform ación de Claves (Hashing) 81
7.6. Búsqueda en Textos
7.6.1. Algoritm o de Fuerza Bruta 88
7.6.2. Algoritm o de Knuth- Morris- Pratt 88
7.6.3. Algoritm o de Boyer-Moore 92
8. Te o ría d e Gra fo s
8 .1. Definiciones Básicas 97
8.2. Representaciones de Grafos
8 .2.1. Matriz y Lista de Adyacencia 101
8.2.2. Matriz y Lista de Incidencia 10 3
8.3. Recorridos de Grafos
8 .3.1. Recorridos en Amplitud 10 4
8.3.2. Recorridos en Profundidad 10 6
8.4. Grafos con Pesos 10 8
8.5. Árboles 10 8
Página 5
8.6. Árbol Cobertor Mínim o
8 .6.1. Algoritm o de Kruskal 10 9
8.6.2. Algoritm o de Prim 111
8.7. Distancias Mínimas en un Grafo Dirigido
8 .7.1. Algoritm o de Dijkstra 113
8.7.2. Algoritm o de Ford 114
8.7.3. Algoritm o de Floyd- Warshall 115
9. Co m p le jid a d Co m p u ta cio n a l
9.1. Introducción 118
9.2. Algoritmos y Complejidad 118
9.3. Problem as NP Com pletos 118
9.4. Problem as Intratables 121
9.5. Problem as de Decisión 123
9.6. Algoritmos No Determinísticos 124
Página 6
Pre s e n tació n
El curso de Análisis y Diseño de Algoritm os (ADA) tiene como propósito
fundamental proporcio nar al estudiante las estructuras y técnicas de m anejo de
datos m ás usuales y los criterios que le perm itan decidir, ante un problem a
determ inado, cuál es la estructura y los algoritm os óptim os para m anipular los
datos.
El tem ario gira en torno a dos tem as principales: estructuras de datos y análisis de
algoritm os. Haciendo énfasis en la abstracción, se presentan las estructuras de
datos m ás usuales (tanto en el sentido de útiles com o en el de com unes), sus
definiciones, sus especificaciones com o tipos de datos abstractos (TDA's), su
im plantación, análisis de su com plejidad en tiem po y espacio y finalm ente algunas
de sus aplicaciones. Se presentan tam bién algunos algoritm os de ordenación, de
búsqueda, de recorridos en gráficas y para resolver problemas mediante recursión
y retroceso mínimo analizando también su complejidad, lo que constituye una
prim era experiencia del alum no con el análisis de algoritm os y le proporcionará
herram ientas y m adurez que le serán útiles el resto de su carrera.
Página 7
Ca p ítu lo 1
In tro d u cció n
1.1 Mo tivació n y Obje tivo s
En el siglo XIX, Charles Babbage describió una máquina que podía liberar a
los hombres del tedio de los cálculos y al mismo tiempo realizar cálculos
confiables.
Página 8
Este curso trata de tres preguntas centrales que aparecen cuando uno quiere
que un com putador haga algo: ¿Es posible hacerlo? ¿Cóm o se hace? y ¿Cuán
rápido puede hacerse? El curso da conocimientos y métodos para responder
est as preguntas, al m ism o tiem po intenta aum entar la capacidad de
encontrar algoritm os efectivos. Los problem as para resolver, son un
entrenam iento en la solución algorítm ica de problem as, y para estim ular el
aprendizaje de la materia.
Me tas d e l cu rs o :
Página 9
1. 2 Algu n as N o tas s o bre la H is to ria d e lo s Algo ritm o s
El térm ino proviene del m atem ático árabe Al'Khw arizm i, que escribió un
tratado sobre los núm eros. Este texto se perdió, pero su versión latina,
Algoritm i de Num ero Indorum , sí se conoce.
Página 10
1. 3 Fu n d am e n to s Mate m ático s
Mo n o to n icid ad
Co n ju n to s
Pe rm u ta ció n
Página 11
Fu n cio n e s Pis o y Te ch o
Para cualquier número real x, denotam os al m ayor entero, m enor que o igual
a x como flo o r (x), y al m enor entero, m ayor que o igual a x com o
ce ilin g (x); (floor=piso, ceiling=techo). Para toda x real,
Op e ra d o r m ó d u lo
Por ejemplo: 5 m od 3 = 2 y 25 m od 3 = 1
Po lin o m io s
p(n) = ∑ d*a i n i
i=0
aº = 1
a¹ = a
a ( -1) = 1/ a
(a m ) n = a m n
(a m ) n = (a n ) m
a m a n = a m +n
Para todo n y a ≥ ,1
lim nà ∞ n b / a n = 0
i=0
e x p(x) = ∑ x i / (i!)
∞
Lo ga ritm o s
Página 13
Los logaritm os tienen las siguientes p ro p ie d a d e s :
Facto riale s
1 si n=0
n! =
n·(n-1)! si n>0
n! = o (n n )
n! = (2 n )
lg(n!) = Q(n lg n)
N ú m e ro s d e Fib o n a cci
F0 = 0
F1 = 1
F i = F i-1 + F i-2 para i ≥ 2
Página 14
Entonce s cada n úm ero de Fibon acci es la sum a de los núm eros previos,
produciendo la sucesión:
Re cu rs ió n
• El c a s o b a s e, que m aneja una entrada sim ple que puede ser resuelta
sin una llam ada recursiva
Cuando se conoce una ecuación que calcula el resultado de una sum atoria,
se dice que esta ecuación representa una s o lu ció n e n fo rm a ce rrad a .
• Σ i = n(n+1)/ 2
• Σ I 2 = (2n 3 +3n 2 + n)/ 6
• Σ 1 log n n = n log n
• Σ ∞ a i = 1/ (1- a)
Una re la ció n d e re cu rre n cia define una función media nte una expresión
que incluye una o más instancias (más pequeñas) de si misma. Por ejemplo:
Página 15
n! = (n- 1)! n , 1! = 0 ! = 1
• 1,1,2,3,5,8,13,...
Página 16
Estim ación
Página 17
Cap ítu lo 2
Algo ritm o s y Pro ble m as
2 .1 D e fin ició n d e Algo ritm o
Hay que hacer énfasis en dos aspectos para que un algoritm o exista:
1. El núm ero de pasos debe ser finito. De esta m anera el algoritm o debe
terminar en un tiempo finito con la solución del problema,
Sería un er ror creer que los algoritm os son exclusivos de la inform ática.
Tam bién son algoritm os los que aprendem os en la escuela para m ultiplicar y
dividir núm eros de varias cifras. De hecho, el algoritm o m ás fam oso de la
historia se rem onta a la antigüedad: se trat a del algoritmo de Euclides para
calcular el máximo común divisor.
Siem pre que se desee resolver un problem a hay que plantearse qué
algoritm o utilizar. La respuesta a esta cuestión puede depender de
numerosos factores, a saber, el tamaño del problema, el m odo en que está
planteado y el tipo y la potencia del equipo disponible para su resolución.
Página 18
7. Gen eral: Debe ser lo suficientemente general como para contemplar
todos los casos de entrada.
Por tan to, un a lgo ritm o es un procedim iento para resolver un problem a
cuyos pasos son concretos y no am biguos. El algoritm o debe ser correcto, de
longitud finita y debe term ina r para todas las entradas. Un p ro gra m a es
una instanciación de un algoritmo en un lenguaje de programación.
Los algoritm os son los procedim ientos que se construyen para la resolución
de cualquier problem a. De este modo, cuando se refiere a la construcción de
un programa, nos estam os refiriéndo a la construcción de un algoritmo. El
algoritmo no es un concepto proveniente del campo de la computación, sino
que es un término matemático.
Un algoritmo puede ser caracterizado por una función lo cual asocia una
salida: s= f (E) a cada entrada E.
Página 19
Cuando se tiene un problem a para el cual debem os especificar un algoritm o
solución, tendremos en cuenta varios puntos:
o Hay criterios para determ inar que tan "buena" es una solución,
distin tos d e ver si trabaja o no, o hasta qué punto es general la
aplicabilidad del m étodo. Estos criterios involucran aspectos tales
com o: eficiencia, elegancia, velocidad, etc.
Página 20
El que sabe buscar soluciones, selecciona la estrategia que le parece más
cercana a la requerida y hace una hábil adaptación que se ajusta a la nueva
demanda.
Sólo a partir de una buena form ulación será posible diseñar una estrategia
de solución. Es necesario aprender a desligar estos dos procesos. No se
deben hacer form ulaciones pensando paralelam ente en posibles soluciones.
Es necesario darle consistencia e independencia para determinar con
precisión a qué se quiere dar solución y luego canalizar una gam a de
alternativas posibles.
Página 21
o Adopción o utilización de una herram ienta para su
im plem entación, si es necesaria.
Página 22
Imaginemos, en cambio, que investigam os en algorítm ica y encontram os un
algoritm o capaz de resolver el m ism o problem a en un tiem po cúbico. La
im plem entación de este algoritm o en el com putador inicial podría necesitar,
por ejem plo, 10 -2 n3 segundos. Ahora se podría resolver en un día un
ejem plar de un tam año superior a 20 0 . Un año perm itiría alcanzar casi el
tam añ o 150 0 .
Dado estos argum entos, podem os resum ir las siguientes razones para
justificar el estudiar los algoritm os:
• La descripción narrativa
• El Flujogram a convencional
• El diagrama Chapin
• El pseudocódigo, o tam bién conocido com o lenguaje estructurado.
2 .5 La Máqu in a d e Tu r in g
Turing m ostró tam bién que existen problem as m atem áticos bien definidos
para los cuales no hay un algoritmo. Hay muchos ejemplos de problemas
para los cuales no existe un algoritm o. Un problem a de este tipo es el
llamado problema de paro (halting problem):
Página 24
Cap ítu lo 3
Eficie n cia d e Algo ritm o s
3 .1 In tro d u cció n
3 .2 Co n ce p to d e Eficie n cia
3 .3 Me d id as d e Eficie n cia
Re cu rs o Tie m p o:
Re cu rs o Me m o ria :
Página 26
3 .4 An á lis is A Pr io r i y Pru e ba A Po s t e r io r i
La estrategia teórica tiene com o ventajas que no depende del com putador ni
del lenguaje de program ación, ni siquiera de la habilidad del program ador.
Perm ite evitar el esfuerzo inútil de program ar algoritm os ineficientes y de
despediciar tiempo de máquina para ejecutarlos. Tam bién perm ite conocer
la eficiencia de un algoritm o cualquiera que sea el tam año del ejem plar al
que se aplique.
Eje m p lo: el problem a com putacional de m ultiplicar dos núm eros enteros
tiene por ejem plo, las siguientes instancias: m ultiplicar 345 por 4653,
m ultiplicar 2637 por 10 0 0 0 , m ultiplicar - 32341 por 12, etc.
Página 27
Un problema computacional abarca a otro problema computacional si las
instancias del segundo pueden ser resueltas com o instancias del prim ero en
form a directa.
C1
Una instancia de solución
sería:
9 <C1 , C2 , C4 , C3 >
5
10
con una longitud de 27.
C3 3
6 C4
9
C2
3 .6 Tam añ o d e lo s D ato s
Es claro que para cada algoritm o la cantidad de recurso (tiem po, m em oria)
utilizados depende fuertem ente de los datos de entrada. En general, la
cantidad de recursos crece a medida que crece el tamaño de la entrada.
Retom ando aquí el socorrido ejem plo del factorial, tratem os de analizar el
coste de dicho algoritmo, en su versión ite rativa , se tiene:
Página 29
END ;
RETURN Resultado
END Factorial ;
c si n = 0
T (n) =
T(n-1) + c si n > 0
Ejemplo:
Para algunos algoritm os, diferentes entradas (inputs) para un tamaño dado
pueden requerir diferentes cantidades de tiem po.
Página 31
En cam bio, cuando un algoritm o se ejecuta m uchas veces en m uchos tipos
de entrada, estam os interesados en el com portam iento prom edio o típico.
Desafortunadamente, esto supone que sabemos cómo están distribuidos los
datos.
Tip o s d e a n á lis is :
- peor caso
- m ejor caso
Página 32
Eje m p lo
Sea A una lista de n elem entos A 1 , A 2 , A 3 , ... , An . Ordenar significa perm utar
estos elem entos de tal form a que los m ism os queden de acuerdo con un
orden preestablecido.
Página 33
Cap ítu lo 4
An ális is d e Algo ritm o s
4 .1 In tro d u cció n
requiere:
T (N):= t1 + t2*N
Página 34
los extrem os son habitualm ente conocidos com o "caso peor" y "caso m ejor".
Dado que es fácil cam biar de com pilador y que la potencia de los
com putadores crece a un ritm o vertiginoso (en la actualidad, se duplica
anualm ente), intentarem os analizar los algoritm os con algún n ivel de
independencia de estos factores; es decir, buscarem os estim aciones
generales am pliam ente válidas.
Las operaciones básicas son las que realiza el com putador en tiem po acotado
por una constante, por ejemplo:
a) Benchm arking
b) Profiling
Página 35
c) Análisis
4 .3 Co n ce p to d e Co m p le jid ad
La función de com plejidad tiene com o variable independiente el tam año del
problema y sirve para medir la complejidad (espacial o temporal). Mide el
tiem po/ espacio relativo en función del tam año del problem a.
Si com pram os una com putadora diez veces m ás rápida, ¿en qué tiem po
podremos ahora ejecutar un algoritmo?
¿De qué tamaño (valor de n) es el problem a que podem os resolver con una
com putadora X veces m ás rápida (en un intervalo de tiem po fijo)?
Por ejem plo, supongam os que una com putadora resuelve un problem a de
tamaño n en una hora. Ahora supongamos que tenemos una computadora
Página 36
10 veces m ás rápida, ¿de qué tam año es el problem a que podem os
resolver?
f( n) n n´ c a m b io n´ / n
10 n 1000 10 0 0 0 n´ = 10n 10
20 n 50 0 50 0 0 n´ = 10n 10
5n log n 250 1842 √(10 )n 7.37
<n´ <10 n
2n2 70 223 n´ =√(10 )n 3.16
2n 13 16 n´ =n+3 ----
Nota: los factores constantes nunca afectan la m ejora relativa obtenida por
una computadora más rápida.
4 .4 Órd e n e s d e Co m p le jid a d
Así tendremos :
O( 1) orden constante
O(log n ) orden logarítm ico
O(n) orden lin eal
O(n2 ) orden cuadrático
O(n a ) orden polinomial (a > 2)
O(a n ) orden exponencial (a > 2)
O(n!) orden factorial
La notación asintótica se describe por m edio de una función cuyo dom inio
es los núm eros naturales (Ν ) estim ado a partir de tiem po de ejecución o de
espacio de m em oria de algoritm os en base a la longitud de la entrada. Se
consideran las funciones asintóticam ente no negativas.
Las notaciones no son dependientes de los tres casos anteriorm ente vistos,
es por eso que una notación que determ ine el peor caso puede estar
presente en una o en todas las situaciones.
4 .5.1 La O Mayú s cu la
f (x) = O ( g (x) )
¿Qué quiere decir todo esto? Básicam ente, que una función es siem pre
m enor que otra función (por ejem plo, el tiem po en ejecutar tu program a es
menor que x 2 ) si no tenem os en cuenta los factores constantes (eso es lo que
significa la k ) y si no tenemos en cuenta los valores pequeños (eso es lo que
significa la N ).
Página 39
¿Por qué no tenemos en cuenta los valores pequeños de N? Porqué para
entradas pequeñas, el tiempo que tarda el programa no es significativo y
casi siempre el algoritmo será sufic ientem ente rápido para lo que querem os.
que significa:
3N 3 + 5 N 2 – 9 ≤ 5N 3 for N > k :
1. Agrupamos: 5N 2 = 2N 3 + 9
2. Cuál k asegura que 5N 2 = N 3 para N > k?
3. k = 5
4. Así que para N > 5, 5 N 2 = N 3 = 2N 3 + 9.
5. C = 5, k = 5 (no es único!)
Hay que m ostrar que no existen C y k tales que para N > k , C* (3N 3 + 5N 2 –
9) ≥ N 4 es siempre cierto (usamos límites, recordando el curso de Cálculo).
Página 40
Así que sin impor tar cual sea el C que se elija, N 4 siem pre alcanzará y
rebasará C* (3N 3 + 5 N 2 – 9).
Le m a: Si el lím ite cuando x à ∞ del cociente | f (x)/ g (x)| existe (es finito)
entonces f (x) = O ( g (x) ).
Eje m p lo 3: 3N 3 + 5N 2 – 9 = O (N 3 ). Calculamos:
Listo!
o(g(n)) = {f(n ): para cualquier constante positiva c > 0 , existe una constante
n0 > 0 tal que: 0 ≤ f(n) ≤ cg(n) para toda n ≥ n0 }.
Las notaciones de O y o son sim ilares. La diferencia principal es, que en f(n)
= O (g(n)), la cota 0 ≤ f(n) ≤ cg(n) se cum ple para alguna constante c > 0 ,
pero en f(n) = o (g(n)), la cota 0 ≤ f(n) ≤ cg(n) se cumple para todas las
constantes c> 0 . Intuitivam ente en la notación o , la función f(n) se vuelve
insignificante con respecto a g(n) a m edida que n se acerca a in fin ito, es
decir:
Página 41
4 .5.3 D ife re n cia e n tre O y o
Ω Es el reverso de O.
f (x ) = Ω(g (x )) àß g (x ) = O (f (x ))
Θ Grande dice que am bas funciones se dom inan m utuam ente, en otras
palabras, son asintóticam ente equivalentes.
f (x ) = Θ(g (x ))
àß
f (x ) = O (g (x )) ∧ f (x ) = Ω(g (x ))
f = Θ(g): “f es de orden g ”
4 .5.5 Pro p ie d a d e s y Co ta s m á s U s u a le s
Re lacio n e s d e o rd e n
Página 42
Re lacio n e s e n tre co tas
Re la cio n e s d e in clu s ió n
∀ x, y, a, ε ∈ R >0
1. loga n ∈ O(log b n)
2. O(loga x n) ⊂ O(loga x +δ n)
3. O(loga x n) ⊂ O(n)
4. O(n x ) ⊂ O(nx +δ )
6. O(n x ) ⊂ O(2n )
Página 43
Pro p ie d ad e s d e clau s u ra
3. f1(n) ∈ O(g1(n)) ∧ f2 (n) ∈ O(g 2 (n)) ⇒ f 1(n)+f 2 (n) ∈ O(m ax(g 1(n), g 2 ( n))
com o consecuencia es que los polinom ios de grado k en n son exactam ente
del orden de nk
a k nk + … + a 1n + a 0 ∈ Θ(n k )
1. c ∈ Θ(1) ∀ c ∈ R ≥ 0
n
2. ∑ i = (n/ 2)(n+ 1) ∈ Θ(n2 )
i= 1
n
3. ∑ i2 = (n/ 3)(n+ 1) (n+1/ 2) ∈ Θ(n3 )
i= 1
n
4. ∑ ik ∈ Θ(n k +1) ∀ k ∈ N
i= 1
n
5. ∑ log i ∈ Θ( n log n )
i= 1
n
6. ∑ (n- i) k ∈ Θ(nk+1) ) ∀ k ∈ N
i= 1
Página 44
4 .6 Ecu a cio n e s d e Re cu rre n cia s
4 .6 .1 In tro d u cció n
4 .6 .3 Mé to d o d e l Te o re m a Ma e s tro
5 si n= 0
T (n) =
9T(n/ 3) + n si n ≠ 0
Página 45
Teorem a: Sean a = 1, b > 1 constantes, f(n) una función y T (n) una
recurrencia definida sobre los enteros no negativos de la form a T (n) =
aT(n/ b) + f(n), donde n/ b puede interpretarse com o n/ b o n/ b.
Entonces valen:
1. Si f(n) ∈ O(m log b a - ε) para algún ε > 0 entonces T (n) ∈ Θ(n log b a ).
2. Si f(n) ∈ Θ(n log b a ) entonces T (n) ∈ Θ(n logb a lgn).
3. Si f(n) ∈ Ω(nlog b a + ε) para algún ε > 0, y satisface af(n/ b) ≤ cf(n) para
alguna constante c < 1, entonces T (n) ∈ Θ(f(n)).
Ejemplos:
1. Si T(n)=9T (n/ 3)+n entonces a=9, b=3, se aplica el caso 1 con ε=1 y
T (n) ∈ Θ(n2 ).
3. Si T(n)=3T (n/ 4)+nlgn entonces a=3, b=4, f(n) ∈ Ω(n log 4 3 + 0,2 ) y
3(n/ 4) lg(n/ 4) ≤ 3/ 4n lgn, por lo que se aplica el caso 3 y T (n) ∈ Θ(n
lgn)
5 si n= 0
T (n) = 10 si n=1
5T(n-1) + 8T (n-2)+2n si n > 0
Ejemplos:
En general, para:
Página 46
♦ Paso 1: Encontrar las raíces no nulas de la ecuación característica:
T (n) = -----
1 ≤ i ≤ l, 0 ≤ j ≤ m i - 1
0 si n=0
T (n) =
2T (n-1) + 1 si n > 0
c11 + c21 = 0 de n = 0
2c11 + c21 = 1 de n = 1
Página 47
4 .6 .5 Ca m bio d e Va ria ble
a si n=1
T (n) =
2T (n/ 2) + nlog2 n si n = 2k
Se define una nueva recurrencia S(i) = T (2i), con el objetivo de llevarla a una
form a en la que se pueda resolver siguiendo algún método anterior.
(x - 2)(x - 2) i+1 = 0,
Página 48
4 .7 Eje m p lo s y Eje rcicio s
sum =0 ;
for (i= 1; i<= n; i++)
sum += n;
Analicem os un fragm ento de código con varios ciclos “for”, algunos de los
cuales están anidados.
sum =0 ;
for (j= 1; j<=n; j++)
for (i=1; i<=j; i++)
sum ++;
for (k = 1; k <=n; k ++)
A[k ]= k-1;
El costo total del ciclo es c 3 veces la sum a de los núm eros 1 a n, es decir Σn i=1 j
= n(n+1)/ 2, que es Θ(n2 ). Por tan to, Θ(c1 +c2 n+c3 n2 ) es sim plem ente Θ(n2 ).
Página 49
Com parem os el análisis asintótico de los siguientes fragm entos de código:
sum 1=0 ;
for(i= 1; i<= n; i++)
for(j=1; j<=n; j++)
sum 1++;
sum 2=0 ;
for(i= 1; i<= n; i++)
for(j=1; j<=i; j++)
sum 2++;
Por otra parte, el segundo fragm ento de código tiene un costo aproxim ado
de ½ n2 . Así ambos códigos tienen un costo de Θ(n 2 ).
sum 1=0 ;
for(k= 1; k<=n; k *=2)
for(j=1; j<=n; j++)
sum 1++;
Página 50
Ca p ítu lo 5
Es trate gias d e D is e ñ o d e
Algo ritm o s
5.1 In tro d u cció n
Se debe, sin em bargo, destacar que hay algunos problem as, com o los NP
com pletos, para los cuales ni éstas ni otras técnicas conocidas producirán
soluciones eficientes. Cuando se encuentra algún problem a de este tipo,
suele ser útil determinar si las entradas al problema tienen características
especiales que se puedan explotar en la búsqueda de una solución, o si puede
usarse alguna solución aproxim ada sencilla, en vez de la solución exacta,
difícil de calcular.
5 .2 Re cu rs ió n
Es una herram ienta poderosa que sirve para resolver cierto tipo de
problem as reduciendo la com plejidad y ocultando los detalles del problem a.
Esta herramienta consiste en que una función o procedimiento se llama a sí
mismo.
Una gran cantidad de algoritm os pueden ser descritos con m ayor claridad en
términos de recursividad, típicamente el resultado será que sus programas
serán m ás pequeños.
Ventajas:
Desventajas:
Tipo s d e Re cu rs ivid ad
Página 52
• In d ire cta o m u tu a : un subprogram a A llam a a otro subprogram a B
y éste a su vez llam a al subprogram a A.
• Debe de haber ciertos argum entos, llam ados valores base para los que
la función no se refiera a sí misma.
Eje m p lo s:
Fa ct o r ia l
⇒ n! = n* (n-1)!
Página 53
si n = 0 entonces n! = 1
si n > 0 entonces n! = n * (n- 1)!
Rastreo de ejecución:
Si n = 6
Nivel
S e r ie d e Fib o n a cci
0 , 1, 1, 2, 3, 5, 8, ...
F0 = 0
F1 = 1
F2 = F1 + F0 = 1
F3 = F2 + F1 = 2
F4 = F3 + F2 = 3
...
Fn = Fn-1 + Fn- 2
si n= 0 , 1 Fn = n
Página 54
Procedure fibo(var fib:longint; n:integer) ;
var
fibA, fibB : integer;
begin
if ( n = 0 ) or ( n = 1) then fib:=n
else begin
fibo(fibA,n- 1);
fibo(fibB,n- 2);
fib:=fibA + FibB;
end ;
en d;
Rem over la recursión es com plicado cuando existe m ás de una llam ada
recursiva, pero una vez hecha ésta, la versión del algoritm o es s ie m p re más
eficiente.
5 .3 D ivid ir p a ra Co n qu is ta r
Muchos algoritm os útiles tienen una estructura recursiva, de modo que para
resolver un problem a se llam an recursivam ente a sí m ism os una o m ás veces
para solucionar subproblemas m uy sim ilares.
Página 55
• Co m bin ar. Com binan estas soluciones para crear una solución al
problem a original.
Cas o Ge n e ral
fu n ció n DV(x)
{
s i x es suficientemente pequeño o sencillo e n to n c e s
d e vo lve r A(x)
descom poner x en casos más pequeños x1, x2, x3 , ... , x l
p a ra i ← 1 h as ta l hace r
yi ← DV(x i)
recom binar los y i para obtener una solución y de x
d e vo lve r y
}
Para aplicar la estrategia Divide y Vencerás es necesario que se cum plan tres
condiciones:
• Tiene que ser posible descom poner el caso en subcasos y recom poner
las soluciones parciales de form a eficiente.
• Los subcasos deben ser en lo pos ible aproxim adam ente del m ism o
tamaño.
Página 56
El análisis de tiempos de ejecución para estos algoritmos es el siguiente:
Sea g(n) el tiem po requerido por DV en casos de tam añ o n, sin con tar el
tiempo necesario para llamadas recursivas. El tiempo total t(n ) requerido
por este algoritm o de Divide y Vencerás es parecido a:
siem pre que n sea suficientemente grande. Si existe un entero k = 0 tal que:
g(n) ∈ Θ (n k ),
T (n k ) si l < b k
t (n) ∈ T (nk log n) si l = b k
T (n log b l) si l > b k
Frecuentem ente para resolver un problem a com plejo se tiende a dividir este
en subproblemas m ás pequeños, resolver estos últim os (recurriendo
posiblemente a nuevas subdivision es) y com binar las soluciones obtenidas
para calcular la solución del problema inicial.
Esta es la idea de la program ación dinám ica: no calcular dos veces lo m ismo
y utilizar norm alm ente una tabla de resultados que se va rellenando a
medida que se resuelven los subejemplares.
Página 57
Eje m p lo:
fu n c ió n C(n, k )
s i k =0 o k=n e n to n ce s devolver 1
s i n o devolver C(n-1, k-1) + C(n-1, k )
Ocurre que m uchos valores C(i, j), con i < n y j < k se calculan y recalculan
varias veces.
Eje m p lo:
Suelen ser bastante sim ples y se em plean sobre todo para resolver problem as
de optim ización, com o por ejem plo, encontrar la secuencia óptim a para
procesar un conjunto de tareas por un com putador, hallar el cam ino m ínim o
de un grafo, etc.
Página 58
• una fu n c ió n que determina si un conjunto es co m p le t a b le , es
decir, si añadiendo a este conjunto nuevos candidatos es posible
alcanzar una solución al problem a, suponiendo que esta exista;
fu n c io n voraz(C:conjunto):conjunto
{ C es el conjunto de todos los candidatos }
S <= vacío { S es el conjunto en el que se construye la solución
m ie n tras ¬solución(S) y C <> v acío h ace r
x ← el elem ento de C que m axim iza seleccionar(x)
C ← C \ {x}
s i com pletable(S U {x}) e n to n ce s S ← S U {x}
s i solución(S)
e n to n ce s d e v o lve r S
s i n o d e vo lve r no hay solución
El nom bre voraz proviene de que, en cada paso, el algoritm o escoge el m ejor
"pedazo" que es capaz de "com er" sin preocuparse del futuro. Nunca deshace
una decisión ya tom ada: una vez incorporado un candidato a la solución
perm anece ahí hasta el final; y cada vez que un candidato es rechazado, lo es
para siem pre.
Página 59
Eje m p lo: Mínimo número de monedas
5 .6 Mé to d o d e Re tro ce s o ( b a c k t r a ck in g )
Página 60
Un caso especialm ente im portante en optim ización com binatoria es el
problema de la s e le cció n ó p tim a . Se trata del problema de seleccionar una
solución por sus componentes, de forma que respetando una serie de
restricciones, de lugar a la solución que optimiza una función objetivo que se
evalúa al construirla. El árbol de búsqueda perm ite recorrer todas las
soluciones para quedarse con la m ejor de entre las que sean factibles. Las
estrategias heurísticas orientan la exploración por las ramas más
prom etedoras y la poda en aquellas que no per m iten alcanzar una solución
factible o mejorar la mejor solución factible alcanzada hasta el momento.
5.7 Mé to d o d e Br a n ch a n d Bo u n d
Los algoritmos generados por está técnica son norm alm ente de orden
exponencial o peor en su peor caso, pero su aplicación ante instancias m uy
grandes, ha dem ostrado ser eficiente (incluso m ás que bactracking ).
Página 61
Algoritmo General:
Página 62
Cap ítu lo 6
Algo ritm o s d e Ord e n am ie n to
6 .1 Co n ce p to d e Ord e n am ie n to
D EFIN ICIÓN .
En t r a d a : Una secuencia de n núm eros <a 1 , a2 , …, an >, usualm ente en la
form a de un arreglo de n elem entos.
S a li d a : Una permutación <a ’1 , a’2 , …, a’n > de la secuen cia de en trada tal
que a’1 = a’2 = … = a’n .
CON SID ERACION ES. Cada número es normalmente una clav e que form a
parte de un registro; cada registro contiene adem ás datos satélites que se
m ueven junto con la clave; si cada registro incluye m uchos datos satélites,
entonces movemos punt eros a los registros (y no los registros).
Página 63
6 .2 Ord e n am ie n to p o r In s e rció n
Este es uno de los m étodos m ás sencillos. Consta de tom ar uno por uno los
elementos de un arreglo y recorrerlo hacia su posición con respecto a los
anteriorm ente ordenados. Así em pieza con el segundo elem ento y lo ordena
con respecto al prim ero. Luego sigue con el tercero y lo coloca en su posición
ordenada con respecto a los dos anteriores, así sucesivamente hasta recorrer
todas las posiciones del arreglo.
Este es el algoritmo:
I NSERTION-SORT(A) :
{Para cada valor de j, inserta A[j] en la posición que le corresponde en la
secuencia ordenada A[1 .. j – 1]}
fo r j ← 2 t o n d o
k ← A[j]
i← j– 1
w h ile i > 0 ∧ A[i] > k d o
A[i + 1] ← A[i]
i← i– 1
A[i + 1] ← k
6 .3 Ord e n am ie n to p o r Se le cció n
SELECTION-SORT(A) :
{Para cada valor de j, selecciona el m enor elem ento de la secuencia no
ordenada A[j .. n] y lo intercambia con A[j]}
fo r j ← 1 t o n – 1 d o
k←j
for i ← j + 1 t o n d o
i f A[i] < A[k ] th e n k ← i
in te rca m bie A[j] ↔ A[k]
Página 64
Análisis del algoritmo:
6 .4 Ord e n a m ie n to d e la Bu rbu ja ( B u b b le s o r t )
Procedimiento Bu b b le S o r t
La idea básica del algoritm o es elegir un elem ento llam ado p ivo te, y
ejecutar una secuencia de intercam bios tal que todos los elem entos
menores que el pivot e queden a la izquierda y todos los m ayores a la
derecha.
Página 65
Lo único que requiere este proceso es que todos los elem entos a la izquierda
sean menores que el p ivot e y que todos los de la derecha sean m ayores luego
de cada paso, no importando el o r d e n entre ellos, siendo precisam ente esta
flexibilidad la que hace eficiente al proceso.
Página 66
• Si la partición es desbalanceada , Q UICKSORT corre asintóticam ente tan
lento como la ordenación por inserción.
Por ejemplo , este tiem po Θ(n 2 ) de ejecución ocurre cuando el arreglo está
completamente ordenado, situación en la cual I NSERTIONSORT cor re en
tiempo Ο(n).
Página 67
• En el siguiente nivel, el arreglo de tam año n–1 es particion ado en dos
arreglos de tamaño (n– 1)/ 2, y el costo de procesar un arreglo de
tam añ o 1 es 1.
• Esta com binación produce tres arreglos de tam años 1, (n–1)/ 2 y (n–
1)/ 2 a un costo combinado de 2n–1 = Θ(n) …
• … no peor que el caso de una sola partición que produce dos arreglos de
tam añ os (n– 1)/ 2 + 1 y (n– 1)/ 2 a un costo de n = Θ(n), y que es m uy
aproxim adam ente balanceada.
6 .6 Ord e n am ie n to p o r Mo n tícu lo ( H e a p s o r t )
D EFIN ICION ES. Un heap (binario) es un arreglo que puede verse com o un
árbol binario completo:
• Cada nodo del árbol corresponde a un elemento del arreglo;
• El árbol está lleno en todos los niveles excepto posiblemente el de más
abajo, el cual está lleno desde la izquierda hasta un cierto punto.
La raíz del árbol e s A[1]; y dado el índice i de un nodo, los índices de su padre,
hijo izquierdo, e hijo derecho se calculan como:
• A[i] puede ser más pequeño que sus hijos, violando la propiedad de
heap.
H EAPIFY (A, i) :
l ← L(i); r ← R(i)
i f l = σ[A] ∧ A[l] > A[i] t h e n k ← l e ls e k ← i
i f r = σ[A] ∧ A[r] > A[k] t h e n k ← r
if k ? i t h e n
intercambie A[i] ↔ A[k]
HEAPIFY(A, k)
• Com o los elem entos en A[( n/ 2 + 1) .. n] son todos hojas del árbol, cada
uno es un heap de un elemento;
• BUILD-H E AP pasa por los demás nodos del árbol y ejecuta H EAPIFY en
cada uno.
Página 69
• El orden en el cual los nodos son procesados garantiza que los
subárboles con raíz en los hijos del nodo i ya son heaps cuando H EAPIFY
es ejecutado en el nodo i.
El tiempo que toma H EAPIFY al correr en un nodo varía con la altura del nodo,
y las alturas de la mayoría de los nodos son pequeñas.
log n log n
n
∑
h+1 O(h) = O n
2
∑ h = O(n)
2h
h=0 h=0
∞
ya que
∑ 2hh = 2 .
h=0
o Es com pleto. Cada nivel es com pleto excepto posiblem ente el últim o,
y en ese nivel los nodos están en las posiciones m ás a la izquierda.
o Los ítem s de cada nodo son m ayores e iguales que los ítem s
almacenados en los hijos.
Página 70
Es decir:
2 3
4 5 6 7
De este m odo, es fácil buscar la dirección del padre o de los hijos de un nodo.
El padre de i es: i div 2. Los hijos de i son : 2 * i y 2 * i + 1.
9 4
1 5 3
La única razón por la que no es un heap es porque la raíz es m enor que uno
(o dos com o en este caso subárboles)
2 4
1 5 3
Esto garantiza que la nueva raíz sea m ayor que am bos hijos, y que uno de
estos siga siendo un heap (en este caso el derecho) y que el otro pueda ser o
no. Si es, el árbol entero lo es, sino sim plem ente repetim os el sw apdow n en
este subárbol.
Sw apdow n
1. Done := false
2. c:= 2 ** r
3. W h i le n o t Done a n d c < = n Do
a. i f c < n a n d Heap [c] < Heap[c+1] t hen c := c+1;
b. i f Heap[r] < Heap[c] t h e n
i. Intercam biar Heap[r] y Heap[c]
ii. r := c
iii. c := 2 ** c
e ls e Done := true
Página 71
H e a p ify
35
15 77
60 22 41
77
60 41
15 22 35
Esto pone al elemento más grande en la raíz, es decir la posición 1 del vector.
Ahora usam os la estrategia de sort de selección y posicionamos
correctam ente al elem ento m ás grande y pasam os a ordenar la sublista
compuesta por los otros 5 elementos
35
60 41
Página 72
60
35 41
15 22
22
35 41
41
35 22
15
15
35 22
15
35 22
35
Página 73
Finalm ente, el árbol de dos elem entos es convertido en un heap e
intercambia do la raíz con la hoja y podado
15
Fo r i = n d o w n t o 2 d o
• I ntercam biar X[1] y X[i], poniendo el m ayor elem ento de la sublista
X[1]...X[i] al fin al de esta.
• Aplicar Sw ap Dow n para convert ir en heap el árbol binario
correspondiente a la sublista almacenada en las posiciones 1 a i - 1 de
X.
6 .7 Otro s Mé to d o s d e Ord e n a m ie n to
Denom inado así por su desarrollador Donald Shell (1959). El ordenam iento
por increm entos decrecientes (o m étodo s h e lls o r t ) es una generalización
del ordenam iento por inserción donde se gana rápidez al perm itir
intercambios entre elem entos que se encuentran m uy alejados.
fo r ( h = 1; h <= n/ 9; h = 3*h + 1 );
fo r ( ; h > 0 ; h/ = 3 )
for ( i = h + 1; i <= n; i+= 1 )
{ v = A[i];
j = i;
Página 74
w h ile ( j > h && A[j- h] > v ) t h e n
{ A[j] = A[j-1];
j - = h;
}
A[j] = v ;
}
Ejem plo: Se tiene un arreglo de 8 elem entos, se ordenan los 4 elem entos de
cada arreglo y luego se m ezclan. El arreglo de 4 elem entos, se ordenan los 2
elem entos de cada arreglo y luego se m ezclan. El arreglo de 2 elem entos,
como cada arreglo sólo tiene n = 1 elem ento, solo se m ezclan.
Página 75
v o i d ordenarMezcla(TipoEle A[], int izq, int der)
{ i f ( izq < der )
{ centro = ( izq + der ) % 2;
ordenarMezcla( A, izq, centro );
ordenarMezcla( A, centro+1, der);
intercalar( A, izq, centro, der );
}
}
v o i d intercalar(TipoEle A[], int a, int c, int b )
{ k = 0;
i = a;
j = c + 1;
n = b - a;
w h ile ( i < c + 1 ) && ( j < b + 1 )
{ if ( A[i] < A[j] )
{ B[k] = A[i];
i = i + 1;
}
e ls e
{ B[k] = A[j];
j = j + 1;
}
k = k + 1;
};
w h ile ( i < c + 1 )
{ B[k] = A[i];
i++;
k++;
};
w h ile ( j < b + 1 )
Página 76
{ B[k] = A[j];
j++;
k++;
};
i = a;
fo r ( k = 0 ; k < n; i++ )
{ A[i] = B[k];
i++;
};
};
Página 77
Cap ítu lo 7
Algo ritm o s d e Bú s qu e d a
7.1 In tro d u cció n
7. 2 Bú s qu e d a Lin e a l
Búsqueda lin eal, tam bién se le conoce com o búsqueda secuen cial.
Supongamos una colección de registros organizados com o una lista lineal. El
algoritmo básico de búsqueda lineal consiste en em pezar al inicio de la lista e
ir a través de cada registro hasta encontrar la llave indicada (k ), o hasta al
final de la lista. Posteriorm ente hay que com probar si ha habido éxito en la
búsqueda.
Página 78
Me jo ras e n la e ficie n cia d e la bú s qu e d a lin e al
1) Mu e s tre o d e a cce s o
3 ) Tra n s p o s ició n
4 ) Ord e n a m ie n to
Página 79
En la función BUSQ_ LINEAL, nótese el uso de la variable booleana
encontrada.
7. 3 Bú s qu e d a Bin a ria
Una búsqueda lineal funciona bastante bien para una lista pequeña. Pero si
se desea buscar el número de teléfono de J orge Perez en el directorio
telefónico de San tiago, no sería sensato em pezar con el prim er nom bre y
continuar la búsqueda nom bre por nom bre. En un m étodo m ás eficiente se
aprovechará el orden alfabético de los nom bres para ir inm ediatam ente a un
lugar en la segunda m itad del directorio.
Página 80
Algo ritm o
7. 4 Árbo le s d e Bú s qu e d a
Son tipos especiales de árboles que los hacen adecuados para alm acenar y
recuperar inform ación. Com o en un árbol binario de búsqueda buscar
inform ación requiere recorrer un solo cam ino desde la raíz a una hoja. Com o
en un árbol balanceado el m ás largo cam ino de la raíz a una hoja es O( log
n). A diferencia de un árbol binario cada nodo puede contener varios
elem entos y tener varios hijos. Debido a esto y a que es balanceado, perm ite
acceder a grandes conjuntos de datos por caminos cortos.
La idea básica de este m étodo consiste en aplicar una función que traduce un
conjunto de posibles valores llave en un rango de direcciones relativas. Un
problem a potencial encontrado en este proceso, es que tal función no puede
ser uno a uno; las direcciones calculadas pueden no ser todas únicas, cuando
R(k 1 )= R(k2 ) . Pero: K1 diferente de K2 decimos q u e h ay u n a c o lis ió n. A dos
llaves diferentes que les corresponda la m ism a dirección relativa se les llam a
s in ó n im o s .
Página 81
Pero el térm ino más usado es el de hashing. Al cálculo que se realiza para
obtener una dirección a partir de una llave se le conoce como fu n ció n
ha sh .
Ve n taja s :
D e s ve n ta ja s:
Co s to s :
Las fu n cio n e s h a s h m á s co m u n e s s o n :
o Residuo de la división
o Método de la Multiplicación
o Medio del cuadrado
o Pliegue
Ha s h in g p o r R e s id u o d e l a Div is ió n
Página 82
La idea de este m étodo es la de dividir el valor de la llave entre un núm ero
apropiado, y después utilizar el residuo de la división como dirección
relativa para el registro (dirección = llave m od divisor).
Mientras que el valor calculado real de una dirección relativa, dados tanto
un valor de llave com o el divisor, es directo; la elección del divisor apropiado
puede no ser tan sim ple. Existen varios factores que deben considerarse para
seleccionar el divisor:
Todas las funciones hash com ienzan a trabajar pr obablem ente cuando el
archivo está casi lleno. Por lo general, el m áxim o factor de carga que puede
tolerarse en un archivo para un rendim iento razonable es de entre el 70 % y
80 %.
Página 83
Entonces podemos :
Ha s h in g p o r M é t o d o d e la M u lt ip lica ció n
En este caso, h( k ) = m ( k A m o d 1) ,
en que 0 < A < 1; el valor de m no es crítico y típicam ente se usa una
potencia de 2 para facilitar el cálculo computacional de la función.
Ha s h in g p o r M e d io d e l Cu a d r a d o
Eje m p lo :
Ha s h in g p o r Plie g u e
Co m p a r a ció n e n t r e la s Fu n cio n e s H a s h
Existen dos m é to d o s bás ico s para determinar dónde debe ser alojado K 2:
S o n d e o lin e a l
Para alm acenar un registro por hashing con sondeo lineal, la dirección no
debe caer fuera del límite del archivo. En lugar de term inar cuando el lím ite
del espacio de dirección se alcanza, se regresa al inicio del espacio y
sondeamos desde ahí. Por lo que debe ser posible detectar si la dirección
Página 85
base ha sido encontrada de nuevo, lo cual indica que el archivo está lleno y
no hay espacio para la llave.
Para la búsqueda de un registro por hashing con sondeo lineal, los valores
de llave de los registros encontrados en la dirección de origen, y en las
direcciones alcanzadas con el sondeo lineal, deberá com pararse con el valor
de la llave buscada, para determ inar si el registro objetivo ha sido localizado
o n o.
Do ble h a s h in g
En esta técnica se aplica una segunda función hash para com binar la llave
original con el result ado del prim er hash. El resultado del segundo hash
puede situarse dentro del m ism o archivo o en un archivo de sobreflujo
independiente; de cualquier m odo, será necesario algún m étodo de solución
si ocurren colisiones durante el segundo hash.
1. En ca d e n a m ie n to d e s in ó n im o s
Cuando un registro debe ser recuperado del archivo, solo los sinónim os
de la llave objetivo son accesados.
Página 86
2. D ire ccio n am ie n to p o r cu be tas
El doble hashing tiende a com portarse casi tam bién com o el sondeo lineal
con factores de carga pequeños (< 0 .5), pero actúa un poco mejor para
factores de carga mayores. Con un factor de carga > 80 %, el sondeo lineal,
por lo general, resulta tener un com portam iento terrible, m ientras que el
doble hashing es bastante tolerable para búsquedas exitosas, pero no así en
búsquedas no exitosas.
7. 6 Bú s qu e d a e n Te xto s
Página 87
Por ejemplo:
Página 88
Sea X la parte del patrón que calza con el texto, e Y la correspondiente
parte del texto, y suponga que el largo de X es j. El algoritm o de fuerza
bruta mueve el patrón una posición hacia la derecha, sin embargo,
esto puede o no puede ser lo correcto en el sentido que los prim eros j-
1 caracteres de X pueden o no pueden calzar los últim os j- 1 caracteres
de Y.
Página 89
Suponiendo que se tiene f(j) precalculado, la implementación del
algoritm o KMP es la siguiente:
in t k =0 ;
in t j=0;
w h ile (k <n && j<m )
{
w h ile (j>0 && texto[k]!=patron[j])
{
j=f[j];
}
if (texto[k+1])==patron[ j+1]))
{
j++;
}
k++;
}
/ / j==m => calce, j el patrón no estaba en el texto
Página 90
Ejemplo:
El análisis descrito es pesim ista. Note que el núm ero total de veces
que el ciclo interior es ejecutado es menor o igual al número de veces
que se puede decrem entar j, dado que f(j)<j. Pero j comienza desde
cero y es siempre mayor o igual que cero, por lo que dicho número es
m enor o igual al núm ero de veces que j es increm entado, el cual es
m enor que n. Por lo tanto, el tiempo total de ejecución es O(n). Por
otra parte, k nunca es decrem entado, lo que im plica que el algoritm o
nunca se devuelve en el texto.
Para esto se debe cum plir que i=f(j). Si bi+1=b j+1, entonces f(j+1)=i+1.
En caso contrario, se reem plaza i por f(i) y se verifica nuevam ente la
condición.
Página 91
El algoritm o resultante es el siguiente (note que es sim ilar al
algoritm o KMP):
Página 92
El m étodo descrito es la base del algoritm o Boy er- M oore, del cual se
estudiarán dos variantes: Horspool y Sunday.
B o y e r- M o o r e - H o r s p o o l ( BMH )
int k =m ;
int j= m ;
w h ile (k <=n && j>=1)
{
if (texto[ k-(m -j)]==patron[ j])
{
j--;
}
else
{
k= k +(m -siguiente(a[k ]));
j=m ;
}
}
/ / j==0 => calce!, j>=0 => no hubo calce.
Página 93
Ejemplo de uso del algoritmo BMH:
Se puede dem ostrar que el tiem po prom edio que tom a el algoritm o
BMH es:
B o y e r- M o o r e -Su n d a y (BMS)
Página 94
¿Es posible generalizar el argum ento, es decir, se pueden utilizar
caracteres m ás adelante en el texto com o entrada de la función
siguiente? La respuesta es no, dado que en ese caso puede ocurrir que
se salte un calce en el texto.
Página 95
Ca p ítu lo 8
Te o ría d e Grafo s
Un grafo (o multigrafo) , es una estructura m uy im portante utilizada en
Inform ática y tam bién en ciertos ram os de Matemáticas, como por ejemplo, en
Investigación de Operaciones. Muchos problem as de difícil resolución, pueden ser
expresados en form a de grafo y consecuentem ente resuelto usando algoritm os de
búsqueda y m anipulación estándar.
Entre las m últiples aplicaciones que tienen estas estructuras podem os m encionar:
• Grafo No Dirigido
En el primer caso, los arcos no tienen una dirección y, por lo tant o, (u,v ) y (v,u )
representan el m ism o arco. En un Gr a fo N o D ir ig id o , dos vértices se dicen
adyacentes si existe un arco que une a esos dos vértices.
En el segundo caso, los arcos tienen una dirección definida, y así (u,v ) y (v,u )
entonces representan arcos diferentes. Un Gr a fo D ir ig id o (o digrafo ) puede
tam bién ser fuertem ente conectado si existe un cam ino desde cualquier vértice
hacia otro cualquier vértice.
Página 96
Ejemplos de grafos (dirigidos y no dirigidos):
G1 = (V1, E1)
V1 = {1, 2, 3, 4} E1 = {(1, 2), (1, 3), (1, 4), (2, 3), (2, 4), (3, 4)}
G2 = (V2, E2)
V2 = {1, 2, 3, 4, 5, 6} E2 = {(1, 2), (1, 3), (2, 4), (2, 5), (3, 6)}
G3 = (V3, E3)
V3 = {1, 2, 3} E3 = {<1, 2>, <2, 1>, <2, 3>}
Página 97
Una aris ta es un conjunto {u, v }, en que u, v ∈V y u ≠ v , y que
representam os com o (u, v ).
Página 98
Un c i c lo es un camino simple y cerrado.
En algunos textos llaman grafo al que aquí se denom ina grafo sim ple,
perm itiendo la presencia de aristas m últiples en los m ultigrafos y de bucles
en los seudografos.
Página 99
Dos vértices son a d ya ce n te s si son extrem os de una m ism a arista. Dos
aristas son a d ya c e n te s si tien en un extrem o com ún. Un vértice y una
arista son in c id e n te s si el vértice es extrem o de la arista. Un vértice es
a is la d o si no tiene otros vértices adyacentes.
Dos grafos G=(V ,E) y G’=(V’,E’) son is o m o rfo s si existe una biyección
f:V àV ’ que conserva la adyacencia. Es decir, ∀ u,v ∈ V, u y v son
adyacentes en G ⇔ f( u) y f( v ) son adyacentes en G’.
8 .2 Re p re s e n ta cio n e s d e Gra fo s
Página 100
8 .2 .1 Ma triz y Lis ta d e Ad ya ce n cia
ma[i,j] =
Conform e observam os, la m atriz de ad yacencias está form ada sigu ien do la
siguiente regla: m a [ i,j] = 1, si i e s a d ya ce n te a j, y 0 e n ca s o
c o n trario. Com o estam os trabajando con un dígrafo, debemos establecer
cual es el origen y cual es el destino. En el ejem plo presentado, el origen está
definid o p or la letra in dicadora de línea. Por ejem plo, A está conectado con
B, m ás n o en sentido contr ario, por eso m a[A,B] es 1 y m a[B,A] es 0 .
Página 101
ma[i,j] =
Lis ta d e Ad yace n c ia s
Para que sea pos ible remodela r un grafo en t iem po de ejecución , se torn a
necesaria la utilización dinám ica de su representa ción. Por eso, la
representación de ad yacen cias en tre vértices puede ser hecha a través de
listas linea les.
Su constr ucción es realizada por un vector dinám ico con lista s encadenada s
form an do un índice de vértices. De cada elem ento de índice parte una lista
encadenada descr ib iendo los vértices adyacentes conectados.
Página 102
La lista encadenad a es form ada por nodos que contien en el dat o del vértice
(let ra) y el puntero para el vértice adyacente a lo indicado en el ín dice (vector
descriptor de vértices). Eventualm ente los nodos pueden exigir otros
campos, tales como marcas de visita al vértice, datos adiciona les para
procesam ien to de la secuencia del grafo, etc.
1 si (i, j) ∈E,
a ij =
0 en otro caso.
La m atriz d e ad yace n cia siem pre es sim étrica porque a ij = aji . La lis ta
d e Ad ya ce n cia es una lista com puesta por vértices y una sublista
conteniendo las aristas que salen de él.
En el caso de las lis tas d e ad yace n cia el espacio ocupado es O(V + E), m uy
distinto del necesario en la matriz de adyacencia, que es de O(V 2 ). La
representación por listas de adyacencia, por tanto, será m ás adecuada para
grafos dispersos.
Este tipo de m atriz representa un grafo a partir de sus aristas. Como exige
muchas veces la utilización de una m atriz m ayor dado que el m étodo de la
matriz de adyacencias, no esta t an utilizada en cu an to a aquella. La m atriz
alo jada deberá te ner dimensiones V x E.
Página 103
m i[i,j] =
8 .3 Re co rrid o s d e Grafo s
• Encontrar ciclos
• Encontrar com ponentes conexas
• Encontrar árboles cobertores
8 .3 .1 Re co rrid o s e n Am p litu d
G π = (V π, E π), en que:
V π = {v ∈ V : π [v ] ≠ NI L} ∪ {s}, y
E π = {( π [v ], v ) ∈ E : v ∈ V π – {s}};
Página 105
BFS(G, s) :
fo r e ach u ∈ V – {s} d o
← BLANCO
color[u]
d[u] ← ∞
π [u] ← N I L
color[s] ← PLOMO;
d[s] ← 0;
π [s] ← NIL
Q ← {s}
w h ile Q ≠ Ø d o
u ← head [Q]
fo r e a ch v ∈ α [u] d o
i f color[v ] = BLANCO th e n
color[v ] ← PLOMO
d[v ] ← d[u] + 1
π [v ] ← u
E NQUEUE(Q, v)
DEQUEUE(Q)
color[u] ← NEGRO
El tiem po total de ejecución de BFS es O(V + E).
A m edida que recorrem os el grafo, irem os num eran do correlativam ente los
nodos encontrados (1,2,...). Suponem os que todos estos núm eros son cero
inicialmente, y utilizamos un contador global n, tam bién inicializado en
cero.
Página 106
• Si quedan vértices no descubiertos, se elige uno com o nuevo vértice
de partida y se repite la búsqueda.
DFS(G) :
fo r e ach u ∈ V d o
color[u] ← BLANCO
π [u] ← N I L
t ←0
fo r e ach u ∈ V d o
i f color[u] = BLANCO th e n
VISITAR(u)
VISITAR(u) :
color[u] ← PLOMO
Página 107
t←t +1
d[u] ← t
fo r e ach v ∈ α [u] d o
i f color[v] = BLANCO th e n
π [v ] ← u
VISITAR(v )
color[u] ← NEGRO
t ←t +1
f[u] ← t
8 .4 Grafo s co n Pe s o s
f: E(G) → R
En general, salvo m ención expresa en contrario, consideram os sólo grafos
con pesos no negativos en las aristas.
ω(H) = ∑ ω(e)
e ∈H
8 .5 Árbo le s
Simplemente, un árbo l es un grafo con exo sin ciclos. Notar que como un
grafo requiere contener un m ínim o de un vértice, un árbol contiene un
m ínim o de un vértice. Tam bién tenem os que un árbol es un grafo sim ple,
puesto arcos y aristas paralelas form an ciclos. Un grafo no conexo que no
contiene ciclos será denominado bo s q u e. En ese caso tenemos un grafo
donde cada componente es un árbol.
Página 108
Árbo le s co be rto re s
Este es un algoritm o del tipo "avaro" ("greedy "). Com ienza inicialm ente con
un grafo que contiene sólo los nodos del grafo original, sin arcos. Luego, en
cada iteración, se agrega al grafo el arco más barato que no introduzca un
ciclo. El proceso termina cuando el graf o está completamente conectado.
Página 109
En este caso, afortunadam ente, se puede dem ostrar que el método "avaro"
logra siem pre encontrar el óptim o global, por lo cual un árbol cobertor
encontrado por esta vía está garantizado que es un árbol cobertor m ínim o.
Una form a de ver este algoritm o es diciendo que al principio cada nodo
constituye su propia com ponente conexa, aislado de todos los demás nodos.
Inicialización: E( H) = Ø
Página 110
Co m p le jid a d d e l Algo ritm o
Eje m p lo :
8 .6 .2 Algo ritm o d e Pr im
Ya que sabem os que al final tenem os que producir un solo árbol, por qué no
intentar hacer com o que el árbol crezca naturalm ente hasta la obtención de
un árbol generador m ínim o? Así, la próxima arista seleccionada sería
siem pre una que se conecta al árbol que ya existe.
Página 111
Dado que el arco es seleccionado de aquellos que parten del árbol ya
construído, la viabilidad está asegurada. Tam bién se puede dem ostrar que el
algoritm o de Prim es co rre cto , es decir que devuelve un árbol de
r ecubrimiento minimal en todos los casos.
Para im plem entar este algoritm o eficientem ente, podem os m antener una
tabla donde, para cada nodo de V- A, almacenamos el costo del arco más
barato que lo conecta al conjunto A. Estos costos pueden cam biar en cada
iteración.
Página 112
Defin ició n : En un grafo con pesos, la d i s t a n c i a entre dos vértices es:
Agrégase v a S .
Página 113
Si cambia t(z), cám biese p red[z] a v .
An á lis is d e la co m p le jid a d
It e r a ció n : Mientras existan arcos e=xz para los que t (z) > t (x) + w (e)
actualizar la etiqueta de z a m in{t (z), t(x)+w (xz)}.
An á lis is d e la co m p le jid a d
Para aplicar este algoritm o, los nodos se num eran arbitrariam ente 1,2,...n. Al
comenzar la iteración k -ésim a se supone que una m atriz D[ i,j] con tien e la
distancia m ínim a entre i y j medida a través de caminos que pasen sólo por
nodos interm edios de num eración <k .
Estas distancias se comparan con las que se obtendrían si se pasara una vez
por el nodo k , y si de esta m anera se obtendría un cam ino m ás corto
entonces se prefiere este nuevo cam ino, de lo contrario nos quedam os con el
nodo antiguo.
Página 115
Para inicializar la m atriz de distancias, se utilizan las distancias obtenidas a
través de un arco directo entre los pares de nodos (o infinito si no existe tal
arco). La distancia inicial entre un nodo y sí mismo es cero.
que
An á lis is d e la co m p le jid a d
Se deben construir n m atrices de tam año nxn y cada elem ento se halla en
tiempo constante. Por tanto, la complejidad del algoritm o es O(n 3)
Eje m p l o :
Página 116
Valo re s In ici al e s d e d( i ,j)
V1 V2 V3 V4 V5 V6
0 1 3 X 1 4
V1
V2 1 0 1 X 2 X
V3 3 1 0 3 X X
V4 X X 3 0 1 2
V5 1 2 X 1 0 2
V6 4 X X 2 2 0
Obs: X significa que un v értice cua lquiera n o tiene ligazón directa con otro .
Me n o r Ca m in o
V1 V2 V3 V4 V5 V6
0 1 2 2 1 3
V1
V2 1 0 1 3 2 4
V3 2 1 0 3 3 5
V4 2 3 3 0 1 2
V5 1 2 3 1 0 2
V6 3 4 5 2 2 0
Página 117
Cap ítu lo 9
Co m ple jid ad Co m pu tacio n al
9 .1 In tro d u cció n
En los capítulos anteriores, hemos visto que los algoritm os cuya com plejidad
es descrita por una función polinom ial pueden ser ejecutados para entradas
grandes en una cantidad de tiem po razonable, m ientras que los algoritmos
exponenciales son de poca utilidad excepto para entradas pequeñas.
En esta sección se tratarán los problem as cuya com plejidad es descrita por
funciones exponenciales, problemas para los cuales el mejor algoritmo
conocido requeriría de muchos años o centurias de tiempo de cálculo para
entradas moderadamente grandes.
9 .3 Pro ble m as N P Co m p le to s
Página 118
Una definición form al de N P- c o m p le to es:
Este teorem a indica, por un lado, que tan valioso sería encontrar un
algoritm o polinom ialm ente acotado para cualquier problem a NP- completo
y, por otro, que tan improbable es que tal algoritmo exista pues hay muchos
problem as en N P para los cuales han sido buscados algoritm os
polinomialmente acotados sin ningún éxito.
Actualm ente para probar que un problem a es NP- completo, es suficiente con
probar que algún otro problema NP- completo es polinomialmente reducible
a éste debido a que la relación de reducibilidad es transitiva. La lógica de lo
dicho es la siguiente:
Por ejem plo, el problem a del cir cu it o H a m ilt o n ia n o es: dado un grafo
G=(V, E), es G Ham iltoniano. Y el com plem ento del problem a del circuito
Hamiltoniano es: dado un grafo G=(V, E), es G no Hamiltoniano.
Página 119
únicamente con la sustitución de no por si cuando se obtiene una solución
afirm ativa y viceversa. El siguiente teorem a expr esa lo mencionado
Los m ism os argum entos no pueden ser aplicados para dem ostrar que un
problema en N P está tam bién en NP. Esto motiva la siguiente definición:
La clase co. N P es la clase de todos los problem as que son com plem ento de
problem as en NP.
Decir que el com plem ento de todos los problem as en N P está tam bién en NP
es equivalente a decir que NP = c o- N P. Sin em bargo, hay razones para
creer que N P ¹ c o-N P . La evidencia es tan circunstancial com o la que se
estableció para la conjetura de que P¹ N P : Muchos investigadores han
tratado por largo tiem po, sin éxito, de construir pruebas sucintas para el
complemento del problema del circuito Ham iltoniano, así com o para
muchos otros problem as. Sin em bargo, puede ser m ostrado (com o con P¹
NP ) que si la conjetura es verdadera, está en los problem as N P -c o m p le to
testificar su validez.
Página 120
9 .4 Pro ble m as In tratable s
Si trabajas para una com pañía que está pensando entrar a una nueva era
globalizadora de gobierno y tu jefe te propone que obtengas un m étodo para
determ inar si o no cualquier conjunto dado de especificaciones para un
nuevo com ponente pueden ser satisfechas de alguna m anera y, si es así, se
deberá construir el diseño que satisfaga dichas expecificaciones. La realidad
es que después de un tiem po com probarás que n o hay m anera de obtener tal
método. De modo que tendrás dos alternativas:
Sin embargo, es muy probable que a tu jefe esta característica del problema
le tenga sin cuidado y, de todas m aneras, te corran o tengas que renunciar.
Es decir regresarás a las alternativas: 1 y 2 antes citadas.
Una situación más prom etedora, es tratar de probar que el problem a no solo
es tan difícil que no se puede resolver, sino que además pertenece a una
clase de problem as tales que cientos y m iles de personas fam osas e
inteligentes, tam poco pudieron resolver. Aún así, no estam os m uy seguros
aún de tu permanencia en la compañ ía!.
Página 121
obtienes seas elim inado de la nom ina de la com pañía, estoy seguro, en que
pensarías en todos los recursos posibles (horas- hom bre para construir el
algoritm o, tiem po de sintonización, tiem p o requerido para obt ener una
solución, núm ero de procesadores em pleados, cantidad de m em oria
requerida, etc.). Para sim plificar un poco la tarea, considerarem os que tu
jefe te perm ite que la eficiencia la m idas sobre un solo recurso: El tiem po de
ejecución. Pensem os por un m om ento que solo se tiene una sola m áquina de
modo que el número de procesadores no requiere de un análisis. ¿Qué le
pasó a tu jefe? ¿De pronto se volvió com prensivo contigo? En realidad los
otros parám etros los ha tom ado en cuenta com o costo directo del programa
en cuestión. Esto es en realidad lo que se hace en teoría de com plejidad. Para
el análisis de com plejidad, se considera por lo general la eficiencia sobre el
tiempo, para un solo procesador en cómputo secuencial; para cómputo
paralelo se considera tam bién el núm ero de procesadores.
Los algorim os han sido divididos com o buenos o m alos algoritm os. La
comunidad computacional acepta que un buen algoritmo es aquél para el
cual existe un algoritm o polinom ial determ inístico que lo resuelva. Tam bién
se acepta que un m al algoritm o es aquel para el cual dicho algoritm o
sim plem ente no existe. Un problem a se dice intratable, si es m uy difícil que
un algoritmo de tiem po no polinom ial lo resuelva. No obstante, esta
clasificación de algoritm os en buenos y m alos puede resultar a veces
engañosa, ya que se podría pensar que los algoritm os exponenciales no son
de utilidad práctica y que habrá que utilizar solamente algoritmos
polinomiales. Sin embargo se tiene el caso de los m étodos sim plex y Branch
and Bound, los cuales son m uy eficientes para m uchos problem as prácticos.
Desafortunadamente ejemplos como estos dos son raros, de modo que es
preferible seguir empleando como regla de clasificación en buenos y malos
algoritm os, la que lo hace dependiendo de si son o no polinom iales; todo
esto con la prudencia necesaria.
La teoría de la N P-Com pletés fué presentada inicialm ente por Cook desde
1971. Cook p r obó que un problema particular que se estudia en Lógica (no
necesitam os ahora estudiarlo) y que se llama "El Pro ble m a d e
Satis factibilid ad ", tenía la propiedad de que cualquier problem a que
perteneciera a la clas e N P, podía ser reducido a él a través de una
transformación de tipo polinomial. Esto significaba que si el pr oblem a de
satisfactibilidad podía ser resuelto en tiem po polinom ial, todos los
problem as No Polinom iales tam bién podrían resolverse en tiem po
polinomial, lo que significaría que la clase NP dejaría de existir!!.
Página 122
9 .5 Pro ble m as d e D e cis ió n
Página 123
rápidam ente (en tiem po polinom ial) para ver si ésta es realm ente una
solución, es decir, si ésta satisface todos los requerimientos del problema.
Una solución propuesta puede ser descrita por una cadena de símbolos a
partir de algún conjunto finito. Sim plem ente se necesita alguna convención
para describir grafos, conjuntos, funciones, etc. usando estos sím bolos. El
tam año de la cadena es el núm ero de sím bolos en ella. Chequear una
solución propuesta incluye che quear que la caden a tenga sentido (esto es,
que tenga una sint áxis correcta) com o una descripción del tipo de objeto
requerido, también como chequear que ésta satisface el criterio del
problema.
Norm alm ente cada vez que se corre un algoritm o con la m ism a entrada se
obtiene la m ism a salida. Esto no ocurre con algoritm os no determ inísticos;
para una entrada particular x, la salida a partir de una corrida puede diferir
de la salida de otra debido a que ésta depende de s . aunque los algoritm os no
determinísticos no son realistas (algoritmos útiles en la práctica), ellos son
útiles para clasificar problem as.
Página 124
De esta form a se puede decir que: N P es la clase de problem as de decisión
para los cuales hay un algoritm o no determ inístico acotado
polinom ialm ente (el nom bre de N P viene de no determ inístico
polinom ialm ente acotado).
Página 125
Biblio grafía
1. AHO, Alfred H., Hopcroft, J ohn E. y Ullman, J effrey D. Estructuras de
Datos y Algoritm os, Addison- Wesley Iberoam ericana, 1988.
5. BRASSARD, G., Bratley, P., Fundam entals of Algorithm ics. Prentice Hall,
1995.
13. PEÑA M., Ricardo. Diseño de program as. Form alism o y abstracción.
Prentice- Hall, 1998.
Página 126