Está en la página 1de 16

Universidad San Sebastin Facultad de Ingeniera y Tecnologa Escuela de Ingeniera Civil Informtica Ctedra de Fundamentos de Ciencias de la Computacin

ANLISIS DE ALGORITMOS: COMPLEJIDAD Y CLASES DE PROBLEMAS.

Profesora: Jacqueline Khler Estudiantes: Oscar Bravo Yasser Isa Francisco Madrid

TABLA DE CONTENIDO
Introduccin ................................................................................... 3 Complejidad de Algoritmos ................................................................. 4 Por qu estudiar lacomplejidad de los algoritmos? ................................. 4 Notaciones para el Clculo de la Complejidad ........................................ 5 Cota Superior (Notacin O) ............................................................ 5 Cota Inferior (Notacin ) ............................................................. 6 Cota Ajusta o de Orden Exacto (Notacin ) ....................................... 6 Complejidad de Algoritmos Recursivos ................................................. 8 Clases de Problemas ........................................................................ 10 Clase de Problemas y Justificacin del Problema ................................... 10 Problemas de Decisin ................................................................... 11 Problemas de Localizacin .............................................................. 11 Problemas de Optimizacin. ............................................................ 12 Clases de Problemas ...................................................................... 12 Clase P ................................................................................... 12 Clase NP ................................................................................. 13 Clase NP-Completo .................................................................... 13 Clase NP-Duro .......................................................................... 14 Conclusin .................................................................................... 15 Referencias ................................................................................... 16

2013 de Oscar Bravo, Yasser Isa y Francisco Madrid.

INTRODUCCIN
Durante el diario vivir las personas se ven enfrentadas a realizar tareas, Cmo comprar el pan? Cmo construir un edificio? Cmo resolver una ecuacin de varias variables? Mientras las personas planifican intrnsecamente la resolucin de dichas tareas, durante el proceso van generando modelos de resolucinque son la estructura necesaria para poder realizar la solucin al problema o accin indicada. Estos modelos se denominan algoritmos. El algoritmo se puede definir como una serie de instrucciones que son llevadas a cabo de manera secuencial y brindan un mtodo riguroso para dar una solucin al tipo de problema determinado; adicionalmente debe ser preciso, definido, finito y entregar un resultado, es decir, no puede ser ambiguo y en cada ejecucin debe tener definido sus elementos de entrada y obligatoriamente terminar y producir una salida que ser el resultado de efectuar las instrucciones. Si bien la resolucin de un problema mediante un computadornecesita un algoritmo y un lenguaje de programacin, usualmente este ltimo se convierte en una traduccin del algoritmo segn el lenguaje utilizado. Dos aspectos importantes al momento de analizar los algoritmos son su diseo y sueficiencia, el primero refiere a la construccin de mtodos y series de instrucciones adecuadas al problema que se pretende resolver; el segundopermite medir el costo en tiempo y recursos que consume un algoritmo para poder llegar a la solucin determinada para la cual fue diseado, permitiendo comparar segn esta variable distintos algoritmos que resuelven el mismo problema segn el uso de recursos del sistema y su tiempo de ejecucin. En este texto estudiaremos la complejidad algortmica, que es una herramienta para poder analizar mediante la teora la eficiencia estimada de un algoritmo y dar la posibilidad de comparar los distintos mtodos existentes para posibilitar la eleccin del ms eficiente ante un problema dado, sin la necesidad de implementarlos; y adems nos entrega la facilidad de poder clasificar dichos problemas segn su complejidad.

Anlisis de Algoritmos: Complejidad y Clases de Problemas.

COMPLEJIDAD DE ALGORITMOS
POR QU ESTUDIAR LACOMPLEJIDAD DE LOS ALGORITMOS?
La existencia de diferentes variantes para poder dar solucin a un problema deja la disyuntiva de cual opcin utilizar, las distintas maneras de implementacin conllevan a la inevitable comparacin de la cantidad de recursos, en trminos de tiempo y memoria, que usa cada uno de ellos y con ello poder definir su eficiencia (Menor cantidad de recursos significa mayor eficiencia). Cuando se habla de eficiencia, se hace referencia especficamente al tiempo que tarda en ejecutarse y la cantidad de memoria que utiliza, estos dos factores son lo que en comn llamamos complejidad, y se categorizan de la siguiente manera: complejidad espacial (la cantidad de memoria que consume) y la complejidad temporal (el tiempo que necesita para resolver un problema) Si bien ambos resultados nos arrojan el coste del algoritmo, los resultados demostrados en el libro Introduccin a la programacin con Python y C(Marzal y Gracia Luengo, 2002)dan a entender que estos factores entrarn a competir y en algunos casos estaremos obligados a comprometer uno con el fin de mejorar otro. Por lo mismo antes de comenzar la realizacin de una aplicacin es recomendable elegir un algoritmo que ocupe pocos recursos, ya lo dijo Brian Kernighan "Controlar la complejidad es la esencia de la programacin de computadoras."Es mentiroso confiar en la creciente potencia de las mquinas y el abaratamiento de los costos como solucin a las complejidades y el excesivo consumo de recursos que pueda tener nuestra aplicacin; una mquina rpida slo nos solucionar el problema si la razn de crecimiento de nuestro algoritmo es lineal y depender de la cantidad de datos. Es as como el principal inters al estudiar la complejidad de un algoritmo radica en determinar su complejidad temporal cuando el tamao de la entrada de datos crece, esto mediante una expresin que modele la cantidad de operaciones elementales que se ejecutan en un algoritmo facilitamos la comparacin: La respuesta a ello es: notacin asinttica; o bien en ecuaciones de recurrencia para los casos de algoritmos recursivos.

2013 de Oscar Bravo, Yasser Isa y Francisco Madrid.

NOTACIONES PARA EL CLCULO DE LA COMPLEJIDAD


Las notaciones para el clculo de la complejidad representan una forma de organizar los algoritmos segn su tiempo de ejecucin (complejidad temporal), esta clasificacin se basa en cotas. A la hora de medir el tiempo, lo realizamos en funcin del nmero de operaciones elementales que realiza el algoritmo, donde estas operaciones elementales son aquellas en las que el computador realiza en un tiempo acotado.

COTA SUPERIOR (NOTACIN O)


La notacin O, tambin denominada cota superior, es una funcin que nos entrega una cota (o lmite) para el mayor tiempo de ejecucin y de esta forma obtener las acotaciones superiores de manera exacta segn los valores crecientes de su entrada. La definicin sera (Guillen, 2011): ( ( )) * ( ) | ( ) ( ) +

Esto quiere decir que O (g(n)) es un conjunto de funciones f(n) donde el valor de estas funciones es siempre menor que un determinado nmero constante c dado por ( ) para todos los valores de n mayores a n0, el cual denominamos tramo inicial. Esta notacin se utiliza mayoritariamente para acotar el peor caso, utilizado en el estudio de algoritmos, que define que cualquier otro tipo de entrada en el algoritmo tendr un tiempo de ejecucin menor o igual al especificado por esta funcin.

Ejemplos
1. 2. ( ) ( ) ( ) ( ) (
( )

Anlisis de Algoritmos: Complejidad y Clases de Problemas.

COTA INFERIOR (NOTACIN )


La notacin , tambin denominada cota inferior, es el inverso a la cota de Orden lo que quiere decir que nos entrega una cota o lmite para el menor tiempo de ejecucin. La definicin est dada por(Guillen, 2011): ( ( )) * ( ) | ( ) ( ) +

Esto quiere decir que (g(n))es un conjunto de funciones f(n)donde el valor de estas funciones es siempre mayor a ( ) para todos los valores de n mayores a n0, el cual denominaremos tramo inicial. El uso de esta notacin se usa de manera recurrente en el estudio de algoritmos para especificar el mejor caso, correspondiente al mejor tiempo de ejecucin, ya que cualquier otro caso tiene que ser forzosamente mayor a ste.

Ejemplos
1. 2. ( ( ) ) ( ) ( )

COTA AJUSTA O DE ORDEN EXACTO (NOTACIN )


Esta notacin es un caso especial, al momento de analizar un algoritmo se puede encontrar el caso de que est acotado superior e inferiormente mediante un nmero real positivo determinado. A este caso lo denominamos cota ajusta o de orden exacto y se representa por la notacin . La definicin est dada por (Guillen, 2011): ( ( )) ( ( )) ( ( ))

En otras palabras una funcin f(n) que pertenece a ( ( )) est acotada superior e inferiormente por funciones proporcionales a g(n) a partir de un valor determinado de n. Esta notacin se ocupa para encontrar el caso promedio.

2013 de Oscar Bravo, Yasser Isa y Francisco Madrid.

Ejemplos
1. 2. ( ) ( )

Anlisis de Algoritmos: Complejidad y Clases de Problemas.

COMPLEJIDAD DE ALGORITMOS RECURSIVOS


En las notaciones anteriormente estudiadas, el clculo del tiempo de ejecucin trataba de un simple clculo a partir de sus operaciones elementales. Este proceso cambia cuando nos enfrentamos a un algoritmo recursivo debido a que su tiempo de ejecucin se basa en la iteracin, es decir la complejidad de un algoritmo recursivo se expresar a travs de una ecuacin de recurrencia. Para resolver este tipo de ecuaciones debemos encontrar una expresin que no sea recursiva dentro de la misma. Para desarrollar esta accin se pueden seguir los pasos explicados en el libro Tcnicas de Diseo de Algoritmos (Guerequeta y Vallecillo, 2000) en base a tipos concretos de ecuaciones que se dan con mayor frecuencia. A continuacin se presentan las formas correspondientes ms frecuentes: Recurrencias Homogneas: Donde los coeficientes ai son nmeros reales y k es un nmero natural entre 1 y N. Estas recurrencias son de la forma: ( ) ( ) ( ) ( )

Recurrencias No Homogneas: Donde los coeficientes ai y b son nmeros reales, y p(n) es un polinomio de n de grado d. Para resolverla se debe convertir en homognea. Estas recurrencias son de la forma: ( ) ( ) ( ) ( ) ( ) .

Cambio de variable: Cuando n es potencia de un nmero real a

Recurrencias No Lineales: Cuando la ecuacin que relaciona T(n) con el resto de las variables no es lineal, debemos intentar convertirla en una lineal.

2013 de Oscar Bravo, Yasser Isa y Francisco Madrid.

Ejemplos
1. Sucesin de Fibonacci (Homognea): ( ) ( ) ( ) . Cambiando ( ) , o lo que es igual a

Segn condiciones iniciales ( ) ( ) obtenemos su ecuacin caracterstica , cuyas races son: Por lo que: ( ) (

Para calcular las constantes c1 y c2 necesitamos utilizar las condiciones inicialesde la ecuacin original, obteniendo:
( ) { ( ) ( ( ) ) ( ( ) )

Sustituyendo entonces en la ecuacin anterior, obtenemos:

( )

Anlisis de Algoritmos: Complejidad y Clases de Problemas.

2. Recursiva Cambio de variable: Con , la ecuacin ( ) ( ) de ( ) ( ) ( ) . Si ecuacin como: ( ) ( ) Haciendo el cambio de variable ( , donde n es una potencia podemos escribir la

) obtenemos la ecuacin:

Cuya solucin viene dada por la expresin: ( )

Deshaciendo el cambio que realizamos al principio obtenemos que: ( ) Calculando entonces las constantes a partir de las condiciones iniciales: ( ) ( )

CLASES DE PROBLEMAS
CLASE DE PROBLEMAS Y JUSTIFICACIN DEL PROBLEMA
Cuando nos enfrentamos a un problema y tenemos la conciencia de estar frente a l tratamos de buscar una respuesta lgica, dentro de este contexto uno de los problemas diarios es la toma de decisiones como por ejemplo: comer o no comer, salir o no salir, etc. La computacin trata de modelar los problemas, pero no todos los problemas son iguales, hay problemas de la vida real en la cual su respuesta es demasiada compleja o an peor, no se conoce la respuesta en forma absoluta sino una aproximacin segn su comportamiento. Es por esto que los problemas se clasifican segn complejidad para ser resueltos.

10

2013 de Oscar Bravo, Yasser Isa y Francisco Madrid.

PROBLEMAS DE DECISIN
Los problemas de decisin son los que pueden tener dos resultados definidos; una respuesta positiva o negativa (si o no, 1 0). Estos tipos de problemas se pueden formalizar como los problemas que verificacin de que si un conjunto de smbolos (frase) pertenece o no al conjunto de frases (lenguaje), denominado lenguaje formal. La importancia de este tipo de problemas es tal, que casi todas las clasificaciones de problemas pueden ser tratados como de decisin, destacando las clases P y NP (Que trataremos ms adelante). En resumen, un problema de decisin (cualquier tipo de problema de decisin) se puede representar por un Lenguaje.

Ejemplos:
1. Testeo de Primalidad: Determinar si un nmero entero es un nmero primo. 2. Ciclo Hamiltoniano: Determinar si existe un camino dentro de un grafo que recorra todos los otros puntos una sola vez, comenzando y terminando en el mismo punto.

PROBLEMAS DE LOCALIZACIN
Los problemas de localizacin, tratan de buscar la mejor localidad (ubicacin) de algo dentro de un espacio delimitado. En otras palabras, responden a la pregunta En qu punto estamos dentro del mapa? O en trminos ms conocidos Cul es la regin donde se encuentra el punto P? Ejemplos: 1. Encontrar un punto dentro de un polgono: Este es un problema de localizacin dentro de la rama de la geomtrica computacional, en los cuales se utilizan arreglos y coordenadas para encontrar respuesta. 2. Dada la atenuacin de las seales elctricas, las empresas deben utilizar regeneradores para alcanzar nuevos destinos (Algoritmos heursticos y metaheursticos para el problema de localizacin de regeneradores., 2010)

11

Anlisis de Algoritmos: Complejidad y Clases de Problemas.

PROBLEMAS DE OPTIMIZACIN.
Los problemas de optimizacin intentan buscar una solucin (la mejor) en un conjunto de elementos. En forma matemtica est dada por las ecuaciones del tipo mximos y mnimos de una funcin.

En conclusin un problema de optimizacin busca encontrar la maximizacin o minimizacin de un criterio determinado (ganancias, tiempo, recursos, etc.)

Ejemplos
1. Determinar las dimensiones indicadas de un contenedor de lquidos de tal manera que la cantidad a almacenar sea lo menor posible. 2. Algoritmo Hungariano: Determinar las asignaciones que representen un menor costo dentro la oferta y la demanda.

CLASES DE PROBLEMAS
CLASE P
Matemticamente, los problemas se pueden clasificar por su tiempo en la cual se demora en encontrar la solucin, a esto se le llama el tiempo polinomio (Clase P). Un problema se puede resolver en un tiempo polinomio, cuando el algoritmo se puede relacionar con el tamao de la entrada que tiene. Estos problemas tienen un comportamiento muy similar a un polinomio lineal. Tambin se dice que un problema del tipo P, es un problema que se puede resolver de manera fcil y en un tiempo razonable para la computacin actual, la mayora de los problemas no son de este tipo.

Ejemplos
1. Ordenar una lista de valores. 2. Buscar el camino mnimo entre dos ciudades en un mapa. 12

2013 de Oscar Bravo, Yasser Isa y Francisco Madrid.

CLASE NP
Los problemas de clase NP (tiempo polinomial no determinista) (La N significa NO determinstico y la P es de polinomio), son aquellos que no se pueden resolver en un tiempo polinomico, son problemas complejos en la cual se requiere mucho tiempo, y hay veces que solo se puede llegar a una respuesta aproximada, debido a un tiempo exponencial para la respuesta ptima. Este tipo de problemas prueba todas las alternativas posibles, ya sea usando fuerza bruta u otros mtodos.

Ejemplos
1. Factorizacin de nmeros primos. 2. BinPacking, que consiste en dada una secuencia de nmeros, empaquetarlos en el mnimo nmero de latas posible, teniendo en cuenta que cada lata tiene capacidad M y la suma de sus nmeros introducidos en la lata no puede exceder el valor M.

CLASE NP-COMPLETO
La clase de problemas NP-Completo, es un subconjunto de los problemas NP, sin embargo son los problemas ms difciles dentro de esta categora, por tanto la gran mayora no pertenece a la clase de complejidad P. El motivo de esto es que si se tiene una solucin polinmico para este tipo de problemas, todos los problemas NP tendran una solucin en tiempo polinmico. Un problema NPCompleto es aquel que puede convertirse en otro problema NP en un tiempo polinomial aceptable.

Ejemplos
1. Uno de los ms clsicos es el del viajante el cual consiste en recorrer todas las ciudades de un mapa sin repetir ninguna, y volviendo al punto de partida. 2. La resolucin de un sudoku.

13

Anlisis de Algoritmos: Complejidad y Clases de Problemas.

CLASE NP-DURO
Esta categora, a pesar de su nombre, no es una subcategora de los problemas NP. La clase de los problemas NP-duros las podemos definir que si suponiendo que tenemos una solucin para el problema en tiempo constante, podemos utilizar dicha solucin para resolver un problema NP-Completo en tiempo lineal. Un problema NP-Duro es cualquier tipo de problema, que no necesariamente pertenece al conjunto de la clase NP. Por ejemplo si se tiene una solucin exponencial a un problema NP-Duro que puede ser convertido a una solucin exponencial de un problema NP, pero puede que tenga otra solucin que se realice en tiempo polinmico. En otras palabras, estos resultados son utilizados para demostrar que ciertos problemas de NP-Completo son presuntamente intratables.

Ejemplos
1. El problema de la suma de subconjuntos: dado un conjunto S de enteros, existe un subconjunto no vaco de S cuyos elementos sumen cero? 2. El problema de parada: consiste en tomar un programa y sus datos y decidir si va a terminar o se ejecuta indefinidamente.

14

2013 de Oscar Bravo, Yasser Isa y Francisco Madrid.

CONCLUSIN
Se puede concluir que los mtodos descritos anteriormente del clculo de complejidad de algoritmos, pueden llegar a ser fundamentales a la hora de desarrollar aplicaciones computacionales. Esto se puede afirmar ya que estos mtodos se utilizan con el fin de optimizar los recursos utilizados con respecto al tiempo de ejecucin de la aplicacin, lo que lleva a que una mayor cantidad de mquinas sean capaces de soportar la aplicacin desarrollada de forma ptima. Por otro lado, las clases de problema aportan al definir de qu tan complejo es el problema a tratar, ya que sin esto se tendera a atacar cualquier problema de la misma forma, lo cual llevara a una sucesin de fracasos o an peor, no solucionar por completo el problema que se presenta.

15

Anlisis de Algoritmos: Complejidad y Clases de Problemas.

REFERENCIAS
Diaz, A. (2003). Seccin de Computacin - Analisis y Complejidad de Algoritmos. Recuperado el 27 de 03 de 2013, de Completitud NP: http://delta.cs.cinvestav.mx/~adiaz/anadis/NPCompleteness2k5.pdf Gracia Luengo, I., & Marzal, A. (2002). Introduccin a la programacin con Python y C. Castelln, Espaa: Publicacions de la Universitat Jaume I. Guerequeta, R., & Vallecillo, A. (2000). Tecnicas de Diseo de Algoritmos (2 ed.). Malaga, Espaa: Publicaciones de la Universidad de Malaga. Guillen, P. (2011). Algoritmos - Cotas de Complejidad. Recuperado el 27 de 03 de 2013, de http://pier.guillen.com.mx/algorithms Hernandez, F., & Rocha, S. (2003). Analisis, Diseo e Implementacin de Algoritmos. Coyoacn, Mxico: Fondo Editorial FCA, Universidad Nacional Autnoma de Mxico. Martin, G., Toledo, F., & Cervern, V. (1995). Fundamentos de Informtica y Programacin. Valencia, Espaa: Universidad de Valencia. Rodriguez, O. (2010). Algoritmos heursticos y metaheursticos para el problema de localizacin de regeneradores. Espaa: Universidad Rey Juan Carlos.

16

También podría gustarte