Академический Документы
Профессиональный Документы
Культура Документы
12 de septiembre de 2005
2
Objetivos
3
4
Prefacio
5
6
I Anlisis de algoritmos 11
1. Introduccin 13
1.1. Conceptos Bsicos . . . . . . . . . . . . . . . . . . . . . . . . 14
1.1.1. Denicin de algoritmo . . . . . . . . . . . . . . . . . . 14
1.2. Complejidad de algoritmos . . . . . . . . . . . . . . . . . . . . 15
1.3. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2. Comportamiento... 29
2.1. Dominio asinttico . . . . . . . . . . . . . . . . . . . . . . . . 29
2.2. Notacin de orden . . . . . . . . . . . . . . . . . . . . . . . . . 36
2.3. Interpretacin de los conceptos enunciados . . . . . . . . . . . 41
2.4. Dominio asinttico con lmites . . . . . . . . . . . . . . . . . . 43
2.5. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
7
8 NDICE GENERAL
4.5. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
11
Captulo 1
Introduccin
13
14 CAPTULO 1. INTRODUCCIN
ecientes pero confusos, puede suceder que despus no sea posible darle el
mantenimiento adecuado.
Los recursos que consume un algoritmo pueden estimarse mediante he-
rramientas tericas y constituyen, por lo tanto, una base conable para la
eleccin de un algoritmo. En las Ciencias de la Computacin, la actividad
dedicada a determinar la cantidad de recursos que consumen los algoritmos
se le denomina anlisis de algoritmos.
La primera seccin de este captulo presenta los conceptos que nos permi-
tirn introducir despus, en secciones posteriores, las tcnicas utilizadas para
la medicin de los recursos que consume un algoritmo y las bases tericas
sobre las que estas se fundamentan.
no lo es.
Si un conjunto de instrucciones tiene todas las caractersticas de un al-
goritmo, excepto ser nito en tiempo se le denomina proceso computacional.
Los sistemas operativos son el mejor ejemplo de proceso computacional, pues
estn diseados para ejecutar tareas mientras las haya pendientes, y cuando
stas se terminan, el sistema operativo entra en un estado de espera, hasta
que llegan ms, pero nunca termina.
Se asume que un problema tiene solucin algortmica si adems de que el
algoritmo existe, su tiempo de ejecucin es razonablemente corto. Por ejem-
plo, es posible disear un algoritmo para jugar ajedrez que triunfe siempre: el
algoritmo elige la siguiente tirada examinando todas las posibles secuencias
de movimientos desde el tablero actual hasta uno donde sea claro el resultado
y elige la tirada que le asegure el triunfo; el pequeo inconveniente de este
algoritmo es que dicho espacio de bsqueda se ha estimado en100040 tableros
por lo que puede tardarse miles de aos en tomar una decisin. Por lo tanto,
para nes prcticos se considera que si un problema tiene una solucin que
toma aos en computar, dicha solucin no existe.
Considrese ahora el problema de ordenar un conjunto de valores, si el
conjunto tiene 2 elementos es ms fcil resolverlo que si tiene 20, anloga-
mente un algoritmo que resuelva el problema tardar ms tiempo mientras
ms grande sea el conjunto y requerir una cantidad de memoria mayor para
almacenar los elementos del conjunto.
En general la cantidad de recursos que consume un algoritmo para re-
solver un problema se incrementa conforme crece el tamao del problema.
Dependiendo del problema en particular, uno o varios de sus parmetros ser
elegido como tamao del problema. Haciendo una cuidadosa observacin, es
relativamente fcil efectuar una eleccin atinada.
En la Figura 1 se presenta una serie de problemas y una sugerencia acerca
del parmetro que se puede elegir como tamao del problema.
a) Celdas estticas. Son las que se utilizan en todo el tiempo que dura la
ejecucin del programa, por ejemplo, las variables globales.
una variable simple, sin importar el tipo al que pertenezca. Las variables que
tengan valores de un tipo simple ocuparn una celda de memoria, mientras
que a las variables de tipos compuestos se les asignan tantas celdas como
requieran los elementos que las componen.
El tiempo que emplea un algoritmo en ejecutarse reeja la cantidad de
trabajo realizado, as, la complejidad temporal da una medida de la cantidad
de tiempo que requerir la implantacin de un algoritmo para resolver el
problema, por lo que se le puede determinar en forma experimental. Por
ejemplo, para encontrar el valor de la funcin complejidad de un algoritmo
A que se codica un lenguaje de programacin L, se compila utilizando el
compilador C y se ejecuta en la mquina M, damos algunas entradas al
programa y medimos el tiempo de procesador empleado para resolver los
casos del problema.
Proceder de esta manera presenta, entre otros, el inconveniente de que
los resultados obtenidos dependen de:
a) las entradas proporcionadas,
b) la calidad del cdigo generado por el compilador utilizado, y
c) de la mquina en que se hagan las corridas.
Para evitar que estos factores se reejen en el clculo de la funcin com-
plejidad, el anlisis temporal (y el espacial) se har nicamente con base al
algoritmo escrito en pseudocdigo. Como el pseudocdigo no se puede ejecu-
tar para medir la cantidad de tiempo que consume, la complejidad temporal
no se expresar en unidades de tiempo, sino en trminos de la cantidad de
operaciones que realiza. Cada operacin requiere cierta cantidad constante
de tiempo para ser ejecutada, por esta razn si se cuenta el nmero de o-
peraciones realizadas por el algoritmo se obtiene una estimacin del tiempo
que le tomar resolver el problema.
Dado un algoritmo, se puede determinar que tipos de operaciones utiliza
y cuantas veces las ejecuta para una entrada especca. Observemos este
procedimiento en el siguiente ejemplo.
c) Asignacin al ndice i
d) Asignacin a la funcin
f ) Incremento al ndice i
func Producto2Mayores(A, n)
comienza
si A[1] > A[2] entonces
mayor1 A[1];
mayor2 A[2];
otro
mayor1 A[2];
mayor2 A[1];
is
i 3;
mientras i n haz
si A[i] > mayor1 entonces
mayor2 mayor1;
mayor1 A[i];
otrosi A[i] > mayor2 entonces
mayor2 A[i];
is
i i + 1;
zah
Producto2Mayores mayor1 mayor2;
termina.
Algoritmo 2: Producto de los valores ms grandes de una lista de nmeros.
a) Peor caso
ft (n) = max({O1 , O2 , O3 , . . . , Ok })
b) Mejor caso
ft (n) = mn({O1 , O2 , O3 , . . . , Ok })
c) Caso medio
k
X
ft (n) = Oi P (i)
i=1
Anlisis Temporal
i) Mejor caso: ocurre cuando el valor es el primer elemento del arreglo.
ft (n) = 1
Anlisis Temporal
i) Mejor caso: ocurre cuando el arreglo est ordenado ascendentemente
(en cada iteracin slo hace la primera comparacin)
ft (n) = 1 + (1 (n 2)) = n 1
ii) Peor caso: el arreglo est ordenado de manera descendente (se hacen
dos comparaciones por iteracin en el ciclo)
ft (n) = 1 + (2 (n 2)) = 2n 3
|U |
iii) Caso medio: en este problema se tienen n! casos, donde U es
n
el conjunto del que se extraen los elementos del arreglo.
5 (5n 7)
ft (n) = 1 + (n 2) =
3 3
comparaciones.
1.3. Ejercicios
Ejercicio 1.1 La regla para multiplicar las matrices A y B de dimensin
2 2, y obtener C = AB, es:
c11 = a11 b11 + a12 b21 c12 = a11 b12 + a12 b22
c21 = a21 b11 + a22 b21 c22 = a21 b12 + a22 b22
N = 2q0 + r0
q0 = 2q1 + r1
q1 = 2q2 + r2
..
.
qk1 = 2qk + rk
proc RepresentacinBinaria(N,N2)
comienza
y N;
i 0;
mientras (y 6= 0) haz
si par (y) entonces
r[i] 0
otro
r[i] 1;
y y1
is
y y/2;
i i + 1;
zah
k i 1;
N 2 r[0...k];
termina.
Algoritmo 3: Representacin binaria.
iii) Muestre que si elige el valor del nmero N como el tamao del proble-
ma, el nmero de operaciones que requiere el algoritmo es b 10
3
log N c+1.
proc BuscaMnimo(X)
comienza
b X[1];
para j 2 a n haz
si (X[j] < b) entonces
b X[j]; (* b = min{x1 , x2 , . . . , xn } *)
is
zah
termina.
Algoritmo 4: Valor mnimo.
Ejercicio 1.7 Dada una lista ordenada con representacin ligada sencilla,
escriba un algoritmo para insertar un elemento y obtenga la complejidad tem-
poral del mismo.
29
30 CAPTULO 2. COMPORTAMIENTO...
En otros trminos, podemos decir que si una funcin domina a otra, su velo-
cidad de crecimiento es mayor o igual. Si esas funciones estn representando
el consumo de recursos de la computadora, obviamente la funcin dominada
crecer a lo ms a la misma velocidad de la otra.
5
m|f (n)|
|g(n)|
4
0
0 1 2 4 5
k
Figura 3: Representacin grca del concepto de dominio asinttico.
Puesto que las funciones complejidad son funciones con dominio N, los
nmeros naturales, y contradominio R, los nmeros reales; los conceptos y
las propiedades de dominio asinttico proporcionan una manera conveniente
de expresarlas y manipularlas.
Con la intencin de aclarar la denicin, a continuacin se presentan
algunos ejemplos.
|n| m|n3 |, n k,
2.1. DOMINIO ASINTTICO 31
simplicando
|n2 | > m
n2 > m
n > m para al menos una n k
si se toma n > max ( m, k) ambas desigualdades se cumplen,
f no domina asintticamente a g.
|g(n)| m|c||g(n)|, n k
32 CAPTULO 2. COMPORTAMIENTO...
|g(n)| mc|g(n)|,
tomando m = 1c ,
1
|g(n)| c|g(n)|, n k
c
y k = 0,
|g(n)| |g(n)|, n 0
f d.a. g.
|cg(n)| m|g(n)|, n k
esto es,
c|g(n)| m|g(n)|, n k
tomando m = c y k = 0,
c|g(n)| c|g(n)|, n 0
g d.a. f.
Ejemplo 8 Sean
1 si n es par
f (n) = n y g(n) =
n3 si n es impar
1
Entonces para toda n impar > max (m 2 , k) las desigualdades se cum-
plen,
f no-d.a. g.
ii) Tambin se debe demostrar que g no-d.a. f. Esto es
m 0, k 0; n k tal que |f (n)| > m|g(n)|
Tomando el caso para el cual n es par, se obtiene
|n| > m|1| para alguna n k
|n| > m
y es reexiva y transitiva.
f M f d.a.f.
|g(n)| m1 |f (n)|, n k1
|h(n)| m2 |g(n)|, n k2
por lo que
|h(n)| |g(n)|, n k
|c + n| m|n|, n k
Si m = 2 y k = c, se cumple que
|c + n| 2|n|, n c
Demostracin 3 Tenemos
a) f es O(f ); dado que f d.a. f f es O(f ).
b) f es O(g) m1 0 y k1 0 tales que
|f (n)| m1 |g(n)|, n k1 .
con c R.
38 CAPTULO 2. COMPORTAMIENTO...
Si tomamos m = |c|m1
|f (n)| m1 |g(n)|, n k1
|h(n)| m2 |g(n)|, n k2
Sustituyendo en la suma
Demostracin 5 Tenemos,
f esO(h1 ), i.e. m1 0 y k1 0 tales
(f + g) es O(max(h1 , h2 ))
1
f1 (n) = + 63 es O(1).
n2
1
f2 (n) = rn + + kn log n es O(n log n).
n
f3 (n) = .6n3 + 31n + 468 es O(n3 ).
n
O(c )
O(n log n)
O(log n)
O(1)
O(n)
c
O(n )
O(n!)
entonces
f (n) f 0 (n)
lm = lm 0
n g(n) n g (n)
2.5. Ejercicios
Ejercicio 2.1 Determine cuales de las siguientes funciones dominan asin-
tticamente a las otras.
n, si n es par
i) f1 (n) =
n, si n es impar
n+1
ii) f2 (n) =
n+1
1
iii) f3 (n) = 3n2 log n + n2
v) f5 (n) = log n2
Ejercicio 2.2 Para que valores de n se satisface la expresin 10n log n >
2n2 ?
Ejercicio 2.3
1. Agrupe las siguientes funciones; dos funciones f y g pertenecen al mis-
mo grupo si y slo si se dominan asintticamente.
f1 (n) = n f7 (n) = 2n
f2 (n) = n3 f8 (n) = log n
f3 (n) = n log n f9 (n) = n n3 + 9n5
f4 (n) = n2 + log n f10 (n) = n2
1
f5 (n) = n 2 + log n f11 (n) = ln n
f6 (n) = 3n! f12 (n) = (log n)2
Ejercicio 2.4 Encuentre una funcin g(n) (de la forma AB ), tal que f (n)
sea O(g(n)), para cada uno de los siguientes casos:
i) f (n) = C(n, 2)
5n3 + 6
ii) f (n) =
n+2
(n2 + 7)3n
iii) f (n) =
2n
iv) f (n) = n!
Ejercicio 2.5 Muestre que para cualesquiera constantes positivas c0 , c1 , c2 , . . . , ck
la expresin c0 + c1 n + c2 n2 + + ck nk es O(nk ). Pruebe que la expresin
no es O(nk1 ).
Ejercicio 2.6 Cuando decimos que una expresin f (n) es O(log n), porqu
no es necesario especicar la base del logaritmo?
Ejercicio 2.7 Probar las siguientes aseveraciones, y vericar que cada una
de las contenciones es propia.
i) O(n) O(n log n)
ii) O(n log n) O(nd ), d > 1
iii) O(cn ) O(n!), c > 1
Ejercicio 2.8 Demostrar los siguientes resultados.
i) Sean f, g funciones con dominio N. Entonces
a) f es O(g) y g es O(f ) O(f ) = O(g).
b) Si f es O(g) y g es O(h) f es O(h).
ii) Sean c, d R, donde 0 < c < d, entonces O(cn ) O(dn ) y la conten-
cin es propia.
Ejercicio 2.9 Pruebe que O(log n) = O(log(n + k)), n, k > 0.
Ejercicio 2.10 Pruebe que R, 0 i n, ik es O(nk+1 ), si k N; si no es
el caso, demuestre lo contrario.
Ejercicio 2.11 Mostrar que para todas constantes a, b > 0 (log2 n)a es O(nb ).
48 CAPTULO 2. COMPORTAMIENTO...
Captulo 3
Anlisis de Algoritmos Iterativos
3.1. Introduccin
De acuerdo a los conceptos enunciados, debe resultar claro que el anlisis
de un algoritmo precisa de un conteo de los recursos consumidos. En un algo-
ritmo sin llamadas recursivas, una vez seleccionados el tamao del problema
y la operacin bsica, el anlisis se realiza utilizando tcnicas tradicionales
de conteo (sucesiones, progresiones aritmticas, sumas, etc.) y el concepto de
orden de una funcin.
En el ejemplo siguiente se ilustra el anlisis temporal de un algoritmo
iterativo de ordenacin.
Anlisis Temporal
a) Mejor Caso: Ocurre cuando el arreglo est ordenado,
49
50 CAPTULO 3. ANLISIS DE ALGORITMOS ITERATIVOS
te,
n
X
ft (n) = n (i + 1)
i=2
Xn
=n i + (n 1)
i=2
n+1
=n 1 + (n 1)
2
n2 + 3n 4
ft (n) = , es O(n2 ).
2
i+1
1 1X
(2 + 3 + 4 + + (i + 1)) = j
i i j=2
1 (i + 1)(i + 2)
= 1
i 2
(i + 1)(i + 2) 2
=
2i
i2 + 3i
=
2i
i+3
= asignaciones.
2
3.1. INTRODUCCIN 51
n
X i+3
ft (n) =
i=2
2
1X
= n(i + 3)
2
1 n(n + 1)
= 1 + 3(n 1)
2 2
1
= [n(n + 1) 2 + 6(n 1)]
4
1 2
= (n + n 2 + 6n 6)
4
n2 7n
= + 2 es O(n2 ).
4 4
proc InsercinDirecta(ini, n, A)
comienza
para i = ini + 1 a n haz
comienza
x A[i];
j i 1;
mientras (j ini) (A[j] > x) haz
A[j + 1] A[j];
j j 1;
zah
A[j + 1] x;
termina
zah
termina.
Algoritmo 5: Ordenacin por Insercin Directa
52 CAPTULO 3. ANLISIS DE ALGORITMOS ITERATIVOS
3.2.1. Secuencia
Sea {I1 , I2 } una secuencia de instrucciones, con complejidades O(f ) y
O(g) respectivamente, entonces el orden de la secuencia es, por el Teorema
6, O(max(f, g)). Ver Figura 5.
?
I1
O(f )
?
I2
O(g)
?
@
@
V C @ F
@
? @ ?
@
I1 I2
O(f ) O(g)
3.2.3. Iteracin
Si el bloque de complejidad O(f ) se realiza n veces, deducimos que la ite-
racin es O(nf (n)). En muchas ocasiones la complejidad del bloque depende
de algn ndice. Si la complejidad es O(f (i)) para 1 i n la complejidad
Xn
de la iteracin es f (i). Ver gura 7.
i=1
Se hizo ya el anlisis de tres algoritmos iterativos, ahora utilizando las
tcnicas que hemos descrito analizaremos paso a paso un algoritmo sencillo
que requiere el conocimiento de conceptos elementales de algebra lineal.
Ejemplo 14 Sean A y B dos matrices de nn con entradas reales. Calcular
la matriz producto C = AB. El algoritmo que se utilizar, es implicado por
la denicin del producto de matrices, donde la matriz C tiene la forma :
n
X
cij = aik bkj , i, j [1, n].
k=1
54 CAPTULO 3. ANLISIS DE ALGORITMOS ITERATIVOS
-
@
@
I1 V @
O(f ) @
C
@
@
F
?
proc Matriz-Producto(n, A, B)
comienza
para i = 1 a n haz I1
para j = 1 a n haz I2
C[i, j] 0; I3
para k = 1 a n haz I4
C[i, j] C[i, j] + A[i, k] B[k, j]; I5
zah
zah
zah
termina.
Algoritmo 6: Producto de matrices
3.2. ANLISIS POR BLOQUES 55
Anlisis Temporal
De manera informal podemos decir que para obtener una entrada de cij
se hacen n multiplicaciones, como la matriz C tiene n n entradas se tiene
que:
ft (n) = n(n2 ) = n3 es O(n3 ).
Nosotros podemos obtener el resultado anterior, si asignamos un orden
(segn su comportamiento asinttico) a cada bloque de instrucciones segn
las estructuras de control:
Anlisis Espacial
n
X
Ejemplo 15 Sea A un vector de coecientes y sea Pn (z) = A[i]z i un po-
i=0
linomio de grado n, evaluado para un argumento real z. Encontrar la funcin
complejidad, temporal y espacial, para el algoritmo que evala Pn (z).
Anlisis Temporal
a) I3 es de orden O(1),
ft (n) es O(n).
3.3. EJERCICIOS 57
Anlisis Espacial
3.3. Ejercicios
Ejercicio 3.1 Escriba un algoritmo que dado un conjunto de nmeros en-
teros diferentes y ordenados, devuelva el primer valor x tal que A[x] = x.
Calcule la complejidad espacial y temporal del algoritmo.
1. k divide a m y n,
func Mximo-Comn-Divisor(m, n)
comienza
a max(n, m);
b mn(n, m);
r 1; r es el residuo
mientras (r > 0) haz
r a mod b;
a b;
b r;
zah
Mximo-Comn-Divisor a;
termina.
Algoritmo 8: Mximo comn divisor de dos enteros
58 CAPTULO 3. ANLISIS DE ALGORITMOS ITERATIVOS
4.1. Introduccin
La recursividad es un fenmeno que se presenta en muchos problemas de
forma natural, delegando la solucin de un problema en la solucin de otro
ms pequeo. Los siguientes son dos ejemplos clsicos:
Como se observa existen situaciones en las cuales las cantidades que que-
remos estudiar pueden ser modeladas matemticamente por funciones de-
nidas en forma recursiva. Una ecuacin que expresa una funcin de este tipo
recibe el nombre de ecuacin recurrente, si adems estn dados uno o ms
valores de n especcos, lo que se tiene es un sistema recurrente.
Los algoritmos, al igual que las funciones, tambin pueden ser denidos
recursivamente, de hecho tienen mucho en comn pues ambos aceptan un
conjunto de entradas, generan salidas correspondientes a las entradas y tie-
nen una regla o conjunto de reglas para obtener las salidas a partir de las
entradas. As que muchos conceptos que se aplican a funciones se aplicarn,
frecuentemente, tambin a los algoritmos.
59
60 CAPTULO 4. ANLISIS DE ALGORITMOS RECURSIVOS
func Factorial(n)
comienza
si (n = 0) entonces
Factorial 1;
otro
Factorial n F actorial(n 1);
is
termina.
Algoritmo 9: Factorial de un nmero
f (0) = 0.
f (1) = f (0) + 1 = 1
f (2) = f (1) + 1 = 2
f (3) = f (2) + 1 = 3
f (4) = f (3) + 1 = 4
f (n) = f (n 1) + 1
f (n) f (n 1) = 1
4.2. SISTEMAS RECURRENTES 63
expandemos la recurrencia
f (n) f (n 1) = 1
f (n 1) f (n 2) = 1
f (n 2) f (n 3) = 1
..
.
f (2) f (1) = 1
f (1) f (0) = 1
f (0) = 0
f (n) = 1| + 1 +{z + 1}
n veces
f (n) = n
P (n) nP (n 1) = 0
nP (n 1) n(n 1)P (n 2) = 0
..
.
n(n 1)(n 2) . . . 2 P (1) n(n 1)(n 2) 1 P (0) = 0
P (0) = 1
64 CAPTULO 4. ANLISIS DE ALGORITMOS RECURSIVOS
f (1) = a,
f (n) = cf (n 1) + b
f (n) cf (n 1) = b
cf (n 1) c2 f (n 2) = cb
c2 f (n 2) c3 f (n 3) = c2 b
..
.
c f (2) c f (1) = cn2 b
n2 n1
sabemos que
n
X
ci = n + 1, si c = 1
i=0
n
X cn+1 1
ci = , si c 6= 1
i=0
c1
entonces si c = 1
f (n) = a + b(n 1)
y si c 6= 1
b(cn1 1)
f (n) = cn1 +
c1
A continuacin presentamos un teorema basado en lo anterior.
entonces
i) Si c = 1 entonces f (n) = a + b(n 1)
b(cn1 1)
ii) Si c > 1 entonces f (n) = cn1 a + .
c1
A continuacin ilustramos el uso del teorema anterior para resolver proble-
mas donde el sistema recurrente resultante se ajusta a la forma especicada
por el teorema.
Anlisis Temporal
La relacin de recurrencia esta dada por
ft (1) = 1
ft (n) = 2f (n 1) + 1
4.2. SISTEMAS RECURRENTES 67
n1 2n1 1
ft (n) = 2 + = 2n1 + (2n1 1) = 2n 1 es O(2n ).
1
Hasta ahora slo hemos analizado algoritmos que utilizaban memoria es-
ttica, los Algoritmos 10 y 11, por ser recursivos, requieren espacio para al-
macenar los registros de activacin de las diferentes llamadas, de tal manera
que mientras ms anidacin de ambientes exista, mayor cantidad de memo-
ria consumirn. Los siguientes ejemplos ilustran el clculo de la complejidad
espacial dinmica para algoritmos recursivos.
Anlisis Espacial
El algoritmo recibe 4 parmetros y necesita una localidad de memoria
adicional para almacenar la direccin de retorno. Para resolver un problema
de tamao n > 1, el algoritmo debe almacenar los valores de las variables y su
direccin de retorno, por lo tanto necesitar 5 celdas de memoria dinmica,
ms las que consuma para resolver un problema de tamaon1. Observamos
que hace 2 llamadas recursivas con argumento n1, pero cuando el primero de
ellos termina, la memoria consumida se libera y es reutilizada por la segunda
llamada, entonces podemos expresar la funcin complejidad espacial por el
siguiente sistema:
fe (1) = 5, pues para n = 1 no se hacen llamadas recursivas
fe (n) = fe (n 1) + 5
Para aplicar el Teorema 9, hacemos a = 5, b = 5, c = 1 y obtenemos
Anlisis Espacial
f (1) = c
n
f (n) = af ( ) + c
b
para argumentos de la forma n = bk , donde k N y k > 0, se tienen las
siguientes soluciones al sistema
i) Si a = 1 entonces f (n) = c(logb n + 1)
4.2. SISTEMAS RECURRENTES 69
c(anlogb a 1)
ii) Si a 6= 1 entonces f (n) =
a1
Demostracin 6 Sea el sistema
f (1) = c
n
f (n) = af ( ) + c
b
con n = bk y k 1 se tiene
f (bk ) af (bk1 ) = c
af (bk1 ) a2 f (bk2 ) = ac
..
.
ak1 f (b1 ) ak f (b0 ) = ak1 c
f (bk ) = c + ac + + ak1 c + ak c
k
X
=c ai
i=0
c(ak+1 1)
f (bk ) =
a1
c
= (aak 1)
a1
70 CAPTULO 4. ANLISIS DE ALGORITMOS RECURSIVOS
pero
logb n
alogb n = blogb a
= blogb n logb a
= blogb a logb n
logb a
= blogb n
= nlogb a
entonces
c
f (n) = (aalogb n 1)
a1
c
f (n) = (anlogb a 1)
a1
La forma cerrada para el sistema recurrente que enuncia el teorema slo
es vlida para argumentos de la forma bk , con b > 1 y k > 0. Qu orden
podemos asociarle a la funcin en su forma cerrada?, dado que una funcin es
de orden g si g la domina asintticamente y la denicin de d.a. implica que
el dominio se d en todos los naturales a partir de algn valor k especco, y
el teorema no asegura el dominio en un rango continuo de los naturales, no
es posible asociarle un orden a la funcin. Sin embargo, podemos enunciar
la siguiente denicin que nos caracteriza el comportamiento de una funcin
en un subconjunto de los naturales.
Denicin 4 Sean f y g funciones de N a R y S un subconjunto innito de
N. Se dice que f es O(g) en S si existen m 0, k 0 tales que
|f (n)| m|g(n)|, n S y n k.
En el marco de la denicin anterior diremos que si f cumple con las
restricciones planteadas en el Teorema 10, entonces:
i) Si a = 1, f es O(log n) en S
ii) Si a 6= 1, f es O(nlogb a ) en S, donde S = {bk |b, k N b > 1, k > 0.}
Ahora bien, cuando el sistema recurrente que resulte de un algoritmo no
tenga exactamente la forma del teorema, pero se puede escribir en esa forma
cambiando la igualdad por una desigualdad, se puede asegurar un orden
para la funcin, pero no una expresin exacta para el sistema recurrente,
esta aseveracin est respaldada por el siguiente teorema.
4.2. SISTEMAS RECURRENTES 71
f (1) c
n
f (n) af ( ) + c, para n = bk donde k > 0,
b
1. si a = 1 entonces f es O(log n) en S
2. si a 6= 1 entonces f es O(nlogb a ) en S
g(1) = c
n
g(n) = ag( ) + c, para n = bk y k > 0
b
Por el Teorema 10 es fcil ver que la funcin g es O(log n) en S si a = 1, y
O(nlogb a ) en S si a 6= 1.
As tenemos que la funcin g es una cota para la funcin f en S, es decir
f (n) g(n), si n S.
func Cuenta(raiz)
comienza
si (tipo(raiz) = hoja)) entonces
Cuenta 1
otro
Cuenta 1 + Cuenta(hijoizq(raiz))
+Cuenta(hijoder (raiz));
is
termina.
Algoritmo 12: Cuenta el nmero de nodos en un rbol binario
Anlisis Temporal
n n1
Como ft (n) es montona creciente y 2
> 2
entonces ft ( n2 ) > ft ( n1
2
),
de esta forma se tiene el sistema
ft (1) 1
n
ft (n) 2f ( ) + 1
2
Anlisis Temporal
ft (1) = 0
n
ft (n) = 2ft ( ) + 1
2
ft (1) 1
n
ft (n) 2ft ( ) + 1
2
74 CAPTULO 4. ANLISIS DE ALGORITMOS RECURSIVOS
ft (n) es O(nlogb a ) en S
Anlisis Espacial
Como es claro la complejidad espacial es de dos tipos:
1. Esttica
fee (n) = espacio(A)
entonces:
fee (n) = n
2. Dinmica
Se tiene el sistema recurrente:
fed (1) = espacio(ini) + espacio(f in) + espacio(mitad) + espacio(max)
+ espacio(max_aux) + espacio(direccin de retorno)
fed (1) = 6
n
fed (n) = fed ( ) + 6
2
f (bi+1 ) m1 log bi (1 + 1)
f (bi+1 ) 2m 1 log bi
f (j) < f (bi+1 ) 2m1 log bi 2m1 log j
f (j) 2m1 log j
76 CAPTULO 4. ANLISIS DE ALGORITMOS RECURSIVOS
n
X Z n
1 1
= 1+ dx = 1 + (ln x|x=n ln x|x=2 )
i=1
i 2 x
1 + ln n ln 2
por lo que podemos utilizar este valor para acotar la sumatoria sin perder de
vista que la igualdad es ahora una desigualdad.
4.4. ELECCIN DE LA OPERACIN BSICA 77
n n
2 2
n n n n
4 4 4 4
. . . . . . . .
4.5. Ejercicios
Ejercicio 4.1 Resuelva los siguientes sistemas recurrentes donde f (1) = 1
y para n 2
n
f (n) = 8f ( ) + n2 (4.1)
2
n
f (n) = 2f ( ) + log n (4.2)
2
Ejercicio 4.2 Muestre que el nmero de funciones booleanas de n variables
est dado por la recurrencia:
f (1) = 4
f (n) = (f (n 1))2
4.5. EJERCICIOS 81
Ejercicio 4.5 Elabore algoritmos recursivos para resolver los siguientes pro-
blemas y calcule su complejidad temporal y espacial.
1. Encontrar una moneda falsa en un arreglo de n monedas con n = 2k
(el arreglo contiene los pesos de las monedas y la falsa pesa menos que
las otras).
2. Evaluar una expresin aritmtica en notacin inja que se encuentra
en un arreglo que contiene prioridades de aplicacin para los elementos
de la expresin (la prioridad de un operando es innita).
Ejercicio 4.9 Escriba una versin recursiva del Algoritmo 8 (vease el ejer-
cicio 3.2).
83
85
Mtodo Avido.
rboles de juego.
87
88 CAPTULO 5. DIVIDIR PARA VENCER
f (m) = fCalculaSolucinInmediata(m)
k
X
f (n) = fDivide(n) + fCombina(n) + f (t[i])
i=1
5.3. Mergesort
Ordenamiento por intercalacin
Ejemplo 27 El ordenamiento por intercalamiento (mergesort), como se mues-
tra en el algoritmo 16, utiliza la tcnica de dividir para vencer de la siguiente
manera. Para ordenar un arreglo este se divide en dos mitades, cada mitad
es ordenada y ambas mitades ya ordenadas se intercalan para dar la solucin.
Mergesort(ini, mitad)
Mergesort(mitad + 1, f in)
Intercala(ini, mitad, f in)
is
termina.
Algoritmo 16: Mergesort
Anlisis Temporal
Tamao del problema: n, el tamao del arreglo.
Operacin bsica: asignaciones entre elementos del arreglo.
Primero es necesario hacer el anlisis del algoritmo que intercala, algo-
ritmo 17. El algoritmo hace 2n operaciones. Esto lo podemos ver de manera
informal de la siguiente manera. Primero, el algoritmo copia todos los ele-
mentos de el arreglo A al arreglo B intercalndolos en orden. Despus, copia
los elementos del arreglo B al A ya en orden. Debido a que el algoritmo de
ordenamiento no realiza comparaciones se tiene un solo caso.
Caso nico:
90 CAPTULO 5. DIVIDIR PARA VENCER
f (1) = 0
intercala
z}|{ n
f (n) = 2n +2f ( )
2
f (2k ) 2f (2k1 ) = 2 2k
2f (2k1 ) 22 f (2k2 ) = 22 2k1
22 f (2k2 ) 23 f (2k3 ) = 23 2k2
..
.
2k2 f (22 ) 2k1 f (21 ) = 2k1 22
2k1 f (21 ) 21 f (20 ) = 2k 21
k
X
k
f (2 ) = 2k+1 = k 2k+1
i=1
f (n) = log(n) n
es decir
f (n) es O(n log n)
Anlisis Espacial
Memoria esttica.
92 CAPTULO 5. DIVIDIR PARA VENCER
Memoria dinmica.
En el caso de la memoria dinmica debemos saber el nmero de llamadas
recursivas realizadas. En este caso la relacin de recurrencia es
Fmd (1) = c
n
Fmd (n) = c + Fmd ( )
2
ya que despus de cada llamada recursiva esta libera los recursos que haya
utilizado. Por lo tanto de memoria dinmica la funcin es
que es O(n2 ).
Para el algoritmo de mergesort lo que cambiara sera el caso base:
si (ini f in + 1 < 16) entonces
InsercinDirecta(ini, f in)
otro
...
Y por lo tanto
5.4. Quicksort
Ejemplo 28 Quicksort El algoritmo de ordenamiento rpido (quicksort),
como se muestra en el algoritmo 20, utiliza tambin la tcnica de dividir para
vencer. En este caso la estrategia es tomar un elemento como pivote y poner
en una parte a los elementos menores al pivote y en la otra a aquellos mayores
al pivote. Despus se hacen llamadas recursivas para ordenar ambas partes.
En este caso tambin se aprovecha el hecho de que un arreglo de tamao 1
esta ya ordenado.
El algoritmo que parte el arreglo en dos partes (no iguales) esta denido
en el algoritmo 21. Este algoritmo parte el arreglo en dos partes utilizando
al primer elemento del arreglo como pivote.
Anlisis Temporal
Tamao del problema: Tamao del arreglo
Operacin bsica: Comparaciones
Para hacer el anlisis temporal notamos que el algoritmo particin realiza
n comparaciones. De manera informal esto sucede por que el pivote se com-
para contra todos los elementos del arreglo. Hacemos el anlisis de quicksort
caso por caso.
Peor Caso: Ocurre cuando el pivote es el primer elemento
En este caso el arreglo se divide en dos partes, una de tamao n 1 y
otra de tamao 1. Como ya dijimos el arreglo de tamao 1 ya esta ordenado
y supongamos que no necesitamos realizar ninguna operacin. Por lo tanto
96 CAPTULO 5. DIVIDIR PARA VENCER
tendremos
f (1) = 0
f (n) = f (1) + f (n 1) + |{z}
n +1 = f (n 1) + n + 1
particin
es decir
f (n) f (n 1) = n + 1
f (n) f (n 1) = n + 1
f (n 1) f (n 2) = (n 1) + 1
f (n 2) f (n 3) = (n 2) + 1
..
.
f (2) f (1) = 2 + 1
5.4. QUICKSORT 97
n
X n(n + 1)
f (n) = (i + 1) = + (n 2)
2
2
que es O(n2 ).
Mejor caso:El pivote esta exactamente a la mitad
En este caso el arreglo se divide en dos partes del mismo tamao. Si
suponemos que n = 2k cada parte tendr un tamao 2k 1 (por que el
pivote ya esta en orden). La gura 9 muestra el rbol de llamadas recursivas
que se realizan.
f (2k )
f (2k1 1) f (2k1 1)
f (1) 0
n
f (n) 2f ( ) + n + 1
2
es decir
n
f (n) 2f ( ) n + 1,
2
98 CAPTULO 5. DIVIDIR PARA VENCER
f (2k ) 2f (2k1 ) 2k + 1
2f (2k1 ) 22 f (2k2 ) 2k + 2
22 f (2k2 ) 23 f (2k3 ) 2k + 22
..
.
2k2 f (22 ) 2k2 f (2) 2k + 2k2
2k1 f (2) 2k f (1) 2k + 2k1
por lo tanto
k1
X
k k 2k1
f (2 ) k2 + 2i k2k + 1 n log n + n 1
i=0
2
f (0) + f (n 1) + n + 1
f (1) + f (n 2) + n + 1
f (2) + f (n 3) + n + 1
..
.
f (n 3) + f (2) + n + 1
f (n 2) + f (1) + n + 1
f (n 1) + f (0) + n + 1
por lo que
X1 n+1
f (n)
=2
n+1 i=3
i
despejando f (n) tenemos
n+1
X Z n+1
1 dx
f (n) = 2(n + 1) 2(n + 1)
i=3
i 3 x
100 CAPTULO 5. DIVIDIR PARA VENCER
Anlisis Espacial
f (1) = c
f (n) = c = f (n 1) = O(n)
..
.
f (n) = c + f (n 1)
f (n 1) = c + f (n 2)
..
.
f (2) = c + f (1)
..
.
f (n) = c(n)
f (n) = c = O(1)
5.5. Ejercicios
Ejercicio 5.1 Realice el anlisis espacial para el peor caso de quicksort.
Ejercicio 5.2 Par ms cercano. Dado un conjunto de puntos en el plano
cartesiano (x, y) el problema es encontrar aquellos dos puntos que se encuen-
tran ms cerca el uno del otro. Haga el anlisis del algoritmo.
102 CAPTULO 5. DIVIDIR PARA VENCER
J Q
B C K L R S
5 10
2 11 14
105
106 CAPTULO 6. MTODO VIDO
n
X
li L.
i=0
Asumimos que cada vez que se desea leer un programa, la cinta se lee desde
el comienzo. Es decir, que si los programas se encuentran almacenados en el
orden I =< i1 , i2 , . . . , in > el tiempo necesario para recuperar el programa k
es
k
X
tk lij .
j=1
n k n
1 XX 1X
TPEL = lij = (n k + 1)lik
n k=1 j=1 n k=1
Funcin objetivo
Encuentra un orden para almacenar los programas de tal manera que el
TPEL sea el menor posible.
6.2. ALMACENAMIENTO EN CINTAS 107
Estrategia
El algoritmo 24 utiliza la estrategia de tomar al programa que tenga la
menor longitud e ir la agregando a la solucin los programas de tal manera
que la solucin se mantenga ptima, es decir en orden ascendente.
n
X
D(I) = (n k + 1)lij .
k=1
Deben existir en I un par de ndices a, b tales que a < b y lia > lib .
108 CAPTULO 6. MTODO VIDO
contradiccin
Supongamos que n = 3, M = 20 y
24 25 15 4 5 3
( , , )=( , , )
18 15 10 3 3 2
tomando los objetos por mayor unidad de peso
1
= (0, 1, )
2
= 32.5
Estrategia
Tomar los objetos de mayor valor por unidad de peso. El algoritmo 25
muestra el algoritmo para resolver el problema de la mochila utilizando el
mtodo vido.
vi v2 vn
Teorema 14 Si ... el algoritmo Mochila genera la solucin
pi p2 pn
ptima.
1. k < j yk < xk
110 CAPTULO 6. MTODO VIDO
proc M ochila(p, v, x, k, M )
comienza
i 0;
peso 0;
valor 0;
ordena(p, v, ppv);
mientras peso < M haz
k ppv[i];
si p[k] < (M peso) entonces
x[k] 1
otro
(M peso)
x[k] ;
p[k]
is
peso peso + x[k] p[k];
valor valor + v[k] x[k];
i i + 1;
zah
termina.
Algoritmo 25: Mochila
6.3. PROBLEMA DE LA MOCHILA 111
2. k > j yk < xk
3. k = j
Si k existe yk < xk . Pero eso tambin implica que l tal que l > k y
yl 6= 0. Construimos ahora una Y 0 tal que Y y Y 0 son idnticas excepto en
los ndices k y l. Sustituimos yk0 = yk + y yl0 = yl con lo cual
pk pl
n
X n
X
yi0 pi = yi pi
i=1 i=1
Note que
yk0 pk = (yk + )pk = yk +
pk
y
yl0 pl = (yl + )pl = yl
pl
1. yk0 = xk
2. yk0 < xk en cuyo caso existe l0 tal que l0 > k y yl0 6= 0 y podemos hacer
el razonamiento superior hasta hacer yk0 = xk .
Por que
yk0 vk = yk vk + vk
pk
yl0 vl = yl vl vl
pl
112 CAPTULO 6. MTODO VIDO
y
vk vl
>
pk pl
Es decir que podemos hacer Y 0 idntico a X hasta k y mantenerlo ptimo.
Es claro que podemos seguir este razonamiento para k + 1, k + 2 . . . , n. X es
ptimo.
Construiremos una solucin Z en la cual vamos a hacer crecer yk hasta
xk y decrecer yk+1 , ..., yn . Tendremos por lo tanto:
n
X n
X n
X
pk pi
v i xi = vi yi + (yk Xk )vk (yi xi )vi
i=1 i=1
xk i=k+1 pi
n
X X vk
vi yi + [(yk xk )pk (yi xi )pi ]
i=1
pk
!
i) >! y es optima
ii) Z es optima y se parece a x hasta xk , si aplicamos el mismo procedi-
miento tendremos z 0 xk + 1X
x es optima
6.4.1. Problema
Determinar la manera ptima de intercalar los registros de los n archivos
ordenados.
6.4. INTERCALACIN PTIMA DE ARCHIVOS 113
6.4.2. Estrategia
Tomar cada vez los dos archivos mas pequeos. Este problema puede
representarse como un rbol binario en el que las hojas son los archivos
iniciales y los nodos internos las intercalaciones, la Figura 10 muestra un
ejemplo. Si F1 esta a una distancia de 3 los registros de Fi se movieron tres
veces. Si di es la distancia del nodo Fi a la raz y li es la longitud del archivo
Fi entonces el nmero total de movimientos es
n
X
li di
i=1
y3 y3
y2 y1 y2
y1 x1 x2 x3 x4
x1 x2 x3 x4
proc IOA(L, n)
comienza
para i = 1 a n 1 haz
nodo Creanodo();
Izq(nodo) M enor(L); menor elimina el
Der(nodo) M enor(L); nodo de vuelta
Long(nodo) Long(Izq(nodo) + Long(Der(nodo));
Inserta(L, nodo);
zah
termina.
Algoritmo 26: Algoritmo de Intercalacin vido
<-P l1 + l2
lr lm l1 l2
LCEP(T ) LCEP(T 00 ).
Adems:
6.4. INTERCALACIN PTIMA DE ARCHIVOS 115
a=000
b=001
25 c=01
d=10
e=11
35 60
15 20 30 30
5 10
116 CAPTULO 6. MTODO VIDO
6.5.1. Problema
Encontrar un rbol generador de costo mnimo.
3 0716A25?34 2 3 0716A2534 2
7 ??? 6
3 ?? 3
??
0716C25?34 3 0716F2534 2 0716B2534 0716C2534 3 0716F2534 2 0716B2534
??
??
?? 5
6 ?
5 5
8?>9
D <;
:= 8?>9
D := <
;
6.5.2. Estrategia
Existen dos estrategias bsicas
Tomar el arco de menos costo que una un vrtice conectado con uno
no conectado.
proc Kruskal(G, A, n)
comienza
A vacio;
para i = 1 a n 1 haz
arco M enor(G);
si F ormaCiclo(arco, A) entonces
A A arco;
is
zah
termina.
Algoritmo 27: Kruskal
(x1 , x2 , x3 , ..., xn ), xi Si
F (x1 , x2 , x3 , ..., xn ).
Cada uno de los valores xi de la tupla puede tomar uno de varios posibles
valores Si . Si |Si | = mi entonces existen m1 m2 m3 mn posibles
valores para (x1 , x2 , x3 , ..., xn ).
119
120 CAPTULO 7. BSQUEDA CON RETROCESO (BACKTRACK)
1. Mtodo vido.
En el caso del mtodo vido solo encontramos una solucin si existe una
estrategia que nos permita usar el mtodo vido. Cosa que no siempre sucede.
Explorar todo el espacio de soluciones por otro lado puede resultar demasiado
costoso y por tanto nunca encontrar una solucin.
El mtodo de bsqueda con retroceso construye las tuplas elemento por
elemento y en cada paso evala la tupla parcial para decidir si puede llagar
a ser una solucin. En caso de no ser as la tupla parcial es eliminada. Si la
tupla parcial es x1 , x2 , x3 , . . . , xk se eliminan mk+1 mk+2 . . . mn tuplas
por explorar.
Sobre una tupla existen dos tipos de restricciones.
Sol
x321 =S321
proc Backtrack(n)
comienza
nivel 1;
mientras nivel > 0 haz
si xk T (x1 , x2 , . . . , xi )
Bi (x1 , x2 , . . . , xi ) entonces
si (x1 , x2 , . . . , xk )
es un camino al estado respuesta
entonces
imprime(x1 , x2 , . . . , xk );
nivel nivel + 1;
is
otro
nivel nivel 1;
is
zah
termina.
Algoritmo 28: Backtrack
7.3. n Reinas
Ejemplo 33 El problema de las n reinas consiste en colocar n reinas en
un tablero de ajedrez de n n de manera que no se ataquen mutuamen-
te. La solucin se puede expresar como la tupla de posiciones de las reinas
(q1 , q2 , . . . , qn ). Si cada posicin es representada como (r, c) (rengln, colum-
7.3. N REINAS 123
proc RBacktrack(n)
comienza
para cada xk T (x1 , x2 , . . . , xi ) haz
si Bk (x1 , x2 , . . . , xk ) entonces
si (x1 , x2 , . . . , xk )
es un camino al estado respuesta
entonces
imprime(x1 , x2 , . . . , xk );
is
RBacktrack(nivel + 1);
is
zah
termina.
Algoritmo 29: Backtrack Recursivo
ci 6= cj i 6= j, 1 i, j n.
rengln ni en la misma columna. Solo falta asegurarse de que las reinas deben
estar en diferente diagonal. Eso lo logramos vericando que
|cj ci | 6= |j i|.
func Coloca(reinas)
comienza
para i = 1 a reinas 1 haz
si (x[i] = x[reina] |x[i] x[reina]| = |i reina|)
entonces
Coloca f also;
is
zah
Coloca verdadero
termina.
Algoritmo 30: Verica que la reina se pueda colocar
c21 234= 1
proc Reinas(n)
comienza
reina 1
x[reina] 0
mientras reinas > 0 haz
x[reina] x[reina] + 1;
mientras (x[reina] n) Coloca(reina) haz
x[reina] x[reina] + 1
zah
si (x[reina] n) entonces
si (reina = n) entonces
imprime(x);
otro
reina reina + 1;
x[reina] 0;
is
otro
reina reina 1;
is
zah
termina.
Algoritmo 31: Solucin a las n Reinas
S1 = {11, 13, 7}
S2 = {24, 7}
< v1 , v2 , v3 , . . . , vn > .
7.4.1. Formulacin 1
Podemos representar la solucin con
(x1 , x2 , x3 , . . . , xk )
S1 = (1, 2, 4)
S2 = (3, 4)
xi 1, 2, 3, . . . , n
y que la tupla
(x1 , x2 , x3 , . . . , xk )
satisfaga
n
X
vxi = M.
i=1
7.4.2. Restricciones
Para esta formulacin del problema tendremos que las restricciones que
tenemos son
7.4. SUMA DE SUBCONJUNTOS 127
Explicitas 1 xi ni y
n
X
vxi = M.
i=1
7.4.3. Formulacin 2
La solucin ser una tupla
(x1 , x2 , x3 , . . . , xn ) con xi 0, 1
S1 = (1, 1, 0, 1)
S2 = (0, 0, 1, 1)
7.4.4. Restricciones
Para esta formulacin del problema tendremos que las restricciones que
tenemos son
Explicitas n
X
0
xi = y vxi = M.
1
i=1
7.5.1. Solucin
Expresamos a la solucin como la tupla (x1 , x2 , x3 , . . . , xn ) con xi {1, . . . , m}
donde xi es color asignado al vrtice i, por lo que vemos a V como un vector
< v1 , v2 , . . . , vn > con |V | = n. La restriccin se expresa como
xi 6= xj i 6= j si (i, j) A.
func SeColorea(nodo)
comienza
para vrtice = 1 a nodo 1 haz
si (G[vertice, nodo]) (x[vertice] = x[nodo])
entonces
SeColorea F ;
is
zah
SeColorea V ;
termina.
Algoritmo 34: SeColorea
proc m-coloreado(n, m)
comienza
nodo 1;
x[nodo] 0;
mientras nodo > 0 haz
repite
x[nodo] x[nodo] + 1;
hasta x[nodo] > m sepuedecolorear(nodo);
si (x[nodo] =< m) entonces
si (nodo = n)
Imprime(x);
otro
nodo nodo + 1;
x[nodo] 0;
is
otro
nodo nodo 1;
is
zah
termina.
Algoritmo 35: m-coloreado
7.5. COLOREADO DE GRFICAS 131
8.1. Problema
Encontrar un camino hacia el triunfo del jugador que tiene el turno en la
raz del rbol.
133
134 CAPTULO 8. RBOLES DE JUEGO
8.2. Solucin
Hacer la bsqueda con retroceso en el rbol de juego utilizando el mtodo
MiniMax, y las funciones de corte dadas por la tcnica poda alfa-beta.
valor tentativo es una cota inferior de valor nal para nodos Max es
una cota superior del valor nal para nodos Min.
8.5.2. Reglas
Si todos los hijos de un nodo T ya se podaron o se exploraron entonces
valor nal(T)<-valor tentativo Vf H
Depende de:
137
138CAPTULO 9. COMPLEJIDAD DE LOS ALGORITMOS DISEADOS CON BACKT
proc RamaAcota(raiz)
comienza
nodo raiz;
Q Colavacia();
Encola(Q, nodo);
mientras Escolavacia(Q) HaySolucin haz
nodo Desencola(a);
si nodo es solucin entonces
imprime(nodo);
HaySolucin verdad;
otro
para cada hijoHdenodo haz
si la solucin parcial (incluyendo H)
conduce a un nodo respuesta entonces
Encola(Q, H)
is
zah
is
zah
termina.
Algoritmo 38: Planicacin y Acotamiento
donde
proc BusquedaMenCosto(raiz)
comienza
nodo raiz;
inserta(vivos, nodo);
mientras N ovacio(vivos) Haysolucion haz
nodo traeM enoryelimina(vivos);
inserta(muertos, nodos);
si nodoessolucion entonces
imprime(nodo);
Haysolucion verdad;
otro
para cada hijoHsucesordenodo haz
ca ux c( H);
si Encuentra(vivas, H) Hn odo.costo > ca ux
entonces
H.costo ca ux;
Esta v;
otro
si Encuentra(M uertos, H) H.nodo.costo > ca ux
entonces
H.costo ca ux;
Eliminar(M uertos, H);
Inserta(vivos, H);
Esta v;
is
is
si esta entonces
H.costo ca ux;
is
inserta(vivos, H);
zah
is
zah
termina.
Algoritmo 39: Busqueda Menor Costo
Parte III
Problemas NP
141
Captulo 10
Problemas Tratables e Intratables
143
144 CAPTULO 10. PROBLEMAS TRATABLES E INTRATABLES
10.2. Interpretaciones
Podemos interpretar la instruccin Elige de las siguientes maneras:
1. Elige es mgica y siempre devuelve el valor que necesitamos.
proc OrdenaND(A, n)
comienza
para i = 1 a n haz
B[i] elige(A);
A A B[i];
zah
Exito;
termina.
Algoritmo 41: Ordena no deterministico. Elige mgica
proc OrdenaND(A, n)
comienza
para i = 1 a n haz
B[i] elige(A);
A A B[i];
zah
i 1;
mientras i < n B[i] B[i + 1] haz
i i + 1;
si i = n entonces
Exito;
otro
F racaso;
termina.
Algoritmo 42: Ordena no deterministico. Multiprocesos
con valor vi , 1 i n
con peso pi , 1 i n
sujeta a
n
X
xi p i M
i=1
y maximizando
n
X
xi v i .
i=1
El problema de decisin de la mochila consiste en decidir si para un con-
junto de objetos tenemos un subconjunto tal que la restriccin de pesos se
cumpla y
Xn
xi vi = k.
i=1
proc SatisfacibilidadND
comienza
para i = 1 a n haz
x[i] elige({v, F });
zah
si evalua(F, x) entonces
res verdad;
Exito;
otro
res f also;
F racaso;
is
termina.
Algoritmo 45: Satisfacibilidad
proc Ordena(A, n)
comienza
para i 1 a n haz
j M enor(i, n) > O(nR ) > O(n( k + 1))P
intercambia(i, j)O(1)Ordenaalf aobtenermenor
zah
termina.
proc B(Exp, n)
comienza
x (00...0)
mientras (X (11...1)) Evalua(Exp, x) haz
me(x)
si Evalua(Exp, x) entonces
repite
hasta (F also)
termina.
proc S.Halt(Exp, n)
comienza
Escribe(B, Exp, n)
termina.
3 0716A2534 2
3
0716C2534 3 0716F2534 2 0716B2534
5
8?9>
D =
: ;
<
Debemos construir As P
proponemos el siguiente algoritmo de transformacion.
Sea E = C1 C2 Ck co-variables booleanas X1 , X2 , . . . , Xk .
10.4. PROBLEMA DE LA COBERTURA DE NODOS 151
0716G2534 0716E2534
07162534
A ???
??
??
?
0716C25?34 0716F2534 07162534
?? B
??
??
?
8?9 >
D=:;<
tt = M ax(Ti ), 1 i n
Una planeacin es no apropiativa cuando un trabajo se ejecuta desde el
principio hasta el n en el mismo procesador.
Una planeacin es apropiativa cuando el trabajo no necesariamente se
ejecuta completamente en el mismo procesador.
P.D. El problema de decidir si un conjunto de trabajos tiene una planea-
cin no apropiativa para m procesadores con un tiempo de terminacin T es
NPDuro (i.e S Plan)
Utilizaremos el problema de la particin: Dado un conjunto de nmeros
enteros y un nmero m decidir si es posible particionar el conjunto en m
subconjuntos tal que la suma de los elementos de la particin sea igual.
Si m = 2
A = {2, 7, 10, 25, 20}
El problema de decisin de la particin es NP Completo.
P.D Particin Plan.
- Suponemos que existe AP lan P
- Construir Aparticion P
Proponemos al siguiente algoritmo:
156 CAPTULO 10. PROBLEMAS TRATABLES E INTRATABLES
a +
b *
Figura 15: a + b + (a c)
+ +
a b c
Figura 16: (a + b) (a + b + c)
LOAD A1 R1
ADD R1 BR1
STORE T1 R 1
ADD R1 C1 R1
STORE T2 R 1
LOAD T1 R 1
MULT R1 T2 R1
LOAD aR1
ADD R1 bR1
ADD R1 cR1
MULT R 1 T2 R 1
Las cartas deben ser coloreadas de manera que sus lados adyacentes ten-
gan el mismo color.