You are on page 1of 7

Algoritmo Fuerza Bruta: C a r a c t e r s t i c a s

Es el algoritmo ms simple posible. Consiste en probar todas las posibles posiciones del patrn en el texto. Requiere espacio constante. Realiza siempre saltos de un carcter. Compara de izquierda a derecha. Realiza la bsqueda del patrn en un tiempo O(mn). Realiza 2n comparaciones previstas de los caracteres del texto.

Lgica

Se sita el patrn en la primera posicin, y se compara carcter a carcter hasta encontrar un fallo o llegar al final del patrn. Se pasa a la siguiente posicin y se repite el proceso. El proceso finaliza al alcanzar el final del texto No existe un preprocesamiento del patrn.

Descripcin

No requiere ninguna fase de preproceso previo, ni un espacio extra constante adems del espacio asignado al patrn y al texto. Para la bsqueda: Consiste en la comparacin de todas las posiciones del texto entre 0 y el nm, si una ocurrencia del patrn corresponde o no. Si encuentra una no ocurrencia, o una ocurrencia total del patrn, salta un carcter hacia la derecha.

Ejemplo Se alinea la primera posicin del patrn con la primera posicin del texto, y se comparan los caracteres uno a uno hasta que se acabe el patrn, esto es, se encontr una ocurrencia del patrn en el texto, o hasta que se encuentre una discrepancia.

Algoritmos Vorces o Avidos: Los algoritmos voraces suelen ser bastante simples. Se emplean sobre todo para resolver problemas de optimizacin, como por ejemplo, encontrar la secuencia ptima para procesar un conjunto de tareas por un computador, hallar el camino mnimo de un grafo, etc. Habitualmente, los elementos que intervienen son:

un conjunto o lista de candidatos (tareas a procesar, vrtices del grafo, etc); un conjunto de decisiones ya tomadas (candidatos ya escogidos); una funcin que detemina si un conjunto de candidatos es una solucin al problema (aunque no tiene por qu ser la ptima); una funcin que determina si un conjunto es completable, es decir, si aadiendo a este conjunto nuevos candidatos es posible alcanzar una solucin al problema, suponiendo que esta exista; una funcin de seleccin que escoge el candidato an no seleccionado que es ms prometedor; una funcin objetivo que da el valor/coste de una solucin (tiempo total del proceso, la longitud del camino, etc) y que es la que se pretende maximizar o minimizar;

Para resolver el problema de optimizacin hay que encontrar un conjunto de candidatos que optimiza la funcin objetivo. Los algoritmos voraces proceden por pasos. Inicialmente el conjunto de candidatos es vaco. A continuacin, en cada paso, se intenta aadir al conjunto el mejor candidato de los an no escogidos, utilizando la funcin de seleccin. Si el conjunto resultante no es completable, se rechaza el candidato y no se le vuelve a considerar en el futuro. En caso contrario, se incorpora al conjunto de candidatos escogidos y permanece siempre en l. Tras cada incorporacin se comprueba si el conjunto resultante es una solucin del problema. Un algoritmo voraz es correcto si la solucin as encontrada es siempre ptima. El esquema genrico del algoritmo voraz es: funcion voraz(C:conjunto):conjunto { C es el conjunto de todos los candidatos } S <= vacio { S es el conjunto en el que se construye la solucion} mientras solucion(S) y C <> vaciohacer x <= el elemento de C que maximiza seleccionar(x) C <= C \ {x} si completable(S U {x}) entonces S <= S U {x} si solucion(S) entonces devolver S si no devolver no hay solucion El nombre voraz proviene de que, en cada paso, el algoritmo escoge el mejor "pedazo" que es capaz de "comer" sin preocuparse del futuro. Nunca deshace una decisin ya tomada: una vez incorporado un candidato a la solucin permanece ah hasta el final; y

cada vez que un candidato es rechazado, lo es para siempre.

Ejemplo: Se desea pagar una cantidad de dinero a un cliente enmpleando el menor nmero posible de monedas. Los elementos del esquema anterior se convierten en:

candidato: conjunto finito de monedas de, por ejemplo, 1, 5, 10 y 25 unidades, con una moneda de cada tipo por lo menos; solucion: conjunto de monedas cuya suma es la cantidad a pagar; completable: la suma de las monedas escogidas en un momento dado no supera la cantidad a pagar; funcion de seleccion: la moneda de mayor valor en el conjunto de cnadidatos an no considerados; funcin objetivo: nmero de monedas utilizadas en la solucin.

Algoritmos Paralelos: Los algoritmos paralelos son importantes porque es ms rpido tratar grandes tareas de computacin mediante la paralelizacin que mediante tcnicas secuenciales. Esta es la forma en que se trabaja en el desarrollo de los procesadores modernos, ya que es ms difcil incrementar la capacidad de procesamiento con un nico procesador que aumentar su capacidad de cmputo mediante la inclusin de unidades en paralelo, logrando as la ejecucin de varios flujos de instrucciones dentro del procesador. Pero hay que ser cauto con la excesiva paralelizacin de los algoritmos ya que cada algoritmo paralelo tiene una parte secuencial y debido a esto, los algoritmos paralelos puedes llegar a un punto de saturacin (ver Ley de Amdahl). Por todo esto, a partir de cierto nivel de paralelismo, aadir ms unidades de procesamiento puede slo incrementar el coste y la disipacin de calor. Algoritmos Probabilsticos: Son aquellos en los que en algn punto del algoritmo donde hay que tomar una decisin, esta se elige basndose en el azar.Por tanto el mismo algoritmo puede comportarse de forma distinta aplicado a los mismos datos. Esto es interesante por ejemplo en casos en los que es muy costoso elegir la alternativa ms adecuada. El inters radica en que el algoritmo probabilista funcione mejor que el determinista en promedio. El algoritmo probabilistico se ejecuta ms eficientemente en tiempo y/o memoria, a costa de no dar la respuesta correcta el 100% de las ejecuciones.

Algoritmos Determinsticos: Son aquellos que bajo las mismas condiciones producen la misma salida. En un algoritmo las condiciones del problema suelen ser los datos de entrada Algoritmos NO Determinsticos: un algoritmo no determinstico es un algoritmo que con la misma entrada ofrece muchos posibles resultados. No se puede saber de antemano cul ser el resultado de la ejecucin de un algoritmo no determinstico. Algoritmo Divide y vencers: Hace referencia a un refrn que implica resolver un problema difcil, dividindolo en partes ms simples tantas veces como sea necesario, hasta que la resolucin de las partes se torna obvia. La solucin del problema principal se construye con las soluciones encontradas. En las ciencias de la computacin, el trmino divide y vencers (DYV) hace referencia a uno de los ms importantes paradigmas de diseo algortmico. El mtodo est basado en la resolucin recursiva de un problema dividindolo en dos o ms subproblemas de igual tipo o similar. El proceso contina hasta que stos llegan a ser lo suficientemente sencillos como para que se resuelvan directamente. Al final, las soluciones a cada uno de los subproblemas se combinan para dar una solucin al problema original. Esta tcnica es la base de los algoritmos eficientes para casi cualquier tipo de problema como, por ejemplo, algoritmos de ordenamiento (quicksort, mergesort, entre muchos otros), multiplicar nmeros grandes (Karatsuba), anlisis sintcticos (anlisis sintctico top-down) y la transformada discreta de Fourier. Por otra parte, analizar y disear algoritmos de DyV son tareas que lleva tiempo dominar. Al igual que en la induccin, a veces es necesario sustituir el problema original por uno ms complejo para conseguir realizar la recursin, y no hay un mtodo sistemtico de generalizacin. El nombre divide y vencers tambin se aplica a veces a algoritmos que reducen cada problema a un nico subproblema, como la bsqueda binaria para encontrar un elemento en una lista ordenada (o su equivalente en computacin numrica, el algoritmo de biseccin para bsqueda de races). Estos algoritmos pueden ser implementados ms eficientemente que los algoritmos generales de divide y vencers; en particular, si es usando una serie de recursiones que lo convierten en simples bucles. Bajo esta amplia definicin, sin embargo, cada algoritmo que usa recursin o bucles puede ser tomado como un algoritmo de divide y vencers. El nombre decrementa y vencers ha sido propuesta para la subclase simple de problemas.

Algoritmos Metaheursticos: Se usan para resolver un tipo de problema computacional general, usando los parmetros dados por el usuario sobre unos procedimientos genricos y abstractos de una manera que se espera eficiente. Normalmente, estos procedimientos son heursticos. El nombre combina el prefijo griego "meta" ("ms all", aqu con el sentido de "nivel superior") y "heurstico" (de , heuriskein, "encontrar"). Las metaheursticas generalmente se aplican a problemas que no tienen un algoritmo o heurstica especfica que d una solucin satisfactoria; o bien cuando no es posible implementar ese mtodo ptimo. La mayora de las metaheursticas tienen como objetivo los problemas de optimizacin combinatoria, pero por supuesto, se pueden aplicar a cualquier problema que se pueda reformular en trminos heursticos, por ejemplo en resolucin de ecuaciones booleanas. Las metaheursticas no son la panacea y suelen ser menos eficientes que las heursticas especficas, en varios rdenes de magnitud, en problemas que aceptan este tipo de heursticas crudas. Algoritmos de Programacin Dinmica: La Programacin Dinmica es una potente herramienta que permite la resolucin de una amplia familia de problemas de optimizacin dentro de la teora del control, El principal inconveniente, compartido con todas las tcnicas de optimizacin de tipo combinatorio, es su alto coste computacional. Esto hace que la solucin exacta no pueda ser obtenida en ocasiones en un tiempo razonable. Por este motivo, en las ltimas dcadas y coincidiendo con el desarrollo de los sistemas de computacin (software y hardware) se han venido desarrollando diversas tcnicas que permiten una considerble reduccin de la complejidad computacional, aunque a veces los niveles alcanzados siguen sin ser suficientemente vlidos. Por otra parte, los algoritmos de Programacin Dinmica pueden ser reformulados para su ejecucin en un computador paralelo, de manera que la solucin se obtenga en un tiempo mucho menor. Si bien hace pocos aos los computadores paralelos eran enormemente costosos, hoy en da es posible implementar computadores paralelos virtuales, a un coste aceptable y fcilmente escalables, a su partir de redes de estaciones de trabajo ordinarias, lo que genricamente se denomina como cluster. Frente a los supercomputadores paralelos comerciales, los clusters hacen uso del sistema operativo Linux y de herramientas de programacin que siguen la filosofa del software libre. De este modo, todo el software y la documentacin necesarios para montar, configurar y mantener el cluster se encuentran disponibles de manera libre y gratuita en Intenet. As es posible obtener sistemas de muy alto rendimiento a bajo costo. En esta Tesis se desarrollan algoritmos paralelos de Programacin Dinmica generales para clusters, utilizando el paso de mensajes como paradigma de programacin, que sean de utilidad en el campo de control de procesos

Algoritmos Ramificacin y Acotacin: El mtodo de diseo de algoritmos Ramificacin y poda (tambin llamado Ramificacin y Acotacin) es una variante del Backtracking mejorado sustancialmente. El trmino (del ingls, Branch and Bound) se aplica mayoritariamente para resolver cuestiones o problemas de optimizacin. La tcnica de Ramificacin y poda se suele interpretar como un rbol de soluciones, donde cada rama nos lleva a una posible solucin posterior a la actual. La caracterstica de esta tcnica con respecto a otras anteriores (y a la que debe su nombre) es que el algoritmo se encarga de detectar en qu ramificacin las soluciones dadas ya no estn siendo ptimas, para podar esa rama del rbol y no continuar malgastando recursos y procesos en casos que se alejan de la solucin ptima. El pseudocdigo del algoritmo de Ramificacin y poda es el siguiente: Funcion RyP { P = Hijos(x,k) mientras ( no vacio(P) ) x(k) = extraer(P) if esFactible(x,k) y G(x,k) < optimo si esSolucion(x) Almacenar(x) else RyP(x,k+1)

Algoritmos de Vuelta atrs:

En su forma bsica, la idea de backtracking se asemeja a un recorrido en profundidad dentro de un grafo dirigido. El grafo en cuestin suele ser un rbol, o por lo menos no contiene ciclos. Sea cual sea su estructura, existe slo implcitamente. El objetivo del recorrido es encontrar soluciones para algn problema. Esto se consigue construyendo soluciones parciales a medida que progresa el recorrido; estas soluciones parciales limitan las regiones en las que se puede encontrar una solucin completa. El recorrido tiene xito si, procediendo de esta forma, se puede definir por completo una solucin. En este caso el algoritmo puede bien detenerse (si lo nico que se necesita es una solucin del problema) o bien seguir buscando soluciones alternativas (si deseamos examinarlas todas). Por otra parte, el recorrido no tiene xito si en alguna etapa la solucin parcial construida hasta el momento no se puede completar. En tal caso, el recorrido vuelve atrs exactamente igual que en un recorrido en profundidad, eliminando sobre la marcha los elementos que se hubieran aadido en cada fase. Cuando vuelve a un nodo que tiene uno o ms vecinos sin explorar, prosigue el recorrido de una solucin.

Algoritmo de Backtracking proc Backtracking (X[1 . . . i ]: TSolucin, ok: B) variables L: ListaComponentes inicio si EsSolucin (X) entonces ok CIERTO en otro caso ok FALSO L=Candidatos (X) mientras ok ^ Vaca (L) hacer X[i + 1] Cabeza (L); L Resto (L) Backtracking (X, ok) finmientras finsi fin Podemos visualizar el funcionamiento de una tcnica de backtracking como la exploracin en profundidad de un grafo. Cada vrtice del grafo es un posible estado de la solucin del problema. Cada arco del grafo representa la transicin entre dos estados de la solucin (i.e., la toma de una decisin). Tpicamente el tamao de este grafo ser inmenso, por lo que no existir de manera explcita. En cada momento slo tenemos en una estructura los nodos que van desde el estado inicial al estado actual. Si cada secuencia de decisiones distinta da lugar a un estado diferente, el grafo es un rbol (el rbol de estados).

You might also like