Professional Documents
Culture Documents
Matemticas NM
Resumen
Desde pequeo me ha fascinado el mundo de las matemticas. Recuerdo que cuando era chico
uno de los primeros libros que recib fue un libro interactivo de matemticas. Mi fascinacin por
la matemtica terica me ha llevado siempre ha seguir buscando nuevos temas y estudiarlos.
Siempre encuentro un tema ms fascinante que otro. As es como un da encontr una teora,
teora de la complejidad computacional. Empec a investigar, a ver cmo funciona, en qu se
centra y me di cuenta de que estaba fuera de mis lmites matemticos. Aun as nunca par de
fascinarme. Siempre le peda a mi hermano que me explicar qu era esto o lo otro. As que aqu
estoy, intentando compartir la fascinacin que tengo por esta materia a ustedes. Tal vez no pueda
ser capaz de explicar todo lo que quisiera, pero ms adelante, si tengo la oportunidad, sin dudarlo
un segundo lo har. Mi trabajo se centrar en esto, en expresar la belleza de esta teora, en ver
cmo funcionan los algoritmos, qu es un algoritmo, crear un algoritmo como ejemplo. Dar a
conocer cmo se ordenan problemas, desde el ms simple y cotidiano hasta uno imposible de
resolver en la prctica.
INDICE
INTRODUCCIN
COMPLEJIDAD COMPUTACIONAL
ALGORITMOS
GRADOS DE COMPLEJIDAD
EJEMPLOS
TORRES DE HANI
ALGORITMOS DE ORDENAMIENTO
9
13
RECURSOS
17
TIEMPO
ESPACIO
17
20
PROBLEMAS
22
22
22
23
CONCLUSIN
23
REFERENCIAS
24
Introduccin
Cuenta la historia que en la India, especficamente en un templo en Benars, a orillas del ro
Ganges, se encontraba una cpula que sealaba el centro del mundo. All se encontraban 3
estacas de diamante. Una noche el rey hizo poner 64 discos en una de las estacas ordenados
con el mayor ms abajo y el menor arriba. Los monjes del templo al ver lo que aconteci,
intentaron mover los discos segn estas reglas: No se puede mover ms de un disco a la vez
y no se puede poner un disco de mayor radio sobre uno de menor. Otra teora dice que dios
deposit los mismos 64 discos sobre 3 estacas de diamante y se dice que el da que los
monjes logren mover los 64 discos, el mundo se acabar.
Esto fue slo un invento creado por el matemtico duard Lucas para publicitar el juego de
las torres de Hani. Segn sus clculos el nmero de movimientos para resolver este
problema es de 264 1 movimientos. No entraremos en la demostracin de porqu el
resultado es el dado, pero s podemos comprobar que efectivamente son aproximadamente
593 miles de millones de aos. Si se toma que se hace un movimiento por segundo,
ininterrumpidamente se puede realizar el siguiente clculo.
2641 seg .=
2641
2641
horas=
3600
3600243012
aos =
2641
miles de mill . de aos 593 miles de mill . de a os
36008640109
Estamos hablando de ms aos que la edad del universo. Lo que quera demostrar este
matemtico era lo imposible de resolver este problema en la prctica.
Comparando esto por ejemplo con un problema tan cotidiano como saber cul es el camino
ms corto de mi casa al hospital ms cercano, podemos darnos cuenta a simple vista que el
primer problema se ve mucho ms complejo de resolver que el segundo. Quin sera capaz
de calcular a mano 264? Con 220 ya tomara una cantidad de tiempo muy significativa. Para
acortar y optimizar el tiempo de calcular un problema como el anterior, se utilizan varios
recursos. Uno de ellos es el uso de algoritmos, principalmente de ordenamiento que sern
con los que trabajar en mi monografa. De esto se trata mi trabajo, de comparar problemas
ms difciles o fciles de resolver. La encargada de hacer este proceso es la complejidad
computacional.
Complejidad Computacional
La teora de la complejidad computacional 12estudia, tericamente, la complejidad en la
resolucin de un problema computacional. Para resolver un problema computacional se
utilizan algoritmos, que bsicamente son instrucciones a seguir para resolver el problema
dado. Los algoritmos se pueden ordenar segn su complejidad y los dos grandes parmetros
que se utilizan para medir el grado de complejidad de un problema computacional son la
memoria o espacio que se necesita para la determinacin de un problema en general y el
tiempo que demanda en determinar una solucin. La complejidad computacional se ocupa
entonces, entre otras cosas, de la limitacin prctica que puede alcanzar una computadora a
la hora de resolver un problema mediante algoritmos.
Esta teora se complementa con la teora de la computabilidad, que se basa principalmente
en expresar problemas como algoritmos. Cmo podemos ver, al fin y al cabo ambas teora
utilizan algoritmos. Lo que se busca es encontrar o calcular los recursos necesarios para
encontrar una solucin al problema en general, lo que se mide generalmente por el tamao
de las iteraciones o repeticiones necesarias para todas las instancias posibles de este mismo
problema.
A la hora de analizar cualquier problema, se debe tener en cuenta los siguientes
factores3:
1. Descripcin general del problema.
Es el objetivo del problema (Qu se quiere hacer?, qu se quiere lograr?)
2. Lista de parmetros y caractersticas de la solucin
Esto incluye: qu parmetros intervienen en el problema? cules son las reglas
1http://es.wikipedia.org/wiki/Teor
%C3%ADa_de_la_complejidad_computacional#Problemas.2C_algoritmos_y_complejidad
2 http://cala.unex.es/cala/epistemowikia/index.php?title=L%C3%ADmites_de_la_computaci
%C3%B3n
3 http://www.gridmorelos.uaem.mx/~mcruz/cursos/optimizacion/problemas.pdf
5
Algoritmos
Dentro de la complejidad computacional uno de los temas centrales es la utilizacin de
algoritmos para poder identificar y resolver problemas. Gracias a los algoritmos podemos
dividir los problemas por su grado de dificultad. Pero primero qu es un algoritmo? Un
algoritmo4 se define como un nmero de instrucciones a seguir para poder resolver un
clculo o un problema. Estas instrucciones estn ordenadas, definidas y son finitas.
Ahora hay que diferenciar entre el problema en general y una instancia o ejemplo del
problema. El algoritmo permite resolver el problema en general y lo podemos ocupar para
cualquier instancia que se nos presente.
Nos ocuparemos de un tipo especial de algoritmo denominado algoritmo de
ordenamiento. Existen dos tipos de algoritmos de ordenamiento, los iterativos y los
recursivos.
Los iterativos, se basan en ciclos para ordenar un conjunto de elementos. Estos son menos
complejos que los recursivos, que se llaman a s mismos. Esto quiere decir que el
algoritmo es utilizado por s mismo de manera inteligente para resolver un problema. Una
explicacin un poco coloquial para entender cmo funciona un algoritmo recursivo sera el
algoritmo llama a un amigo. Yo llamo a un amigo para preguntarle algo, pero l no sabe.
Entonces l llama a un amigo para preguntarle mientras yo espero la llamada de mi
amigo. Ese amigo tampoco sabe, as que llama a un amigo mientras el resto espera. Esto
ocurre as hasta que alguien llama a un amigo que s sabe, y despus empiezan en cadena
a responderse hasta que finalmente me llega la respuesta a mi pregunta inicial.
4 http://es.wikipedia.org/wiki/Algoritmo#An.C3.A1lisis_de_algoritmos
6
Grados de complejidad
Para dar cuenta de la complejidad de un algoritmo, se utilizan funciones bsicas. Esto
quiere decir que comparamos el algoritmo con alguna funcin bsica que se comporte de la
misma manera al tender a infinito. Se utiliza la notacin O(g(x)) (se lee: orden de g de x)
para indicar que el algoritmo se comporta igual que g(x).
Por orden de complejidad se tienen en primer lugar el orden O(1), que se utiliza para
funciones que se comportan como constantes; O(n) de orden lineal; O(nc), de orden
potencial; O(log n), de orden logartmico, O (cn) con n > 1, de orden exponencial. Existen
adems muchos otros rdenes que omitimos de esta lista. Slo sealamos los ms
conocidos.
Para el algoritmo Bubble Sort, que explicaremos ms adelante, se puede demostrar que se
n n
2
n2n
2
x 2x
2
n 2n
=lim n2 =
2
n
n n
2
= O (n2).
Ejemplos
Torres de Hani
Fig. 16. Muestra de un set de 8 discos (n=8) con 3 estacas con A como origen, B como
auxiliar y C como destino.
2. El propsito del problema es mover todos los discos desde la estaca origen (A) hasta
la estaca destino (C) siendo la estaca auxiliar (B) un intermedio en donde es posible
depositar un disco deseado. Las reglas son simples, slo se puede mover un disco a
la vez, no se puede depositar un disco de mayor radio sobre uno de menor y slo es
posible mover el disco que se encuentre ms arriba de cada estaca.
El algoritmo es el siguiente:
5 http://es.wikipedia.org/wiki/Torres_de_Han%C3%B3i
6 http://www.rodoval.com/heureka/hanoi/hanoi1.png
9
Algoritmo 1
1. Si n es par,
entonces mover disco 1 cclicamente de A a B, de B a C o de C a A
Si n es impar,
entonces mover disco 1 cclicamente de A a C, de C a B o de B a A
2. Si todos los discos estn en destino (C) fin
Si no,
mover un disco distinto al disco 1.
Veamos una instancia para que podamos entender el problema con ms facilidad.
Instancia 1:
n=3
10
Ciclicamente 1 se mueve de C a B.
[ ][ ][ ][ ][ ][ ][ ][
1 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 1
2 0 0 2 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 2 0 0 2
3 0 0
3 0 1
3 2 1
3 2 0
0 2 3
1 2 3
1 0 3
0 0 3
] [
] [
] [
1 0 0 0 0 0 0 0 0 0 0 1
2 0 0
2 1 0
0 1 2
0 0 2
12
n(n 1) n 2n
=
, que como vimos
2
2
14
Instancia nmero 1:
Calcular 24: elevar (2,4)
2*elevar (2,3), que es equivalente a decir elevar (2,4)
2*elevar (2,2), que es equivalente a decir elevar (2,3)
2*elevar (2,1), que es equivalente a decir elevar (2,2)
2*elevar (2,0), que es equivalente a decir elevar (2,1)
15
Instancia nmero 2:
elevar (3,6)
3*elevar (3,5)
3*elevar (3,4)
3*elevar (3,3)
3*elevar (3,2)
3*elevar (3,1)
3*elevar (3,0)
1
elevar (3,0) = 1 3*elevar (3,0) = 33*elevar (3,1) = 93*elevar
(3,2) = 273*elevar (3,3) = 813*elevar (3,4) = 2433*elevar
(3,5)= elevar (3,6) = 729
Podemos ver que ambas instancias ocupan el mismo algoritmo, o sea que su complejidad
es similar, pero el espacio o memoria que ocupan ambos es distintos. Ya que la instancia 2
se calcul en ms pasos o iteraciones, ocupa un mayor espacio que la instancia 1.
Recursos
Tiempo
16
son todos tiempos polinmicos. Dicho esto podemos escribir el tiempo polinmico en
general de la siguiente manera:
k
x
DTIME( )
P= k N
17
Se denomina como el conjunto de problemas en tiempo O(2 p(n)) con p(n) definida como una
funcin polinomial sobre n. Donde EXPTIME son todos problemas en tiempo exponencial
y DTIME es el tiempo de cmputo o que se demora en dar una respuesta.
8 http://es.wikipedia.org/wiki/Tiempo_exponencial
18
5
f(5) = 2
= 2125 = 4,253529586511730793292182592897137
= 28000 = 1,73766203193809456599982445949442408
Haciendo una tabla comparativa entre tiempo polinomial y tiempo exponencial tomando en
cuenta un procesador de computador que en promedio realiza una instruccin en 1,5*10 -9
segundos, tenemos los siguientes resultados:
n=
n2
5
3,75-8 segundos
25
9,375-7segundos
n4
9,375-7segundos
2n
4,8-8segundos
5,853755
segundos
5,03316482
segundos
125
2,343755
segundos
3,662109381
segundos
2,0512812
miles de
millones de
aos
1000
1,5-3segundos
25 minutos
5,1674275 miles
de millones de
aos
Podemos ver que una mquina promedio se demorara un tiempo imposible en la prctica,
en la prctica, para resolver un problema en tiempo exponencial con nmeros que para un
tiempo polinomial se consideran pequeos, como 125 y 1000. Con esto probamos que en
teora, un tiempo polinomial es resoluble en un tiempo tratable o aceptable, mientras que
las computadoras hoy en da seran incapaces de calcular un problema en tiempo
exponencial con nmeros relativamente pequeos.
Espacio
Otro recurso para medir la complejidad de un problema es el espacio o memoria que ocupa
este. Cmo en el tiempo requerido no entra como parmetro el espacio ocupado por un
19
2n
DSPACE( )
EXPSPACE= k N
9 http://es.wikipedia.org/wiki/PSPACE
10 http://es.wikipedia.org/wiki/EXPSPACE
20
Se denomina como el conjunto de problemas en espacio O(2 p(n)), donde EXPSPACE son
todos problemas en espacio exponencial y DSPACE la memoria necesaria para albergar la
respuesta.
Ocurre exactamente lo mismo que en el espacio polinomial. Comparando dos instancias de
la funcin exponencial f(n) =
2n
conclusin. Mientras ms grande sea n, mayor el espacio que se necesitar para albergar el
problema.
21
Problemas
Problemas del tipo P
los aos en mi colegio, hay algo que no est bien. De esto se tratan los problemas NP, de
problemas
difciles
de
resolver,
pero
fciles
de
comprobar.
Los problemas NP-completo13 son los ms difciles dentro de los problemas NP. Segn el
Teorema de Cook, cualquier problema que est en NP puede ser reducido a un problema
NP-Completo. Los problemas NP-Completo son los ms lejanos de estar en P por su grado
de complejidad. Un ejemplo de problema NP-Completo es el de la suma de subconjuntos.
El enunciado dice as: Dado un conjunto S de enteros, existe un subconjunto no vaco
de S cuyos elementos sumen cero?14 El problema no es resolverlo, ya que fcilmente se
puede comprobar con alguna instancia de un conjunto S, el problema es que no se ha
podido encontrar una solucin ms ptima que 2n 1 subconjuntos posibles.
Conclusin
13 http://es.wikipedia.org/wiki/NP-completo
14dem
23
Referencias
http://es.wikipedia.org/wiki/NP-completo
http://es.wikipedia.org/wiki/NP_(clase_de_complejidad)
http://es.wikipedia.org/wiki/P_(clase_de_complejidad)
http://es.wikipedia.org/wiki/EXPSPACE
http://es.wikipedia.org/wiki/PSPACE
http://es.wikipedia.org/wiki/Tiempo_exponencial
http://es.wikipedia.org/wiki/Ordenamiento_de_burbuja
http://es.wikipedia.org/wiki/Torres_de_Han%C3%B3i
http://www.rodoval.com/heureka/hanoi/hanoi1.png
http://es.wikipedia.org/wiki/Algoritmo#An.C3.A1lisis_de_algoritmos
http://cala.unex.es/cala/epistemowikia/index.php?title=L%C3%ADmites_de_la_computaci%C3%B
http://www.gridmorelos.uaem.mx/~mcruz/cursos/optimizacion/problemas.pdf
http://es.wikipedia.org/wiki/Teor
%C3%ADa_de_la_complejidad_computacional#Problemas.2C_algoritmos_y_complejidad
24
25
26