Documentos de Académico
Documentos de Profesional
Documentos de Cultura
SOPA DE LETRAS
En la figura que vern a continuacin, se muestra un ejemplo de una sopa de
letras.
Una sopa de letras se puede definir como un juego de destreza y rapidez mental,
donde se tiene que encontrar un nmero finito de palabras. Dichas palabras estn
definidas previamente en el mismo juego y estn ocultas en una matriz cuadrada
de letras. La bsqueda de las palabras en la matriz se puede realizar de la
siguiente forma:
ALGORITMOS DE DESARROLLO.
Algunas de las aplicaciones que le dan solucin a una sopa de letras lo hacen por
medio de la tcnica llamada backtracking (vuelta atrs). Es una estrategia para
encontrar soluciones a problemas que satisfacen restricciones, usada muy
frecuentemente en sistema multi-soluciones. Uno de los ejemplos que podemos
encontrar en la aplicacin de este algoritmo para el contexto que estamos tratando,
es la solucin del famoso sudoku, o encontrar el camino que da la salida en un
laberinto, o en un juego de ajedrez, podamos usarlo para aplicarle cierta
inteligencia artificial a la CPU. El backtracking tambin es usado como base lgica
en sistemas de reglas de inferencia, como es el caso de prolog.
Aunque la solucin que propone el backtracking parece ser buena frente a otras
alternativas de bsqueda para este tipo de aplicaciones, el tiempo de respuesta
puede variar dependiendo del tamao de la matriz. Las causas de esta
caracterstica radican en la forma de implementacin, y si no se usa otra tcnica
que lo complemente para dar con la solucin, puede consumir mayor tiempo para
encontrar las respuestas. Por ejemplo, si intentramos solucionar la sopa de letra
con la nica implementacin del backtracking tendramos entonces que:
1. Comparar cada letra de la matriz, verificar si dicha letra es igual a la primera
letra de la palabra buscada.
2. Si es igual entonces:
3. Seleccionar una de las direcciones: (ABAJO, ARRIBA, DERECHA, IZQUIERDA,
DIAGONAL_INFERIOR_IZQUIERDA,
DIAGONAL_INFERIOR_DERECHA,
DIAGONAL_SUPERIOR_DERECHA, DIAGONAL_SUPERIOR_IZQUIERDA).
4. Verificar la siguiente letra de la palabra buscada en una de las direcciones
seleccionada.
5. Si es igual entonces: ir al paso 4.
6. No es igual entonces: ir al paso 3.
Lo primero que haramos para resolver la sopa de letra anterior, es crear nuestro
ndice invertido, tomando como vocabulario la primera letra de cada palabra a
buscar y como lista de posteo las posiciones de esa letra en la matriz de letras, de
esta forma tendramos los siguientes datos:
A: {(0,5), (0,8), (6,6)}
E: {(0,0), (9,0), (9,9)}
El par ordenado que se encuentra en la lista de posteo corresponde a la expresin
(fila, columna) en la matriz de letras. As, por ejemplo, la letra A con la que
comienza la palabra AULA, se encuentra en la matriz, en las posiciones (0,5) (0,8)
y (6,6). La letra E que corresponde a la palabra ESTUDIANTE, se encuentra en
las posiciones (0,0) (9,0) y (9,9). En el caso de la palabra XITO, si nos damos
cuenta la letra inicial es la misma que la de ESTUDIANTE por lo tanto ya tenemos
esa referencia guardada previamente en el ndice invertido.
La idea general para armar esta estructura, es:
1. Recorrer una sola vez la matriz, preguntando en cada letra si se parece a
algunas de las letras con que comienzan las palabras que se quieren buscar,
2. Si se parecen, preguntar si ya existe en el ndice invertido. Si ya existe ir al
paso 4 sino ir al paso 3.
3. Almacenar la letra como vocabulario y asignar una referencia de la fila y la
columna.
4. Si la posicin no existe en la lista de posteo, guardar la posicin de la forma
(fila, columna).
Una vez tengamos el ndice invertido construido, ser ms fcil encontrar la
solucin de las palabras buscada, ya que tenemos una mayor precisin en la
bsqueda. Entonces, el algoritmo que tenamos anteriormente en la primera parte
de nuestro tutorial, lo podemos ajustar a la siguiente forma:
1. Crear un ndice invertido para la sopa de letras.
2. Tomar como entrada la primera palabra a buscar y la lista de posteo asociada a
esta.
3. Se toma como pivote la letra de la matriz en la posicin del par ordenado que
se encuentra en la lista de posteo.
SUDOKU
El Sudoku es un tipo especial de Cuadro latino, y abundaremos en detallesms
adelante. Este ltimo apareci en la literatura rabe, hace aproximadamente700
aos. A continuacin se definirn algunos conceptos tiles para entender e implementar el algoritmo.
Definicin: Un Cuadro latino es una matriz cuadrada de n n enla cual cada
fila y cada columna son permutaciones de los elementos deS = {1, 2, . . . , n}
para n > 1.
Definicin: Un Sudoku es una matriz cuadrada de 9 9 subdividida en nueve
submatrices de 3 3, tambin denominadas cajas (como semuestra en la
figura 1), en cuyas celdas se encuentran nmeros del conjuntoA = {1, 2, . . . , 9},
de tal forma que cada fila, cada columna y cada cajacontiene uno y solo uno de
los elementos del conjunto A.
3
5
2
1
8
4
1
8
6
7
5
9
7
3
4
6
9
2
7
1
5
8
9
3
6
9
1
5
2
4
4
6
3
2
8
7
4
2
9
3
1
7
3
5
2
8
7
6
5
9
8
1
6
4
5
4
5
8
6
7
3
8
6
9
4
5
3
5
4
6
2
1
8
4
6
7
8
1
4
5
8
5
7
6
4
5
3
6
7
5
6
7
2
9
5
4
Orden
Facil
Medio
Difcil
MuyDifcil
0a35
36a50
51a63
64
El algoritmo es el siguiente:
1. El usuario determina el nivel de dificultad.
2. Se selecciona aleatoriamente un elemento de la base de datos.
3. Una rotacin aleatoria y una permutacin aleatoria se aplican al elemento
bsico.
4. Si el nivel mximo de dificultad es escogido, imprime el elemento bsico
transformado; de otro modo se aplica la funcin hint a dicho elemento las
veces que se necesite hasta que el Sudoku inicial alcance el orden deseado
de acuerdo al nivel de dificultad requerido, y finalmente, imprime el Sudoku
inicial bien definido resultante.
Para
cada
nivel de dificultad
se muestra un
Sudoku
inicial
definidogenerado por el algoritmo, con su correspondiente solucin.
8
5
2
3
9
1
4
8
7
9
5
6
3
4
8
5
2
3
9
1
4
8
6
7
1
2
7
9
5
6
3
4
bien
5
6
8
5
5
2
8
1
3
9
2
3
5
8
5
8
1
5
2
4
8
3
6
2
8
3
7
2
7
5
7
4
1
2
9
6
3
6
7
8
9
1
5
4
4
3
6
5
7
2
8
5
6
7
1
3
9
2
9
2
4
3
5
8
1
3
9
5
8
6
4
7
1
5
2
4
8
3
6
2
8
3
7
4
1
9
8
1
9
6
2
7
5