Académique Documents
Professionnel Documents
Culture Documents
17 de octubre de 2005
Indice
9. Programacion dinamica
9.1. Suma de subconjunto . . . . . . . . .
9.2. Estructuras de Catalan o ptimas . . . .
9.3. Mayor subsecuencia comun . . . . . .
9.4. Distancia de edicion . . . . . . . . . .
9.5. Mayor subsecuencia creciente o decreciente . . . . . . . . . . . . . . . . .
9.6. Conteo de cambio . . . . . . . . . . .
1. Trigonometra
2. Geometra analtica
2.1. Rectas, planos y crculos . . . . . . . .
2.2. Transformacion de coordenadas . . . .
2.3. Cuadraticas . . . . . . . . . . . . . . .
2
2
2
2
3. Geometra computacional
3.1. Triangulacion de polgonos .
3.2. Interseccion de segmentos .
3.3. Envolvente convexa . . . . .
3.4. Punto en polgono . . . . . .
3.5. Mnimo crculo encapsulador
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
4. Teora de numeros
4.1. Factoriales . . . . . . . . . . . .
4.2. Ternas pitagoricas . . . . . . . .
4.3. Algoritmo de Euclides . . . . .
4.3.1. Ciclos en sucesiones . .
4.4. Divisores de un numero . . . . .
4.5. Numeros primos . . . . . . . . .
4.6. Potencias y logaritmos discretos
4.7. Teorema chino del residuo . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
5. Combinatoria
5.1. Objetos combinatorios . . . . . . . . .
5.2. Numeros combinatorios . . . . . . . . .
.
.
.
.
10
10
10
11
11
. 11
. 12
12
12
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
12
13
13
13
13
14
14
14
15
15
15
. . . . . . 15
. . . . . . 15
16
8 1. Trigonometra
8
Todo triangulo tiene un crculo inscrito tangente a sus
8
8 lados e interior a e l, cuyo centro es el punto de intersec8 cion de las bisectrices de los lados.
Todo triangulo tiene un crculo circunscrito que pasa
9
por sus vertices. El punto de interseccion de las media7. Probabilidad
9 nas del triangulo es su centro de masa.
Sea el triangulo 4ABC con a ngulos A, B y C y sean
8. Ordenamiento y busqueda
9 a, b y c los lados opuestos a dichos a ngulos, respecti8.1. Algoritmos basados en comparaciones . 9 vamente. Sean hc , tc y mc las longitudes de la altura, la
8.2. Algoritmos lineales . . . . . . . . . . . 10 bisectriz y la mediana que se originan en el vertice C,
8.3. Busqueda binaria . . . . . . . . . . . . 10 y sean r y R los sendos radios de los crculos inscrito y
6. Metodos numericos
6.1. Interpolacion . . . . . . . . . . .
6.2. Diferenciacion . . . . . . . . . . .
6.3. Integracion . . . . . . . . . . . .
6.4. Transformacion rapida de Fourier
6.5. Algebra
lineal . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
(1)
(2)
(3)
(4)
c2 sen A sen B
2 sen C
(5)
= rs =
abc
4R
=
s(s a)(s b)(s c)
r = c sen 12 A sen 21 B sec 12 C
C
= ab sen
= (s c) tan 12 C
2s
1
= h1a + h1b + h1c
(6)
(7)
(8)
(9)
i=0
c
R = 2 sen
= 4abc
(10)
C
area
2 area
hc = a sen B = b sen A = c
(11)
q
c2
2ab
cos 12 C = ab 1 (a+b)
tc = a+b
2 (12)
q
1 2
a + 21 b2 12 c2
(13)
mc =
2
2.
Ecuacion
(r A) B = 0
(r A) (B A) = 0
(r A) B = 0
x
y
y
1
4
1
4 (x1 x4 ) + (y1 y4 )
= x2 x4 y2 y4 (x2 x4 )2 + (y2 y4 )2 .
x3 x4 y3 y4 (x3 x4 )2 + (y3 y4 )2
(14)
(15)
(16)
(17)
(18)
(19)
2.2.
Geometra analtica
Transformacion de coordenadas
cos sen
x
=
.
(22)
x3 y3 z3
sen cos
y
(xi , yi , zi ). El a rea signada de un triangulo con vertices
en p1 = (x1 , y1 ), p2 = (x2 , y2 ) y p3 = (x3 , y3 ) es
2.3. Cuadraticas
1
[q
,
q
,
q
]
x
x
y
y
1 2 3
1
2
1
= 2
K({pi }3i=1 ) =
(20)
El polinomio de segundo grado
2
2 x3 x1 y3 y1
Q(x, y) = Ax2 + Bxy + Cy2 + Dx + Ey + F = 0,
donde q = (x , y , 1). La funcion K indica si el punto
2.1.
p3 se encuentra a la izquierda (K < 0), a la derecha en donde B , 0, puede transformarse en otro de la for(K > 0) o es colineal (K = 0) con respecto al segmento ma
dirigido
p1
p2 . Por lo tanto, la ecuacion de la recta Ax +
Q0 (, ) = A0 2 + C 0 2 + D0 + E 0 + F 0 = 0
By + C = 0 que pasa por los puntos (x1 , y1 ) y (x2 , y2 )
puede escribirse de la siguiente manera:
haciendo el cambio de variable (22) con parametro
x
y
1
B
si A , C,
x1 y1 1 = 0.
12 arctan AC
(23)
si A = C.
x2 y2 1
4
2
3.2.
La forma polar de una conica de excentricidad e, cuyo foco esta en el polo y a p unidades de la directriz,
es
ep
,
r=
1 + e cos( + )
3.
Geometra computacional
3.1.
Interseccion de segmentos
F(P)
1.
2
Triangulacion de polgonos
Una oreja de un polgono P son tres vertices consecutivos que determinan un triangulo completamente
contenido en P. Todo polgono tiene al menos una oreja.
Algoritmo 3.1. Determina si tres puntos de un polgono son una oreja.
Entrada: Tres puntos pi ,p j ,pk en un polgono P ordenado en sentido antihorario.
Salida: Verdadero, si los puntos conforman una oreja.
Falso en otro caso.
1: funcion O (pi , p j , pk , P)
2: si K(pi , p j , pk ) < 0 entonces
3:
devolver falso.
4: para todo m , i, j, k hacer
5:
si pm 4pi p j pk entonces
6:
devolver falso.
7: devolver verdadero.
Sean s1 y s2 dos segmentos. Decimos que son comparables si la lnea de barrido los intersecta, y que s1
esta por arriba de s2 si su ordenada de interseccion es la
mayor de ambas.
3.3.
Envolvente convexa
10:
g g 1.
11: devolver g.
3.5.
4. Teora de numeros
1: a falso.
4.2.
Ternas pitagoricas
Las ternas pitagoricas son tripletes (u, v, w) N3 tales que w2 = u2 + v2 . Si u v w, entonces la tripleta
se dice primitiva. Toda terna primitiva es de la forma
(u, v, w) = (x2 y2 , 2xy, x2 + y2 ), donde y < x y x y.
Aunque hay una infinidad de ternas que tienen esta forma, no todas son primitivas.
4.3.
Algoritmo de Euclides
4.4.
Divisores de un numero
s
Y
pi i
(24)
i=1
Algoritmo 4.5 (Division exhaustiva). El siguiente algoritmo halla el menor divisor de un numero entero.
Entrada: n N.
Salida: El menor divisor d de n, o 1 si n = 1.
1: si n 0 (mod 2) entonces
2:
devolver 2.
3: si n 0 (mod 3) entonces
4:
devolver 3.
5: 0 2, 1 4, d 5, i 0, q 25.
6: mientras n mod d > 0 q n hacer
q q + 2i d + 4 + 12i, d d + i , i (i + 1)
Con el algoritmo anterior puede resolverse una con- 7:
mod 2.
gruencia de la forma ax b mod m.
8: si q > n entonces
Algoritmo 4.3. Calcula una solucion de ax = b 9:
devolver n.
mod m.
10: devolver d.
Entrada: a, b, m Z.
Salida: Si existe, x tal que ax = b mod m. Si no, fal- Algoritmo 4.6 (Suma de divisores). Para obtener la
suma de los divisores propios de un numero, aproveso.
chamos la identidad
1: (d, x0 , y0 ) MCD(a, m).
X
X
n
2
2: si d\b entonces
d + [d < n] .
(n) =
d=
d
3:
x x0 (b/d)
d\n
d\n
2 n
1<d<n
1<d
4:
para i = 0 hasta d 1 hacer
5:
devolver (x + i md ) mod m
Entrada: n N.
6: si no
Salida: S = (n).
7:
devolver falso.
1: S 0, d 1, c 1.
Observese que podemos resolver la ecuacion 2: repetir
diofantica ax + my = b, obteniendo x con el algoritmo 3:
si n 0 mod d entonces
anterior y y = bax
,
siempre
que
(a,
m)\b.
4:
S S + d.
d
5:
si c < n entonces
6:
S S + dn
4.3.1. Ciclos en sucesiones
7:
c c + d + d + 1, d d + 1.
Algoritmo 4.4 (Floyd). Encuentra un ciclo en una su- 8: hasta que c > n
cesion definida a traves de ai+1 = f (ai ), donde f : S
Para la suma de todos los divisores de n, se puede
S y S es finito.
Q s pi i +1 1
Entrada: Una sucesion finita {ai }
.
usar
(n)
=
1
i=1 pi 1 .
i=1
5
4.5.
Numeros
primos
4.7.
4.6.
satisface
(n)
=
(pi 1) =
i=1 pi
Q
1
n p/n 1 p .
5.1.
Objetos combinatorios
Algoritmo 5.1 (sucesor, codigo Gray). Aqu se consi- 2: para i n 1 hasta k hacer
si ti1 + 1 ti 1 entonces
dera el orden de cambio mnimo para los subconjuntos 3:
de T .
4:
b 1 b.
5:
para j ti1 + 1 hasta ti 1 hacer
1: si |T | 0 mod 2 entonces
j
6:
r r + n
2:
U T {n}.
ki
7: devolver r.
3: si no
4:
j n.
Algoritmo 5.6 (extractor, k-subconjuntos). Extrae
5:
mientras j < T y j > 0 hacer
de la posicion r el k-subconjunto (combinacion) de
6:
j j 1.
T.
7:
si j = 1 entonces
1: x 1
8:
devolver falso.
2: para i 1 hasta
nx k hacer
9:
U T { j 1}.
r hacer
3:
mientras
10: T = U.
ki
11: devolver verdadero.
, x x + 1.
4:
r r nx
ki
5:
ti x, x x + 1.
Algoritmo 5.2 (colocador, codigo Gray). Se conside6: devolver T .
ra el orden de cambio mnimo para los subconjuntos de
T.
Algoritmo 5.7 (extractor, permutaciones). Extrae de
1: b r 0.
la posicion r una permutacion de T en orden lexico2: para i n 1 decreciendo hasta 0 hacer
grafico.
3:
si n i T entonces
1: n 1.
4:
b 1 b.
2: para j 1 hasta n 1 hacer
5:
si b = 1 entonces
3:
d b r modj!( j1)! c, r r d j!, n j d + 1
i
6:
r r+2.
4:
para i n j + 1 hasta n hacer
7: devolver r.
5:
si i > d entonces
i i + 1.
Algoritmo 5.3 (extractor, codigo Gray). Se considera 6:
el orden de cambio mnimo para los subconjuntos de 7: devolver .
T.
5.2. Numeros
combinatorios
2: mientras ((i 1) (ti = n k + 1)) hacer
1. Subconjuntos
3:
i i 1.
n de k elementos de un conjunto de n
elementos:
.
4: si i = 0 entonces
k
5:
devolver falso.
n!
.
Formula explcita: nk = k! (nk)!
n+1 n n
6: si no
Recurrencia: k = k1 + k .
7:
para j i hasta k hacer
8:
u j ti + 1 + j i.
Valores iniciales: n0 = nn = 1, n 0.
9:
devolver verdadero.
2. Permutaciones
de n letras que tienen exactamente
hni
k
ciclos:
.
Algoritmo 5.5 (colocador, k-subconjuntos). Coloca
k
hi h i
hn1i
un k-subconjunto (combinacion) de T en la posicion
Recurrencia: nk = n1
+
(n
1)
r.
h0ik1
hni k
Valores iniciales: k = [k = 0], 0 = [n = 0].
1: t0 r 0.
1: T , b0 0.
2: para i
j nk 1 decreciendo hasta 0 hacer
3:
b 2ri
4:
si b , b0 entonces
5:
T T {n i}.
6:
b0 b, r r b2i .
7: devolver T .
Rb
3. Permutaciones DdeE n letras que tienen exactamente Salida: El valor de a f (x) dx con la tolerancia estak ascendentes: nk .
blecida.
Dn1E
Dn1E
DnE
1: funcion S( f, [a, b], )
Recurrencia: k = (k + 1) k + (n k) k1
, c = b+a
.
2: h ba
D0E
2
2
Valores iniciales: k = [k = 0].
3: a1 a, b1 a2 c, b2 b.
b1 +a1
b2 +a2
4. Particiones
de un conjunto de n elementos en k cla- 4: c1 = 2 , c2 = 2 .
nno
S (a1 ,b1 ,c1 ,h)+S (a2 ,b2 ,c2 ,h)
5: L =
.
ses: k .
2
1
nno nn1o
nn1o
6: si 10
|L S (a, b)| < entonces
Recurrencia: k = k1 + k k .
7:
devolver L.
no
no
Valores iniciales: 0k = [k = 0], n0 = [n = 0].
8: si no
9:
devolver S( f, [a1 , b1 ], 2 )+S( f, [a2 , b2 ], 2 ).
5. Particiones p(n, k) de n cuya mayor parte es k.
Recurrencia: p(n, k) = p(n1, k1)+ p(nk, k).
Sea f : R R. Supongamos que J 1 y que los
Valores iniciales: p(n, k) = 0 si n 0, k 0 o puntos {xk = a + kh} subdividen al intervalo [a, b] en
k > n y p(1, 1) = 1.
2 J = 2M intervalos de anchura h = ba
. Haciendo
2J
h
T (0) = 2 ( f (a) + f (b)), la formula trapezoidal recurren6. Numeros de Catalan Cn .
2n
te es
1
M
Formula explcita: Cn = n+1
.
X
n
T (J 1)
Pn
2(2n+1)
T
(J)
=
f (x2k1 ).
+
h
Recurrencias: Cn+1 = n+2 Cn = k=0 CkCnk .
2
k=1
6.
6.1.
Metodos numericos
R J,K =
Interpolacion
4K R J,K1 R J1,K1
,
4K 1
6.4.
2h
7: b TRF(b),
c TRF(c).
2
2
2
0
,
exp
.
8:
exp
n
n
con error O(h ). La formula central de f para una funn
n
5
9:
1.
cion f C [a, b] con x2h, xh, x, x+h, x+2h [a, b]
10: para j 1 hasta n/2 hacer
es
0
11:
aj bj + cj , aj+n/2+1 bj cj .
f (x) 8 fc (x, h) 2 fc (x, 2h),
12:
n {Usar n para la inversa}
con error O(h4 ).
Algoritmo 6.3. Multiplicacion de polinomios con
TRF.
6.3. Integracion
m1
Entrada: Dos sucesiones a = {ak }n1
k=0 y b = {bk }k=0
Algoritmo 6.1 (Metodo de Simpson adaptativo).
que son los coeficientes de los polinomios p(x) =
Pn1
Pm1
k
k
En el siguiente algoritmo, definimos S (a, b, c, h) =
k=0 ak x y q(x) =
k=0 bk x .
h
( f (a) + 4 f (c) + f (b)).
Salida: Una sucesion c = {ck }n1
3
k=0 de los coeficientes
Entrada: Un intervalo de integracion [a, b], una fundel polinomio p(x) q(x).
cion f C 4 [a, b] y una tolerancia .
1: funcion MP(a, b)
8
2:
3:
4:
5:
6:
7:
8:
9:
10:
` dlog2 (n + m)e
para j n hasta 2` 1 hacer
a j 0.
para j m hasta 2` 1 hacer
b j 0.
=TRF(a), =TRF(b)
para k = 0 hasta k = n 1 hacer
k k k .
devolver c ITRF().
6.5.
8.
Algebra
lineal
8.1.
Ordenamiento y busqueda
Algoritmos basados en comparaciones
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
funcion OR(i, j)
d Lj
i 1, j, c 1
si i j entonces
devolver .
mientras c > 0 hacer
mientras L < d hacer
+ 1.
mientras L > d hacer
1.
si < entonces
Intercambiar L L
si no
c 0.
Intercambiar L L
OR(i, 1), OR( + 1, j).
8.2.
Algoritmos lineales
5:
si no
6:
j p.
7: si Li = K entonces
8:
devolver i.
9: si no si L j = K entonces
10:
devolver j.
11: si no
12:
devolver falso.
9.
9.1.
Programacion dinamica
Suma de subconjunto
8.3. Busqueda
binaria
8:
S(i 1, B ai ).
7:
si Xi1 = Y j1 entonces
8:
ci, j ci1, j1 + 1, bi, j 1.
9:
si no si ci1, j ci, j1 entonces
10:
ci, j ci1, j , bi, j 2.
11:
si no
12:
ci, j ci, j1 , bi, j 3.
13: devolver cm,n
5:
para i 1 hasta n d hacer
6:
R(i, j).
7: devolver M1,n
(Area),
12 |K(pi , p j , pk )|
F(i, j, k) =
9.3.
comun).
Entrada: Cadenas X e Y de sendas cardinalidades m y
n.
Salida: La longitud de la M. S. C. en cm,n .
1: para i 1 hasta m hacer
2:
ci,0 0.
3: para j 1 hasta n hacer
4:
c0, j 0.
5: para i 1 hasta m hacer
6:
para j 1 hasta n hacer
pi, j = k.
9.5.
11
11.
Algoritmos voraces
1: funcion H(x)
2: mientras x , p(x) hacer
3:
x p(x).
4: devolver p(x)
8:
9:
10:
w S(Q).
para todo {vi , w} E tal que p(i) = hacer
M(vi , Q), M M\{i}, p(i) p(w)+1.
Teorema 12.2. Un grafo conexo contiene un circuito Algoritmo 12.8. Busqueda a primera profundidad para
euleriano si, y solo si, a) cada vertice es de grado par; el algoritmo anterior.
b) las aristas pueden particionarse en ciclos ajenos.
1: funcion BBP(u)
Algoritmo 12.5 (Hierholzer). Halla un circuito eule- 2: cu G, t t + 1, du Lu t.
3: para todo uv E v , u hacer
riano pegando circuitos.
4:
si cv = W entonces
Entrada: Un grafo conexo con todos sus vertices de
5:
v v, au au + 1.
grado par.
6:
BPP(v).
Salida: Un circuito euleriano C de G.
7:
Lu mn(Lu , Lv ).
1: Sea v V. Construir un ciclo C empezando en v.
8:
si Lv > du entonces
2: mientras E(C) , E(G) hacer
9:
puv 1.
3:
Sea w C, u V tal que {w, u} < E(C).
10:
si Lv du entonces
4:
Construir un ciclo C empezando en w en el gra11:
su 1.
fo G E(C).
12:
si no si dv < du entonces
5:
Insertar a C en lugar de w.
13:
Lu mn(Lu , dv ).
14: cu B, t t + 1, fu t.
15: fin funcion
12.2. Recorridos
Algoritmo 12.6. Al hacer recorrido por profundidad,
si el grafo no es conexo, marcar cada vertice visitado
apropiadamente.
Entrada: Un grafo G = (V, E) con |V| = n.
Salida: Una funcion de profundidad o anchura p y el
numero c de componentes del grafo.
1: para todo 0 i n hacer
2:
p(i) .
3: M {1, . . . , n}, c 0.
4: mientras V(M) = falso hacer
5:
c c + 1, k mn(M), p(k) 0.
6:
M(vk , Q). {Si la busqueda es en profundidad,
Q es una pila. En otro caso, es una cola.}
7:
mientras Q , hacer
12.3.
Caminos mnimos
En esta seccion, G(E, V, W) es un grafo con el conjunto de aristas E y el conjunto de vertices V, con una
funcion de peso W : E R. La arista que conecta a
los vertices u, v V se escribe como euv E.
12.3.1.
Se desea encontrar todas las distancias d(u) de cualquier vertice a otro distinguido s.
13
Algoritmo 12.9 (Inicializacion). Establece el estado Salida: Una funcion de distancias mnimas dv y de predecesores v para v V(G).
inicial de conocimiento de distancias y rutas mas cortas.
1: V = V {s}, E 0 = E, W 0 = W
2: para todo v V hacer
1: funcion I(s)
3:
E 0 = E 0 {e sv , evs }
2: d(s) 0, (s) 0.
4:
W(e sv ) 0, W(evs ) .
3: para todo v V con v , s hacer
5:
si
BF(G(E 0 , V 0 , W 0 ), d s , s , s) es falso
4:
d(v) , (v) N.
entonces
La arista euv se dice tensa si d(u) + W(euv ) < d(v).
6:
devolver Hay un ciclo negativo.
7: para todo euv E hacer
Algoritmo 12.10 (Relajacion). Si se encuentra 8: W 00 (euv ) d s (u) + w(euv ) d s (v).
una arista tensa, se relaja con la siguiente fun- 9: para todo v V hacer
cion.
10:
D(G(E, V, W 00 ), dv , v , v).
1: funcion R(euv )
11: para todo u V hacer
2: si d(v) > d(u) + w(euv ) entonces
12:
dv (u) d s (v) + dv (u) d s (u).
3:
d(v) d(u) + w(euv ), (v) u.
Algoritmo 12.14 (Floyd). Encuentra las distancias
4:
devolver verdadero.
mnimas entre todos los vertices de un grafo pesado
5: si no
G = (V, E, w) en tiempo O(|V|3 )
6:
devolver falso.
Entrada: Matriz de pesos w de un grafo con n vertices.
Algoritmo 12.11 (Dijkstra). Aqu B una cola de prio- Salida: Matriz de distancias mnimas d y de caminos
p.
ridad de los vertices con prioridad d sobre el mnimo. Siendo as, el tiempo de ejecucion del algoritmo 1: para i 0 hasta n 1 hacer
2:
para j 0 hasta n 1 hacer
es O(|E| + |V| log |V|).
3:
di, j wi, j , pi, j i {Inicializacion}
Entrada: Un vertice s V(G) como fuente.
Salida: Una funcion de distancias mnimas d y de pre- 4: para i 0 hasta n 1 hacer
5:
di,i 0.
decesores .
6:
para
k 0 hasta n 1 hacer
1: funcion D(G(E, V, W), d, , s)
7:
para i 0 hasta n 1 hacer
2: I(s)
8:
para j 0 hasta n 1 hacer
3: M(B, s).
9:
di, j mn(di, j , di,k + dk, j ), pi, j pk, j .
4: mientras B , hacer
5:
u =S(B).
6:
para todo euv E(G) hacer
12.4. Ordenamiento topologico
7:
si R(euv ) entonces
Algoritmo 12.15. Algoritmo de ordenamiento to8:
M(B, v).
pologico. Corre en tiempo O(|V|+|E|).
Algoritmo 12.12 (Moore-Bellman-Ford). Encuentra Entrada: Un grafo dirigido acclico G = (V, E).
los caminos mnimos con una sola fuente en un grafo Salida: Un ordenamiento lineal de V tal que y x si,
pesado G(E, V, w) en tiempo O(|E||V|)
solo si, existe un camino dirigido de x hacia y.
1: Meter todos los vertices cuya valencia de entrada
1: funcion BF(G(E, V, W), d, , s).
es cero en una cola Q.
2: I(s).
2: mientras Q , hacer
3: para i 1 hasta |V| hacer
3:
Sacar a n de Q.
4:
para todo euv E(G) hacer
4:
devolver n.
5:
R(euv );
5:
para todo vertice m con una arista enm hacer
6: para todo euv E(G) hacer
6:
Quitar a e del grafo.
7:
si d(v) > d(u) + w(euv ) entonces
7:
si m no tiene otras aristas incidentes entonces
8:
devolver falso.
8:
Meter m a Q.
9: devolver verdadero.
12.3.2.
12.5.
Algoritmo 12.13 (Johnson). Este algoritmo corre en Algoritmo 12.16 (Kruskal). Encuentra en tiempo
tiempo O(|V||E| + |V|2 log |V|).
O(|E| log |V|) el mnimo a rbol generador de un grafo co14
12.6.
14:
15:
16:
17:
18:
19:
13.
Grafos hamiltonianos
13.1.
Localizacion de patrones
Algoritmo KMP
Algoritmo 12.17. Para determinar un ciclo hamiltoniano de bajo peso en un grafo que satisface la desigualdad
del triangulo.
Entrada: Un grafo completo pesado K de orden p
3.
Salida: Un ciclo hamiltoniano de peso menor que el
doble del ciclo hamiltoniano mnimo.
1: Encontrar el mnimo a rbol generador T de G.
2: Recorrer T en una busqueda a primero profundidad
obteniendo la secuencia de vertices vi1 , . . . , vi p .
3: devolver vi1 , . . . , vi p , vi1 .
12.7.
Flujo maximo
algoritmo anterior.
Entrada: Una cadena P con |P| = m
Salida: La funcion .
1: j 0.
2: para i 1 hasta m hacer
3:
si Pi = P j entonces
4:
(i) ( j).
5:
si no
6:
(i) j.
7:
mientras j > 0 y Pi , P j hacer
8:
j ( j).
9:
j j + 1.
13.2.
Deteccion de periodicidades
El borde de una cadena C = c0 . . . cn1 es la subcadena propia de longitud maxima B = c0 . . . cb1 de C tal
que B = cnb . . . cn1 .
Algoritmo 13.3. Calculo en tiempo O(n) de las longitudes de los bordes de los prefijos de la cadena C =
c0 . . . cn1 .
Entrada: Una cadena C con |C| = n
Salida: Un arreglo de las longitudes de los bordes B
tal que Bi es la longitud del borde de la subcadena
c0 . . . ci .
15
1: B0 0.
2: para i 0 hasta n 1 hacer
3:
b Bi .
4:
mientras b > 0 y Ci+1 , Cb hacer
5:
b Bb+1 .
6:
si Ci+1 = Cb entonces
7:
Bi+1 b + 1.
8:
si no
9:
Bi+1 0.
a=borrar_ceros(a); b=borrar_ceros(b);
if(a.size()<b.size()) return true;
else if(a.size()>b.size())
return false;
else return a<b; }
14.
Cuestiones miscelaneas
mul.clear();
if(v.size()==1)
return divide_d(u,v[0]-0);
int m,q=0,a1,a2,a3,a4,a5,j,inc;
d += (10/((v[0]-0)+1)+0);
u = mult(d,u); v = mult(d,v);
u.insert(u.begin(),0); j = 0;
mul.push_back("0"); mul.push_back(v);
for(int k=2;k<10;k++)
mul.push_back(suma(mul[k-1],v));
m = u.size()-v.size()-1;
while(j<=m)
{
a1 = u[j]-0; a2 = u[j+1]-0;
a3 = u[j+2]-0; a4 = v[0]-0;
a5 = v[1]-0;
if(a1==a4) q = 9;
else q = (a1*10+a2)/a4;
while(q*a5>((a1*10+a2-q*a4)*10+a3))
q--;
parcial.erase();
for(int l=j;l<j+v.size()+1;l++)
parcial += u[l];
if(menor(parcial,mul[q])) q--;
temp2 = resta(parcial,mul[q]);
for(int l=j;l<j+v.size()+1;l++)
u[l] = temp2[l-j];
ans += (char)(q+0); j++;
}
return borrar_ceros(ans); }