M todos de dise o de algoritmos
This presentation is the property of its rightful owner.
Sponsored Links
1 / 23

Métodos de diseño de Algoritmos PowerPoint PPT Presentation


  • 81 Views
  • Uploaded on
  • Presentation posted in: General

Métodos de diseño de Algoritmos. La algoritmia consiste en identificar técnicas generales (esquemas algorítmicos) capaces de dar solución a un gran número de problemas. Métodos general de resolución.

Download Presentation

Métodos de diseño de Algoritmos

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


M todos de dise o de algoritmos

Métodos de diseño de Algoritmos

La algoritmia consiste en identificar técnicas generales (esquemas algorítmicos) capaces de dar solución a un gran número de problemas.


M todos general de resoluci n

Métodos general de resolución

Elección del esquema. Todos los problemas pueden verse como instancias de algún esquema algorítmico

Identificación del problemas con el esquema elegido.

Estructuras de datos.

Algoritmo completo.

Estudio del coste.


Esquemas algor tmicos comunes

Esquemas algorítmicos comunes

Métodos voraces

Dividir y vencer

Vuelta atrás (Backtracking).

Ramificación y Acotación (Branch and bound).

Programación Dinámica.


Otros esquemas

Otros Esquemas

  • Programación lineal.

  • Programación entera.

  • Recocido simulado (Simulated Annealing).

  • Redes neuronales.

  • Algoritmos Genéticos.

  • Búsqueda Tabú.


Algoritmos voraces

Algoritmos voraces

  • Se aplica a problemas de optimización.

  • Consiste en ir seleccionando elementos de un conjunto de candidatos que se van incorporando a la solución.

  • Nunca se deshace una decisión ya tomada:

    • los candidatos desechados no vuelven a ser considerados y los seleccionados permanecen hasta el final

  • Es crucial determinar la función de selección apropiada que asegure que la solución obtenida es óptima.


Algoritmos voraces1

Algoritmos voraces

funcion voraz (C: conjunto)

devuelve (S:conjunto)

S = Ø

while !solucion(S) && C  Ø

x = seleccionar(C)

C = C - {x}

if completable(S  {x})

S = S  {x}

return S


Algoritmos voraces2

Algoritmos voraces

Funciones a particularizar para cada problema:

  • solucion(S). Decide si el conjunto S es o no solución.

  • seleccionar(C). Selecciona el candidato más prometedor según el criterio de la función objetivo. Determina el comportamiento del algoritmo.

  • Completable. Determina si un conjunto de elementos seleccionados puede llegar a ser una solución o no.


Algoritmos voraces3

Algoritmos voraces

Ejemplos:

  • Problema de la mochila:

    Se tienen n objetos fraccionables y una mochila.

    El objeto i tiene peso pi , 1i  n.

    La mochila tiene capacidad C.

    Si se mete una fracción xi , 0  xi 1, del objeto i en la mochila, entonces se consigue un beneficio bi xi .

    El objetivo es llenar la mochila de manera que se maximice el beneficio total.

    Pero como la mochila tiene capacidad C, el peso total de todos los objetos metidos en ella no puede superar esa cantidad.


Algoritmos voraces4

Algoritmos voraces

Ejemplos:

  • Búsqueda de caminos de longitud mínima:

    Longitud o coste de un camino: suma de los pesos de las aristas que lo componen.

    Cálculo de la longitud mínima de los caminos existentes entre dos vértices dados.

  • Árboles de recubrimiento de coste mínimo.

  • Códigos de Huffman.

  • El problema de la selección de actividades.

  • El problema de la minimización del tiempo de espera.


Divide y vencer s

Divide y vencerás

  • Es una técnica recursiva que consiste en dividir un problema en varios subproblemas del mismo tipo.

  • Las soluciones a estos subproblemas se combinan para dar solución al problema.

  • Cunado los subproblemas son más pequeños que un umbral prefijado, se resuelven mediante un algoritmo específico. Si su tamaño es mayor, se vuelven a descomponer.


Divide y vencer s1

Divide y Vencerás

funcion divide_y_venceras (problema)

if suficientemente-simple (problema)

return solucion-simple (problema)

else

descomposicion (problema) {p1 … pk }

for cada pi

si = divide_y_venceras(pi)

return combinacion (si… sk)


Divide y vencer s2

Divide y Vencerás

Ejemplos:

  • La búsqueda dicotómica

  • La ordenación por fusión

  • El algoritmo de ordenación rápida de Hoare

  • Algoritmos de selección y de búsqueda de la mediana

  • Multiplicación de enteros grandes

  • Potenciación de enteros: Criptografía

  • Multiplicación de matrices

  • Calendario de un campeonato


Algoritmos de exploraci n en grafos

Algoritmos de exploración en grafos

  • Gran cantidad de problemas se pueden formular en términos de una búsqueda ciega en grafos.

  • La solución es uno de los nodos:

    • No hay ningún orden o procedimiento establecido para llegar directamente a ese nodo: es necesario explorar exhaustivamente el grafo hasta encontrarlo.

  • Adicionalmente a la búsqueda sistemática en grafos (árboles) se complementa con criterios que permiten podar, o desechar antes de ser exploradas, las ramas que los satisfacen.


Algoritmos de exploraci n en grafos1

Algoritmos de exploración en grafos

  • Búsqueda en profundidad.

  • Esquema de vuelta atrás o backtracking (bt)

    • Realiza una bp mediante un algoritmo recursivo. Por cada nodo, bt genera sus compleciones (hijos directos) y aplica de nuevo bt sobre cada uno de ellos.

    • Si en algún punto del recorrido se dan condiciones que hacen inútil seguir el camino tomado (condiciones de poda) se abandona esa rama, retrocediendo a la última decisión.


Vuelta atr s o backtracking

Vuelta atrás o Backtracking

funcion vuelta_atras (ensayo)

if valido (ensayo)

return ensayo

else

for hijo  compleciones (ensayo)

if condiciones-de-poda(hijo)

vuelta_atras (hijo)


Vuelta atr s o backtracking1

Vuelta atrás o Backtracking

  • Para un problema dado es necesario especificar:

    • Qué es un ensayo, es decir, un nodo del árbol.

    • La función válido, que determina si un nodo es solución al problema o no.

    • La función compleciones, que genera los hijos de un nodo dado.

    • La función condiciones-de-poda que verifica si puede descartarse una rama del árbol, aplicando los criterios de poda sobre el nodo origen de esa rama.

  • Se hallan todas las soluciones son el esquema anterior.


Vuelta atr s o backtracking2

Vuelta atrás o Backtracking

  • Ejemplo:

    • Problema de la N reinas.

      main()

      {

      int i;

      for(i=0;i<CASILLAS;i++)

      a[i]=TRUE;

      for(i=0;i<CASILLAS*2;i++)

      dd[i] = di[i] = TRUE;

      intentar(0);

      return(0);

      }


Vuelta atr s o backtracking3

Vuelta atrás o Backtracking

void intentar(int i)

{

int j;

for(j=0;j<CASILLAS;j++)

if (a[j] && dd[i+j] && di[i-j+CASILLAS])

{

x[i]=j;

a[j] = dd[i+j] = di[i-j+CASILLAS]=FALSE;

if (i<CASILLAS-1)

intentar(i+1);

else

imprime_solucion();

a[j] = dd[i+j] = di[i-j+CASILLAS]=TRUE;

}

}


Vuelta atr s o backtracking4

Vuelta atrás o Backtracking

Ejemplos:

  • Coloreado de grafos

  • Ciclos hamiltonianos

  • Atravesar un laberinto

  • El recorrido del caballo de ajedrez

  • El problema de la mochila 0-1

  • Reconstrucción de puntos a partir de las distancias

  • Árboles de juego


Algoritmos de exploraci n en grafos2

Algoritmos de exploración en grafos

  • Búsqueda en anchura.

  • Ramificación y poda

    • En ocasiones se requiere que la solución alcanzada sea óptima. Para ello se calcula para cada nodo una cota inferior del posible valor de aquellas soluciones que pudieran encontrarse a partir de ese nodo del grafo.

    • Si la cota es peor que la mejor solución de la que disponemos, no se continúa la exploración de esa parte del grafo.

    • El cálculo de cotas se puede usar somo una condición más de poda o utilizarlo para guiar la búsqueda.


Ramificaci n y poda

Ramificación y poda

funcion ramificacion_poda_anchura (ensayo)

p = Ø ; c = coste mínimo; solución = Ø

encolar (ensayo, p)

while !vacio(p)

nodo = desencolar (p)

if valido (nodo)

if coste (nodo) < c

solución = nodo; c = coste(nodo)

else

for hijo  compleciones (nodo)

if condiciones-de-poda(hijo) &&

cota(hijo) < c

encolar (hijo,p)


Ramificaci n y poda1

Ramificación y poda

Ejemplos:

  • El juego del 15

  • Aplicación a problemas de optimización

  • Problema de planificación de tareas a plazo fijo

  • El problema de la mochila 0-1

  • El problema del viajante de comercio


Problema de optimizaci n

Problema de Optimización

Un problema en el que debe optimizarse alguna función (minimizada o maximizada) sujeta a restricciones.


  • Login