PDF de programación - Tema 2: Diseño de Algoritmos - Algoritmos y Estructuras de Datos

<<>>
Imágen de pdf Tema 2: Diseño de Algoritmos - Algoritmos y Estructuras de Datos

Tema 2: Diseño de Algoritmos - Algoritmos y Estructuras de Datosgráfica de visualizaciones

Publicado el 12 de Enero del 2019
615 visualizaciones desde el 12 de Enero del 2019
1,4 MB
8 paginas
Algoritmos y Estructuras de Datos

Tema 2: Diseño de Algoritmos

Algoritmos y Estructuras de datos DIT-UPM

1

Contenidos

! 1. Algoritmos recursivos

" 1.1 Algoritmos recursivos. Recursión simple
" 1.2 Algoritmos con vuelta atrás y ejemplos

! 2. Complejidad de los algoritmos
! 3. Algoritmos de búsqueda y su complejidad
! 4. Optimización de algoritmos

Algoritmos y Estructuras de datos DIT-UPM

2

Algoritmos de vuelta atrás

!  Algoritmos de vuelta atrás (backtraking) es un tipo
general de algoritmos orientado a la resolución de
problemas, que se suele aplicar en: optimización,
resolución de juegos, búsquedas de caminos

!  Se realizan búsquedas exhaustivas de entre todas las

posibles soluciones

!  Se exploran todas las hipótesis, guardando estado

actual. Si no se da con la solución, se recupera el
estado, y se explora otra

!  La recursividad se suele emplear para guardar estado

y realizar exploraciones recursivas

Algoritmos y Estructuras de datos DIT-UPM

3

Algoritmos de vuelta atrás
!  La solución son un conjunto de valores x1, x2, ..., xn (por

ejemplo, movimientos de las fichas de un juego) que
satisfacen las restricciones del problema
"  Pueden ser una solución cualquiera
"  Pueden ser una solución que optimizan una función objetivo

!  En un momento de la ejecución, el algoritmo puede

tener una solución parcial de k valores (x1, ..., xk), y nos
falta por encontrar n-k valores:
"  Nos encontramos en un nivel k
"  Se pasa a buscar un nuevo valor k+1 que satisfaga las

restricciones, añadido a los anteriores k valores
#  Si no encontramos un k+1, deshacemos el xk y buscamos una nueva

solución xk

Algoritmos y Estructuras de datos DIT-UPM

4

Ideas básicas

!  Debemos ser capaces de enumerar todas las alternativas/

movimientos posibles
"  Se intentan todas esas alternativas en un cierto orden,

seleccionando una de ellas antes de seguir

"  Si la selección hecha no nos lleva a una solución posible, hay que

deshacerla
#  Esto es vuelta atrás, las elecciones hechas se deben poder deshacer

!  El proceso es intrínsecamente recursivo. Debemos saber

cuando termina (Ejecución Base)
"  Saber cuando el problema está resuelto
"  Saber cuando no podemos seguir por ningún camino

!  En resumen: enumerar los posibles siguientes pasos;

intentar cada uno de ellos; deshacerlo en un punto muerto
"  Fuerza bruta: lo intentamos todo

Algoritmos y Estructuras de datos DIT-UPM

5

Ejemplos: sudoku de 2x2

! Rellenar las 4 cajas de 2x2 con números
de 1 al 4 no repetidos ni en las cajas, ni
en las filas o columnas de 4x4


4
2
1
3

3
2

2

1

Vuelta atrás.

nivel A nivel B nivel C nivel D nivel E nivel F nivel G

4 1
2

1
3
4 3
2
1
3

4 1 X 2
2
1
3
1
4 3 1 2
2
1
3

4 3 1 2
2 1 3 4
1 4 2 3
3
1

4 3 1 2
2 1 3 4
1 4 2 3
3 2
1

4 3 1 2
2 1 3 4
1
3

2

4 3 1 2
2 1 3 4
1 4 2
3

1

4 3 1 2
2 1 3
1
2
3

1

No puedo seguir!

2

1
2

1

3
2

3
2

3
2

3
2

1

1

Algoritmos y Estructuras de datos DIT-UPM

6

Estructura general de los
algoritmos

! Las soluciones que se van construyendo se
conceptualizan como árboles implícitos de
posibles soluciones:
" Cada rama es un valor

[0,1]=1

B3

C

D

E4

F4

G3

H2

I4

[0,2]=1

[1,1]=1

[1,3]=4

[2,1]=4

[2,3]=3

[3,1]=2

[3,2]=4

7

para un paso hacía la solución

" Las hojas representan
soluciones posibles o
puntos muertos

[0,1]=3

A
[0,1]=2
B2

B1

[0,2]=X

X
[1,3]=1

E1

[1,3]=2
E2

E3

[1,3]=3

A 0 1 2 3
0 4 B C 2
1 2 D 3 E
2 1 F 2 G
3 3 H I 1

Algoritmos y Estructuras de datos DIT-UPM

Antes de implementar …(1)

! Antes de implementar debemos tener claro:
1.  Datos con los que representamos la solución
#  Sudoku: array dos dimensiones con los contenidos de
2.  Como representamos cada valor xi (un ensayo)
3.  Restricciones que limitan las soluciones, y como

#  Sudoku: fila, columna, valor

posiciones

validar soluciones
#  Sudoku: No coincidencias caja, no coincidencias fila, no

coincidencias columna

4.  Como se genera un nuevo nivel

#  Sudoku: Saltar a la siguiente casilla y fijar un primer valor

Algoritmos y Estructuras de datos DIT-UPM

8

Antes de implementar …(2)

! Antes de implementar debemos tener claro:

5.  Como se genera un nuevo hermano

#  Sudoku: Nuevo intento de valor para la casilla para la que

buscamos valor

6.  Como se retrocede en el árbol

#  Sudoku: Marcamos casilla como vacía y volvemos diciendo que

es punto muerto

7.  Descartar ramas para optimizar

#  Sudoku: Vuelta atrás en los puntos muertos sin seguir

explorando

#  Un sudoku válido tiene una única solución

Algoritmos y Estructuras de datos DIT-UPM

9

Algoritmo general recursivo

Ejecución
Ejecución
Recursiva
Recursiva

Ejecución
Ejecución
Base
Base

recursivo_vuelta_atras(ensayo)
if esUnaSoluciónCompleta(ensayo)
return ensayoOK(ensayo)
else
if cumpleRestricciones(ensayo)
for nuevoNivel ∈ siguientesNieveles(ensayo)
if recursivo_vuelta_atras(nuevoNivel) == ensayoOK
return ensayoOK
for unEnsayo ∈ siguientesHermanosDelNivel(ensayo)
deshacer ensayo y actualizar unEnsayo
if recursivo_vuelta_atras(unEnsayo) == ensayoOK
return ensayoOK(unEnsayo)
deshacer ensayo
return ensayoKO(ensayo)
}

Cálculos
Generales

Algoritmos y Estructuras de datos DIT-UPM

10

Algoritmo sudoku recursivo

!  Variables:

iniciales

!  Métodos:

"  int[][] model: array con los valores de las posiciones, inicializado con valores

"  int row, col: fila y columna para la que buscamos valor
"  int num: valor de la posición row,col

"  checkRow(int row, int num): comprueba que ningún elemento de de la fila

row de model tiene asignado valor num

"  checkCol(int col, int num): comprueba que ningún elemento de de la

columna col de model tiene asignado valor num

"  checkBox(int row, int col, int num): comprueba que ningún elemento de la

caja en la que se cuenta la casilla row, col tiene asignado valor num

"  solve(int row, int col): rellena el sudoku que tenemos en model partiendo de

la posición row,col

Algoritmos y Estructuras de datos DIT-UPM

11

Algoritmo sudoku recursivo

protected int model[][] ;
protected boolean checkRow(int row, int num){
for( int col = 0; col < COLUMNS; col++ )
if( model[row][col] == num ) return false ;
return true ;
}

protected boolean checkCol(int col, int num) {
for( int row = 0; row < ROWS; row++ )
if( model[row][col] == num ) return false ;
return true ;
}

protected boolean checkBox(int row, int col, int num) {
row = (row / BOX_ROWS) * BOX_ROWS ;
col = (col / BOX_COLUMNS) * BOX_COLUMNS ;
for( int r = 0; r < BOX_ROWS; r++ )
for( int c = 0; c < BOX_COLUMNS; c++ )
if( model[row+r][col+c] == num ) return false ;
return true ;
}

Algoritmos y Estructuras de datos DIT-UPM

12

Algoritmo sudoku recursivo

protected int model[][] ;
public boolean solve(int row, int col) {
if( row > ROWS-1 ) // todas posiciones ocupadas y chequeadas
return true;
if( model[row][col] != 0 ) // posición ocupada-> siguiente
return solve(row+((col+1)/COLUMNS), (col+1) % COLUMNS);

else {
for (int num = 1; num <= ROWS; num++) { // probamos hermanos
if(checkRow(row,num) && checkCol(col,num) &&
checkBox(row,col,num)){
model[row][col] = num ;
if (solve(row+((col+1)/COLUMNS), (col+1) % COLUMNS))
return true ;
}
}
// Este es un punto muerto-> vuelta atrás
model[row][col] = 0 ;
return false;
}
}

Algoritmos y Estructuras de datos DIT-UPM

13

Algunas variantes

!  No es seguro que exista solución

"  Ejemplo: Hay sudoku sin soluciones
"  La función debe devolver ambas alternativas

!  Hay múltiples soluciones y queremos verlas todas

"  Ejemplo: Posibles caminos entre dos puntos de un mapa
"  Hay que guardarlas y seguir buscando

!  Es un problema de optimización y buscamos la solución

que optimiza una función
"  Ejemplo: Buscar camino mas corto de un mapa. Pueden ser varias

soluciones, pero debemos optimizar una función

"  Hay que guardar la óptima y seguir buscando
"  La función de optimización nos puede servir para abandonar
soluciones parciales que no podrán mejorar solución óptima

Algoritmos y Estructuras de datos DIT-UPM

14

Heurísticas
!  Una heurística es una regla que a groso modo nos permite

elegir/descartar entre alternativas. Útiles en la mayoría
de los casos, pero …
"  No siempre mejoran la elección
"  No siempre garantizan que sean la mejor forma de elegir
"  Su ejecución sobrecarga los algoritmos

!  Heurísticas para sudoku para intentar menos hermanos

(http://en.wikipedia.org/wiki/Algorithmics_of_sudoku)
"  Empezamos rellenando la casilla con menor número de posiciones vacías

en su fila, columna o caja

"  Empezamos rellenando la casilla que tiene menor número total de casillas

vacías en fila, columna y caja

Algoritmos y Estructuras de datos DIT-UPM

15

Vuelta atrás
!  Es un recorrido exhaustivo y sistemático de un árbol de soluciones
!  Para aplicarlo debemos saber:

"  Como identificar cuando una solución está encontrada
"  Avanzar al siguiente paso
"  Recorrer todas las alternativas de un nivel
"  Deshacer pasos dados

!  El tiempo de ejecución es proporcional al número de nodos del árbol x el

tiempo de ejecución de cada uno de ellos (si es igual para todos los
nodos)

!  Ejercicio: ¿cuántos nodos puede llegar a tener un sudoku 9x9 con X

valores iniciales?

!  En general, los algoritmos de vuelta atrás tienen complejidad de orden

expo
  • Links de descarga
http://lwp-l.com/pdf14837

Comentarios de: Tema 2: Diseño de Algoritmos - Algoritmos y Estructuras de Datos (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad