Anda di halaman 1dari 4

Tcnicas Algor e tmicas

Gonzalo Sainz-Trpaga (GomoX) a


26 de Julio de 2008 - http://www.pcmasmas.com

Este documento es el resumen de la charla sobre tcnicas algor e tmicas del 26 de Julio de 2008 organizada por los usuarios de PC++ (www.pcmasmas.com). A continuacin se discuten varias de las tcnicas habituales utilizadas o e en diseo de algoritmos para lograr programas ecientes. Para cada una de las ideas, se presentan algunos ejemplos n de algoritmos conocidos que la usan, y se discute su utilidad y sus limitaciones.

1.

Tipos de problemas

Podemos clasicar los problemas de cmputo segn el resultado que se busca obtener de una solucin. Por o u o ejemplo, dada la secuencia de nmeros [7,-2,8,3,-8,3,11,54], tenemos los siguientes: u Problemas de decisin: Existe algn nmero primo mayor que 5 en esta secuencia? Todos los nmeros o u u u de la secuencia son pares? Existe alguna subsecuencia que sume 0? Problemas de optimizacin: Hallar el nmero primo ms grande de esta secuencia. Ordenar la secuencia o u a de menor a mayor. Hallar la subsecuencia de suma m nima. Los casos de arriba consisten en, de alguna manera, recorrer un universo de posibles candidatos y examinar cada uno de ellos. Para los problemas de decisin y el primero de optimizacin, el universo son los nmeros de la o o u secuencia. Para el problema de ordenamiento, el universo de posibles candidatos son todas las permutaciones de la secuencia (habr que elegir una permutacin que est ordenada y devolverla para resolver el problema). a o e

2.

Tcnicas exactas e

Para problemas cuya dicultad de cmputo sea moderada o baja, es razonable exigir soluciones exactas a los o problemas. Veamos algunas ideas para el diseo de algoritmos que pueden ser de utilidad a la hora de atacar un n problema.

2.1.

Fuerza Bruta

El algoritmo de fuerza bruta es el ms trivial para un problema de optimizacin combinatoria: consiste en a o generar todo el universo de candidatos y visitarlos uno por uno, para hallar (o no) la solucin vlida a nuestro o a problema. Su aplicacin ms comn es para buscar colisiones en funciones de hash, donde se utiliza precisamente o a u porque no se conoce prcticamente nada sobre el comportamiento de las funciones. a

2.2.

Backtracking

Los algoritmos de backtracking son una renacin de los de fuerza bruta, donde nuevamente se explora todo el o universo de candidatos a solucin para un problema para elegir uno apropiado. La diferencia est en que se explora o a de forma ordenada, lo cual permite, dado un conocimiento del problema, ltrar de antemano grandes porciones del espacio de candidatos. Este recorte se denomina poda, y puede mejorar mucho el rendimiento del algoritmo. Se puede podar una porcin del espacio cuando se sabe que es imposible que un elemento de dicha porcin supere al o o mejor candidato que fue hallado hasta el momento. Sin embargo, en general no se puede garantizar la efectividad de las podas, por lo tanto pueden existir instancias del problema donde el tiempo sea peor que el del algoritmo de fuerza bruta.

2.3.

Dividir y Conquistar

La tcnica de divide and conquer se basa en la idea de que es ms fcil atacar un problema por partes que hacerlo e a a todo a la vez. Un algoritmo consta de tres etapas: dividir, conquistar y combinar. En ellas se divide una instancia 1

del problema en dos o ms instancias ms pequeas, que se resuelven (generalmente con una llamada recursiva) y a a n luego se combinan sus soluciones para obtener la solucin del problema original. Algoritmos que utilizan la tcnica o e de dividir y conquistar son Merge Sort, Quick Sort, el algoritmo de Strassen para multiplicacin de matrices y la o multiplicacin de polinomios que es la base de la transformada rpida de Fourier (FFT). Este tipo de algoritmos o a es naturalmente apropiado para ejecucin paralela. o

2.4.

Programacin dinmica o a

En muchos casos un problema no puede ser dividido en problemas disjuntos de forma util para la utilizacin o de un algoritmo de divide and conquer. La tcnica de programacin dinmica se basa en el aprovechamiento del e o a principio de optimalidad. Este principio dicta que la solucin ptima de un problema contiene soluciones ptimas o o o a problemas ms chicos (por ejemplo, cualquier subsecuencia de una secuencia ordenada est ordenada). Si bien no a a todos los problemas exhiben esta propiedad, se puede resolver de forma eciente aquellos problemas que s lo hacen comenzando a resolver desde los subproblemas ms pequeos y continuando hacia los ms grandes. En muchos a n a casos, los resultados de los subproblemas pueden almacenarse en una tabla en memoria porque son necesarios muchas veces, evitando as rehacer clculos innecesarios. Ejemplos de algoritmos de programacin dinmica son el a o a algoritmo de Dijkstra para caminos m nimos, el algoritmo (annimo) para el problema de la mochila (Knapsack o problem) y mucho ms, pero hay aplicaciones muy sencillas como por ejemplo la implementacin del clculo de a o a nmeros de Fibonacci. u

2.5.

Programacin lineal o

La programacin lineal es una tcnica que consiste en expresar el problema como la maximizacin de una o e o funcin lineal sujeta a una serie de restricciones lineales1 . El problema puede estar denido con variables continuas o o enteras (en este ultimo caso se denomina programacin entera). Si se logra expresar de forma concisa el problema o a resolver como ecuaciones de este tipo, existen algoritmos ecientes (como Simplex) para resolver los problemas. El problema de ujo en redes puede resolverse como un problema de programacin lineal. o

2.6.

Utilidad y limitaciones

Si bien utilizando las tcnicas mencionadas se pueden hacer algoritmos ecientes, en muchos contextos obtener e la solucin exacta puede tomar un tiempo prohibitivo. Por ejemplo, para el problema de guardas las cosas en una o caja para mudarse (donde se desea desperdiciar una cantidad m nima de espacio por caja), si bien es preferible usar menos cajas, no es razonable esperar una semana para tener la mejor solucin posible. Adems, aplicar o a correctamente algunas de estas tcnicas puede ser dif ya que muchas veces requiere un entendimiento profundo e cil del problema.

3.

Tcnicas aproximadas e

En algunos casos, los problemas pueden ser muy dif ciles para resolver de forma exacta en un tiempo razonable. Esto corresponde en general a problemas que se denominan NP-completos o NP-duros (NP-hard ). En estos casos, se usan heur sticas.

3.1.

Heur sticas y Metaheur sticas

Una heur stica es una regla de decisin, que puede no ser ideal, pero debe ser medianamente rpida. Por ejemplo, o a para llenar una caja con la mayor cantidad posible de cosas, una heur stica puede ser poner primero las cosas ms grandes. Esto no es necesariamente lo ptimo, pero permite llegar rpidamente a una solucin. Las llamadas a o a o metaheur sticas son heur sticas para el diseo de heur n sticas (o sea, ideas para construir algoritmos heur sticos).

1 Se dice que una funcin es lineal cuando es un polinomio de grado mximo 1. Por ejemplo, f (x, y) = 4x + 3y es una funcin lineal, a o p o pero f (x, y) = x2 + 7 (y) no lo es. De la misma manera, f (x, y) = log(x) + 2y no es una funcin lineal ya que no es un polinomio. o

3.2.

Algoritmos golosos

Una heur stica golosa o greedy reacciona frente a una sucesin de decisiones tomando aquella que le provee ms o a benecio inmediato, sin importar lo que ocurra ms tarde. Por ejemplo, para el problema de recorrer todas las a ciudades de un mapa y volver al inicio caminando la menor distancia total (problema del viajante de comercio o Traveling Salesman), un algoritmo goloso posible consiste en caminar cada vez hacia la ciudad ms prxima de a o las que todav no fueron visitadas. Si bien en algunos casos un algoritmo goloso puede ser ptimo, por lo general a o provee a lo sumo una mala aproximacin. Sin embargo, es muy rpido y por su sencillez puede ser usado como o a punto de partida para otros algoritmos.

3.3.

B squedas con lista tab u u

Una bsqueda con lista tab o taboo search consiste en partir de un candidato al azar (o generado con alguna u u otra heur stica) y modicarlo progresivamente (mediante un segundo algoritmo) hasta que no sea posible obtener mejoras haciendo esa modicacin. Esto tiene el problema de que encuentra un m o nimo o mximo local, mientras a que en los problemas de optimizacin se buscan extremos globales. Cuando se halla un candidato inmejorable, o se agrega a una lista tab y se reinicia el proceso, con la premisa de que no se podr generar un candidato que ya u a est en la lista. Esto impide que el algoritmo se bloquee en extremos locales. Como todas las metaheur e sticas, este mtodo tiene sus bemoles porque es simplista, pero puede presentar un comportamiento muy bueno en la prctica. e a

3.4.

Algoritmos bobos

En el mismo esp ritu que taboo search, existe otro tipo de algoritmo que jams se bloquea en extremos locales a que le impiden obtener candidatos mejores. Este algoritmo consiste simplemente en producir soluciones al azar y conservar la mejor de las que se observaron. Si bien puede parecer primitivo, dada la potencia de clculo de las a computadoras actuales este mtodo no es despreciable y en muchos casos puede dar un resultado vlido en un e a tiempo aceptable, sobre todo si se tiene en cuenta que insume muy poco tiempo codicar un algoritmo de este tipo (por lo tanto es particularmente apto para algoritmos de un unico uso).

3.5.

Algoritmos genticos e

Los algoritmos genticos modelan un problema de optimizacin como un proceso evolutivo del tipo que se e o observa en la naturaleza. Se crea una poblacin (un conjunto de candidatos, generalmente elegidos al azar) y se o realiza una simulacin en la que a medida que el tiempo va pasando, algunos candidatos procrean entre s y o , otros van muriendo. En cada generacin, un porcentaje de los recin nacidos puede experimentar mutaciones o e al azar. En cada generacin, se seleccionan los candidatos con mayor aptitud, de la misma manera que ocurre en o la naturaleza. Para resolver un problema con un algoritmo de este tipo, debe entonces denirse una funcin de o aptitud (que determine cuan bueno es un candidato), una funcin de procreacin (que tome dos candidatos y o o devuelva un tercero combinando las caracter sticas de los dos primeros) y una ultima funcin de mutacin (que o o modica de forma aleatoria alguna caracter stica de un candidato). El proceso es anlogo a la situacin natural y a o se suele usar cuando hay muchas variables en juego y la relacin que existe entre ellas no est clara. o a

3.6.

Algoritmos de colonia de hormigas

Los algoritmos de colonia de hormigas modelan el comportamiento de una colonia de hormigas (incre blemente!). Estos animales son especialmente aptos para el problema de caminos m nimos: cualquiera que haya paseado por un parque pudo observar como centenarse de hormigas recorren un camino relativamente directo entre el hormiguero y la fuente de alimento. Lo curioso es que cada individuo se maneja de manera independiente y la comunicacin o se hace mediante feromonas, sustancias producidas por las hormigas que dejan una suerte de marca olfativa en el lugar donde pasan. As un individuo puede depositar una cantidad de feromona proporcional a cuan bueno sea , el camino que hall. A la hora de elegir un camino en una interseccin, otras hormigas utilizan este olor como o o mecanismo de feedback sobre la experiencia de otros individuos. Esta simulacin se utiliza con excelentes resultados o para el problema del viajante de comercio, con el benecio aadido sobre otros algoritmos de que una simulacin n o en curso puede reaccionar a cambios en el terreno a recorrer en tiempo real. 3

3.7.

Otras metaheur sticas

Existen decenas de otras metaheur sticas similares a las que acabamos de enunciar. En general, existen dos tipos: por un lado aquellas que utilizan procedimientos ms formales, similares a taboo search, como es el caso a de GRASP (Greedy Randomized Adaptive Search Procedure). Por otro lado estn aquellas que simulan procesos a biolgicos o naturales en los que la observacin mostr que tienen comportamientos apropiados. Si bien el ejemplo o o o clsico es el de los algoritmos de colonia de hormigas, existen varios ms: a a Redes neuronales que simulan el comportamiento del cerebro humano Enjambres de part culas (particle swarm) que se acomodan en la posicin ms estable dentro de un o a sistema, comunicndose solo con sus vecinas para obtener feedback a

3.8.

Utilidad y limitaciones

Los mecanismos heur sticos son buenos cuando no es cr tico hallar una solucin realmente ptima al problema, o o y es razonable conformarse con una solucin bastante buena. En general las heur o sticas insumen tiempos muy inferiores a los requeridos por los algoritmos exactos. Sin embargo, cuando intervienen factores aleatorios (como es el caso con la mayor de las metaheur a sticas), existe una probabilidad de obtener resultados arbitrariamente malos. Para evitar eso, se busca lograr lo que se denomina algoritmos aproximados, que son algoritmos en los que el margen de error est acotado. Probar que un a algoritmo es aproximado para un cierto problema puede ser muy dif cil.

4.

Conclusiones

Dependiendo de las condiciones del problema a resolver, hay diferentes tcnicas que pueden ser utilizadas. En e general, las tcnicas exactas insumen tiempos ms grandes tanto de desarrollo como de ejecucin, y por lo tanto e a o pueden no funcionar en contextos donde haga falta una respuesta rpida. a Las tcnicas aproximadas basadas en metaheur e sticas tienen un comportamiento probabil stico: tienen un buen rendimiento en tiempos ms cortos, pero no dan garant sobre la calidad de los resultados. Sin embargo, ofrecen a as cualidades especiales que pueden ser cr ticas para producir resultados utilizables. El desarrollo ms avanzado de algoritmos contempla algoritmos h a bridos, donde se utilizan tanto tcnicas exactas e como aproximadas, y se las combina intentando obtener lo mejor de cada una.

Anda mungkin juga menyukai