Você está na página 1de 48

Teora de la computacin

Jos A. Rodrguez Melquiades


Computacin eficiente
Porque nos preocupamos por la indecidibilidad?
decidible
indecidible
L = {0
n
1
n
: n > 0}
Problemas de decidible
L = {0
n
1
n
: n > 0}
Entrada w:
n := |w|
SI (n es impar)
rechazar
PARA (i = 0 : n/2)
SI (w
i
0 w
n-i
1)
rechazar
SI NO
aceptar
Tarea:
Implementar este
algoritmo
se puede llegar desde A hasta B en 100 pasos?
PARA (todo camino que sale del punto A de longitud a lo mas 100)
probar este camino.
SI ( se llega a B)
aceptar.
SI NO
parar.
8
6
10
14
14
3
3
9
8
4
2
5
5
9
A
B
Suponga n exmenes, k slots
(n = 200, k = 10)
Exmenes vrtices
Slots colores
Conflictos arcos
TEOCOMP TCP
INGLES
ARQ.
...
Asignar uno de los k colores a los vrtices de modo tal que
vrtices adyacentes no tienen el mismo color.
se puede programar exmenes finales sin que halla conflicto?
PARA (cada posible asignacin de colores a los vrtices)
probar la asignacin
SI( cada arco tiene nodos de colores diferentes)
Aceptar.
SI (Todo la coloracin falla)
Rechazar.
TEOCOMP TCP
INGLES
ARQ.
...
se puede juntar a las personas de modo tal que cada pareja sea feliz?
Personas vrtices
felices arcos
Pareamiento matching
PARA( cada posible pareamiento)
SI (cada par es feliz)
aceptar.
SI (para todos los pares falla)
rechazar.
Con seguridad, es posible escribir un programa computacional ...
...pero, que sucede cuando se ejecutan ?
L = {0
n
1
n
: n > 0}
se puede llegar desde A hasta B en 100 pasos?
PARA (todo camino que sale del punto A de longitud a lo mas 100)
probar este camino.
SI ( se llega a B)
aceptar.
SI NO
parar.
8
6
10
14
14
3
3
9
8
4
2
5
5
9
A
B
Edsger Dijkstra
(1930-2002)
Existe una mejor
manera para hacer esto ?
Si: Algoritmo de Dijkstra
se puede juntar a las personas de modo tal que cada pareja sea feliz?
PARA( cada posible pareamiento)
SI (cada par es feliz)
aceptar.
SI (para todos los pares falla)
rechazar.
se puede mejorar este
procedimiento?
Si: Algoritmo de Edmonds
Jacks Edmonds
Tarea: Analizar e
Implementar este
algoritmo
Necesidad por el uso de la optimizacin
Problemas de ruteo
Como rutear las llamadas a
travs de la red de telfonos?
Problemas de empaquenamiento
Cuantos camiones son
necesarios para transportar todas
las cajas?
Problemas de horarios
Cmo se hacen los horarios para
completar los trabajos tanto como sea
posible?
30 min
40 min
45 min
50 min
50 min
0 min
Algoritmos rpidos:
Shortest paths
1956
Matchings
1965
y otros pocos
Proving theorems
J. von Neumann
Princeton, 20 March 1956
Dear Mr. von Neumann:
With the greatest sorrow I have learned of your illness.
[]

Since you now, as I hear, are feeling stronger, I would
like to allow myself to write you about a mathematical
problem: [] This would have consequences of the
greatest importance. It would obviously mean that in
spite of the undecidability of the Entscheidungsproblem,
the mental work of a mathematician concerning Yes-or-
No questions could be completely replaced by a
machine.
Kurt Godel
a) Se conoce algunas afirmaciones verdaderas que no son probados. Pero
mejor olvidmonos de ellos.

b) Existe un computador para hallar la prueba en un tiempo razonable ?
52 aos despus, todava no lo sabemos!
Equivalencia de los problemas de optimizacin
scheduling packing
covering routing
Todos ellos son tan difciles como otros que existen.
theorem-proving
Richard Karp
Por lo tanto, todos ellos son fciles o difciles?
No lo sabemos, pero se sospecha que todos son
difciles.
(1972)
Teora de complejidad
Decidibilidad y complejidad
La decidibilidad no impone limites en los recursos computacionales, los
cuales son necesarios para resolver un problema.
Cules son los recursos computacionales?

a) Tiempo.

b) Espacio (memoria).
Existen ciertos problemas decidibles que pueden demandar grandes
cantidades de tales recursos.
Por lo tanto:

La teora de decidibilidad clasifica los problemas en:

1. Decidibles (solucionables).

2. Indecidibles (no solucionables).
La teora de complejidad clasifica los problemas decidibles en:

1. Tratables.

2. Intratables.
Medida del tiempo de ejecucin
Sea M una MTND que, para todas las entradas, PARA. Entonces:
El tiempo de ejecucin o complejidad de tiempo de M esta dado por la
funcin:
Tiempo de ejecucin
Donde:
n : Tamao de entrada w.

f(n): Cantidad de transiciones que M ejecuta cuando procesa w.
F: N N
NOTA:
M se ejecuta en tiempo f(n).

M es una MT de tiempo f(n).
Notacin O
Sean las funciones f,g : N N
+
. Entonces

f(n) O(g(n)) o equivalentemente que f(n) = O(g(n)),

si existen enteros positivos c, m tal que:
n m, se cumple: f(n) c g(n)
Esta notacin, indica que g(n) es el limite
superior para f(n), es decir que f crece mas
lentamente que g.
Ejemplo:
Sea =
0
+
1
+
2

2
+ +

. Entonces =


En efecto
Para n 1, tenemos:

0
+
1
+
2

2
++

1
++



0
+
1
+
2

2
++


= c

, donde c =
0
+
1
+
2

2
+ +


Sean las funciones f(n) = 5n
3
+ 2n
2
+ 22n + 6 y g(n) = n
3
. Entonces

f(n) = O(g(n)) = O(n
3
)
En efecto
Ejemplo:
Sea c = m = 6. Entonces 5n
3
+ 2n
2
+ 22n + 6 6 n
3
, n m.
Sean f(n) = n
2
y g(n) = n dos funciones. Entonces

g(n) es O(f(n)) = O(n
2
)
En efecto
Ejemplo:
Ejemplo:
Sean las funciones f(n) = 3n log
2
n + 5n log
2
log
2
n + 2 y g(n) = n
log n. Entonces

Quien domina asintticamente a quien ?
Para probar que f(n) es O(g(n)), se debe:

a) Escoger o comprobar la existencia de los valores para m y c.

b) Probar que, n m, f(n) c g(n).
NOTA:
Para probar que f(n) no es O(g(n)), se debe:

a) Probar que no existen m y c tal que , n m, f(n) c g(n).
Principios generales
1. Factores constante no tienen valor:

si f(n) = c g(n), entonces f(n) = O(g(n)), c > 0
Ejemplo:
si 2n
3
= 2000n
3
, entonces 2n
3
= O(2000n
3
), m = 0, c = 2000

2. Trminos de orden inferior no tienen importancia:

Si

f(n) = a
k
n
k
+ . . . + a
2
n
2
+ a
1
n + a
0
, con a
k
> 0.

Entonces


f(n) = O(a
k
n
k
) = O(n
k
)
2
n
+ n
3
= O(2
n
), m = 1, c = 2
Ejemplo:
Propiedades:
(1) Si f(n) = O(g(n)) y n, h(n) 0. Entonces h(n).f(n) = O(h(n).g(n))
Sea
f(n) cg(n), n m.

Entonces

h(n).f(n) h(n).c.g(n) = c.h(n)g(n).

Por lo tanto:

h(n)f(n) = O(h(n)g(n)).
Prueba
(2) Si f(n) g(n), n m. Entonces f(n) + g(n) = O(g(n))
Sea
f(n) g(n), n m,

entonces
f(n) + g(n) g(n) + g(n) = 2g(n).

Por lo tanto:
f(n) + g(n) = O(g(n))
Prueba
(3) Si f(n) = O(g(n)) y g(n) = O(h(n)). Entonces f(n) = O(h(n))
Sean f(n) c
1
g(n), n m
1
y g(n) c
2
h(n), n m
2
. Entonces
considerando m = max {m
1
, m
2
} y c = c
1
. c
2
, tenemos que n m se
cumple:

n m
1
y n m
2


Por lo tanto: f(n) c
1
g(n) y g(n) c
2
h(n) .

Remplazando g(n) por c
2
.h(n) en f(n) c
1
g(n), obtenemos:

f(n) c
1
c
2
h(n)

Por lo tanto: f(n) = O(h(n)).
Prueba
(4) Si f
1
(n) = O(g(n)) , f
2
(n) = O(h(n)) y g(n) = O(h(n)) . Entonces

f
1
(n) + f
2
(n) = O(h(n))
Sean f
1
(n) c
1
g(n), n m
1
,
f
2
(n) c
2
h(n), n m
2

g(n) c
3
h(n), n m
3


Entonces considerando m = max{m
1
, m
2
,

m
3
} , tenemos que n m se cumple:

f
1
(n) + f
2
(n) c
1
g(n) + c
2
h(n)

Remplazando g(n) por c
3
h(n),obtenemos:

f
1
(n) + f
2
(n) c
1
c
3
h(n) + c
2
h(n) f
1
(n) + f
2
(n) (c
1
c
3
+ c
2
)h(n)

Por lo tanto: f
1
(n) + f
2
(n) = O(h(n))

Prueba
(5) Si f(n) y g(n) son polinomios donde grad(g(n)) grad(f(n)). Entonces
f(n) = O(g(n))
(6) Si f(n) y g(n) son polinomios donde grad(g(n)) grad(f(n)). Entonces
f(n) no es O(g(n))
(7) Si f(n) es un polinomio, entonces f(n) = O(a
n
), a > 1, f(n) = O(g(n))
(8) a
n
para a > 1 no es O(f(n)) para ningn polinomio f(n).
NOTA
Las funciones de complejidad comunes son las siguientes:
O Nombre de funcin de complejidad
O(1) Constante
O(n) Lineal
O(n
2
) Cuadrtica
O(n
3
) Cbica
O(log n) Logartmica
O(n log n) Lineal logartmica
O(2
n
) Exponencial
O(n!) Factorial
n n n
2
n
3
log
2
(n) 2
n
n!
5 5 25 125 2 32 120
10 10 100 1000 3 1024 3628800
20 20 400 8000 4 1048576 2.4x10
18

30 30 900 27000 5 1x10
9
2.6x10
32

40 40 1600 64000 5 1.1x10
12
8.1x10
47

50 50 2500 125000 6 1.1x10
15
3.0x10
64

100 100 10000 1000000 7 1.2x10
30
> 10
157

Ejemplo:
Ejemplo:
Sea L = {a
n
b
n
/ n 0}. Los algoritmos para decidir L se representa por
medio de la MT M.
1. Escanear toda la cinta, rechazando w si existe un a despus de un b.


2. Repetir: Mientras existan smbolos as y bs
3. Escanear la cinta, remplazando por x un nico a y un nico b.


4. Aceptar si todos los as y bs hubieran sido remplazados por x. Caso
contrario rechazar si sobra un a o un b.
Algoritmo 1:
Anlisis de complejidad del algoritmo 1:
En 1. Para escanear la cinta es necesario n transiciones. Adems para retornar
el cabezal de lectura a la posicin inicial se necesitaran otras n transiciones.

Por lo tanto: O(n) + O(n) = 2O(n) = O(n).
En 2. y 3. se necesitaran O(n) pasos o transiciones. Adems como cada
iteracin remplaza dos smbolos, entonces ser necesario n/2 escaneos de la
cinta.

Por lo tanto:

n/2*O(n) = O(n
2
) transiciones.
En 4. se necesita un solo paso para decidir la aceptacin o el rechazo de w.
Por lo tanto: O(n) pasos.
Finalmente la complejidad del algoritmo es:


O(n) + O(n
2
) + O(n) = O(max{n, n
2
, n}) = O(n
2
).
1. Escanear toda la cinta, rechazando w si existe un a despus de un b.


2. Repetir: Mientras existan smbolos as y bs en la cinta
3. Escanear la cinta para determinar si la cantidad total de as y
bs es par o impar. Si es impar, rechazar.


4. Escanear remplazando los as y despus los bs alternados.
Este proceso empieza con el primer a y el primer b.


5. Aceptar si la cinta no tuviera as y bs. Caso contrario rechazar.
Algoritmo 2:
En 1, 3, 4, 5. Para escanear la cinta es necesario que cada etapa efectu n
transiciones.

Por lo tanto: O(n).
En 1, 5. Son ejecutadas una nica vez.
Por lo tanto: O(n).
En 4. Se elimina a la mitad la cantidad de as y bs cada vez que esta etapa se
ejecuta.
Anlisis de complejidad del algoritmo 2:
En 2. Este loop se ejecuta a lo mas 1 + log
2
n veces (se adiciona 1 para hacer
cero la cantidad de smbolos en la cinta).

Ejemplo: log 6 = 4, pero es necesario 5 iteraciones para llegar en 8, 4, 2, 1 0
smbolos en la cinta.
La complejidad de 2, 3, 4 es:

O(1 + log
2
n) (O(n) + O(n)) = 2O(n)*O(1 + log
2
n)

= O(n)*O(1 + log
2
n)

= O(n + n log
2
n) = O(n log
2
n).


Finalmente:

O(n) + O(n log n) + O(n) = O(n log n).
Una prueba del algoritmo 2 para w = a
13
b
13
es:
x x x x x x x x x x x x x x x x x x x x x x x x x x
x x x x x x x a x x x x x x x x x x x x b x x x x x
x x x a x x x a x x x a x x x x b x x x b x x x b x
x a x a x a x a x a x a x x b x b x b x b x b x b x
a a a a a a a a a a a a a b b b b b b b b b b b b b
Resumen:
Algoritmo 1: O(n
2
)

Algoritmo 2: O(n log n)

Você também pode gostar