Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Es una estrategia de búsqueda por la cual se sigue una heurística consistente en elegir la opción óptima en cada paso
local con la esperanza de llegar a una solución general óptima. Este esquema algorítmico es el que menos dificultades
plantea a la hora de diseñar y comprobar su funcionamiento. Normalmente se aplica a los problemas de
optimización.
Una aproximación voraz consiste en que cada elemento a considerar se evalúa una única vez, siendo
descartado o seleccionado, de tal forma que si es seleccionado forma parte de la solución, y si es
descartado, no forma parte de la solución ni volverá a ser considerado para la misma. Una forma de ver los
algoritmos voraces es considerar la estrategia de Vuelta atrás, en la cual se vuelve recursivamente a
decisiones anteriormente tomadas para variar la elección entonces tomada, pero eliminando esa recursión
y eligiendo la mejor opción. El término voraz se deriva de la forma en que los datos de entrada se van
tratando, realizando la elección de desechar o seleccionar un determinado elemento una sola vez.
Al contrario que con otros métodos algorítmicos, no siempre es posible dar una solución a un problema
empleando un algoritmo voraz. No todos los problemas son resolubles con algoritmos voraces.
Los algoritmos voraces tienden a ser bastante eficientes y pueden implementarse de forma relativamente
sencilla. Su eficiencia se deriva de la forma en que trata los datos, llegando a alcanzar muchas veces una
complejidad de orden lineal. Sin embargo, la mayoría de los intentos de crear un algoritmo voraz correcto
fallan a menos que exista previamente una prueba precisa que demuestre la correctitud del algoritmo.
Cuando una estrategia voraz falla al producir resultados óptimos en todas las entradas, en lugar de
algoritmo suele denominarse heurística. Las heurísticas resultan útiles cuando la velocidad es más
importante que los resultados exactos (por ejemplo, cuando resultados "bastante buenos" son suficientes).
Algoritmo de Dijkstra
La idea subyacente en este algoritmo consiste en ir explorando todos los caminos más cortos que parten
del vértice origen y que llevan a todos los demás vértices; cuando se obtiene el camino más corto desde el
vértice origen, al resto de vértices que componen el grafo, el algoritmo se detiene. El algoritmo es una
especialización de la búsqueda de costo uniforme, y como tal, no funciona en grafos con aristas de costo
negativo (al elegir siempre el nodo con distancia menor, pueden quedar excluidos de la búsqueda nodos
que en próximas iteraciones bajarían el costo general del camino al pasar por una arista con costo
negativo).
Algoritmo de Prim
El algoritmo de Prim es un algoritmo de la teoría de los grafos para encontrar un árbol recubridor mínimo en
un grafo conexo, no dirigido y cuyas aristas están etiquetadas.
En otras palabras, el algoritmo encuentra un subconjunto de aristas que forman un árbol con todos los
vértices, donde el peso total de todas las aristas en el árbol es el mínimo posible. Si el grafo no es conexo,
entonces el algoritmo encontrará el árbol recubridor mínimo para uno de los componentes conexos que
forman dicho grafo no conexo.
El algoritmo fue diseñado en 1930 por el matemático Vojtech Jarnik y luego de manera independiente por el
científico computacional Robert C. Prim en 1957 y redescubierto.
Los algoritmos voraces suelen ser bastante simples. Se emplean sobre todo para resolver problemas de
optimización, como por ejemplo, encontrar la secuencia óptima para procesar un conjunto de tareas por un
computador, hallar el camino mínimo de un grafo, etc. Habitualmente, los elementos que intervienen son:
Esta técnica 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 números grandes
(Karatsuba), análisis sintácticos (análisis sintáctico top-down) y la transformada discreta de Fourier.
El término Divide y Vencerás en su acepción más amplia es algo más que una técnica de diseño de
algoritmos. De hecho, suele ser considerada una filosofía general para resolver problemas y de aquí que su
nombre no sólo forme parte del vocabulario informático, sino que también se utiliza en muchos otros
ámbitos. En nuestro contexto, Divide y Vencerás es una técnica de diseño de algoritmos que consiste en
resolver un problema a partir de la solución de subproblemas del mismo tipo, pero de menor tamaño.
Precedentes históricos
Diseño e implementación
La resolución de un problema mediante esta técnica consta fundamentalmente de los siguientes pasos:
En primer lugar ha de plantearse el problema de forma que pueda ser descompuesto en k subproblemas
del mismo tipo, pero de menor tamaño.
En segundo lugar han de resolverse independientemente todos los subproblemas, bien directamente si son
elementales o bien de forma recursiva. El hecho de que el tamaño de los subproblemas sea estrictamente
menor que el tamaño original del problema nos garantiza la convergencia hacia los casos elementales,
también denominados casos base.
Por último, combinar las soluciones obtenidas en el paso anterior para construir la solución del problema
original.
Recursión
Los algoritmos de “divide y vencerás” están naturalmente implementados, como procesos recursivos. En
ese caso, los subproblemas parciales encabezados por aquel que ya ha sido resuelto se almacenan en la
pila de llamadas de procedimientos.
Pila explícita
Los algoritmos de divide y vencerás también pueden ser implementados por un programa no recursivo que
almacena los subproblemas parciales en alguna estructura de datos explícita, tales como una pila, una
cola, o una cola de prioridad.
Programacion dinamica
El matemático Richard Bellman inventó la programación dinámica en 1953 que se utiliza para optimizar
problemas complejos que pueden ser discretizados y secuencializados.
La programación dinámica no cuenta con una formulación matemática estándar, sino que se trata de un
enfoque de tipo general para la solución de problemas, y las ecuaciones específicas que se usan se deben
desarrollar para que representen cada situación individual.
Comúnmente resuelve el problema por etapas, en donde cada etapa interviene exactamente una variable
de optimización (u optimizadora).
Un grado de creatividad.
Un buen conocimiento de la estructura general de los problemas de programación dinámica para reconocer
cuando un problema se puede resolver por medio de estos procedimientos y como esto se puede llevar a
cabo.
El problema se puede dividir en etapas que requieren una política de decisión en cada una.
El efecto de la política de decisión en cada etapa es transformar el estado actual en un estado asociado con la
siguiente etapa.
El procedimiento de solución está diseñado para encontrar una política óptima para el problema completo.
Dado un estado actual, una política óptima para las etapas restantes es independiente de la política adoptada
en las etapas anteriores (principio de optimalidad).
Se dispone de una relación recursiva que identifica la política óptima par la etapa n dada la política óptima
para la etapa (n+1)
Ramificacion y Acotacion o poda
La técnica de Ramificación y poda se suele interpretar como un árbol de soluciones, donde cada rama nos
lleva a una posible solución posterior a la actual. La característica de esta técnica con respecto a otras
anteriores (y a la que debe su nombre) es que el algoritmo se encarga de detectar en qué ramificación las
soluciones dadas ya no están siendo óptimas, para «podar» esa rama del árbol y no continuar malgastando
recursos y procesos en casos que se alejan de la solución óptima.
Nuestra meta será encontrar el valor mínimo de una función f(x) (un ejemplo puede ser el coste de
manufacturación de un determinado producto) donde fijamos x rangos sobre un determinado conjunto S de
posibles soluciones. Un procedimiento de ramificación y poda requiere dos herramientas.
Ramificación y Corte
Ramificación y corte es un método de optimización combinacional para resolver problemas de enteros lineales, que
son problemas de programación lineal donde algunas o todas las incógnitas están restringidas a valores enteros. Se
trata de un híbrido de ramificación y poda con métodos de planos de corte.
Esta técnica es usada por un gran número de problemas NP-hard, tales como:
Problema de la mochila.
Es un problema de optimización combinatoria, es decir, que busca la mejor solución entre un conjunto finito de
posibles soluciones a un problema. Modela una situación análoga al llenar una mochila, incapaz de soportar
más de un peso determinado, con todo o parte de un conjunto de objetos, cada uno con un peso y valor
específicos. Los objetos colocados en la mochila deben maximizar el valor total sin exceder el peso máximo.
Programación lineal.
Programación no lineal.
El problema del vendedor viajero, problema del vendedor ambulante, problema del agente viajero o problema del
viajante (TSP por sus siglas en inglés (Travelling Salesman Problem)), responde a la siguiente pregunta: dada una lista
de ciudades y las distancias entre cada par de ellas, ¿cuál es la ruta más corta posible que visita cada ciudad
exactamente una vez y al finalizar regresa a la ciudad origen? Este es un problema NP-Hard dentro en la optimización
combinatoria, muy importante en la investigación de operaciones y en la ciencia de la computación.
Es un problema estándar en la teoría de locación. En éste se trata de asignar N instalaciones a una cantidad N de
sitios o locaciones en donde se considera un costo asociado a cada una de las asignaciones. Este costo dependerá de
las distancias y flujo entre las instalaciones, además de un costo adicional por instalar cierta instalación en cierta
locación específica. De este modo se buscará que este costo, en función de la distancia y flujo, sea mínimo.
Algoritmo Heuristico
Se denomina heurística al arte de inventar. En programación se dice que un algoritmo es heurístico cuando la
solución no se determina en forma directa, sino mediante ensayos, pruebas y reensayos. El método consiste en
generar candidatos de soluciones posibles de acuerdo a un patrón dado; luego los candidatos son sometidos a
pruebas de acuerdo a un criterio que caracteriza a la solución.