You are on page 1of 8

Actividades y Ejercicios

INTELIGENCIA ARTIFICIAL2da. UNIDAD

Algoritmos DE BUSQUEDA
En un documento en Word elabore diferentes algoritmos de bsqueda sin
informacin de dominios, en juegos tales como: sopa de letras, sudoku. Enva tu
archivo a travs de este medio.

ALGORITMO DE BUSQUEDA
Un algoritmo de bsqueda es aquel que est diseado para localizar un elemento
con ciertas propiedades dentro de una estructura de datos; por ejemplo, ubicar el
registro correspondiente a cierta persona en una base de datos, o el mejor
movimiento en una partida de ajedrez.
La variante ms simple del problema es la bsqueda de un nmero en un vector.
Los algoritmos presentan diferencias entre ellos que los convierten en ms o
menos eficientes y prcticos segn sea la rapidez y la eficiencia demostrada por
cada uno de ellos.

JUEGO SOPA DE LETRAS

En la figura que vern a continuacin, se muestra un ejemplo de una sopa de


letras.

1 INGENIERIA DE SISTEMAS E INFORMATICA


Edwin Antonio

Alumno : Castro Rosado,

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:

En la figura anterior se puede observar la forma de buscar una palabra en la matriz


de letras, para este caso la palabra a buscar es NADIE.
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).
2 INGENIERIA DE SISTEMAS E INFORMATICA
Edwin Antonio

Alumno : Castro Rosado,

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.
7. Si ya no hay mas letras que buscar en la palabra buscada, entonces la palabra
ha sido encontrada en la direccin seleccionada y en la posicin de letra de la
matriz comparada. ir al paso 9.
8. Si ya no hay mas direcciones en donde buscar la solucin entonces ir al paso 1.
9. Si existen ms palabras por buscar, Pasar a la siguiente palabra buscada.
10. No existen ms palabras por buscar, entonces debemos mostrar las soluciones
encontradas.
QUE ES UN NDICE INVERTIDO?
Un ndice invertido es una estructura de datos para almacenamiento que mapea
contenido tales como palabras o nmeros con sus ubicaciones en un archivo de
base de datos, en un documento o en un conjunto de documentos. Digamos que
tenemos los siguientes textos:
T1: "esa manzana es de color verde"
T2: mira, esa pelota es de color azul
T3: eso es lo que es
Una representacin en ndice invertido de lo anterior sera:
esa: {t1, t2}
es: {t1, t2, t3}
color: {t1, t2}
manzana: {t1}
mira: {t2}
lo:{t3}, etc.
La palabra que aparece en el lado izquierdo separado por los dos puntos y
encerrada entre comillas, es una palabra que aparece en alguno de los 3 textos del
ejemplo, llamada en el ndice invertido como vocabulario. Las expresiones
encerradas entre llaves que aparecen en la parte derecha, son los textos donde
aparece la palabra de la izquierda, esta parte del ndice invertido es llamada lista
de posteo.
De lo anterior se puede concluir que: Cada palabra que aparece en cada uno de los
textos es asociada (mapeada) con el texto o los textos donde esta aparece. As
que, esta estructura tiene la obligacin de permitir una bsqueda ms rpida en
una consulta, lo cual hace de esta tcnica algo valioso para algunos de los motores
de base de datos ms famosos en el mundo.
3 INGENIERIA DE SISTEMAS E INFORMATICA
Edwin Antonio

Alumno : Castro Rosado,

Volviendo a nuestro pequeo problemita de la sopa de letras, al preguntarnos por


que necesito un ndice invertido?, pues bien, la solucin que proponamos en la
parte de nuestro anlisis era inicialmente realizar una bsqueda secuencial, esto lo
hacamos Preguntando en cada letra de nuestra matriz si era igual a la primera
letra de la palabra a buscar, y si era as, verificbamos en las direcciones validas
donde se poda encontrar la solucin, bueno eso no estara mal, pero hablando en
trminos mayores, que pasara si existiese una matriz de 1000 X 1000, que da un
total de 1.000.000 de letras y que al momento de buscar la solucin a una palabra
de 4 letras, dicha solucin estuviera en la posicin 999.996 y su direccin sea hacia
la derecha?, no se hubiese perdido bastante tiempo en comparaciones
innecesarias con el resto de letras en la matriz? O en el caso en que hubiese en
otra posicin de la matriz, una letra parecida a la letra inicial de la palabra buscada
pero no era la solucin, entonces se hizo una bsqueda y verificacin que no tena
que hacerse. Y esta situacin solo est ocurriendo para buscar una sola palabra,
ahora imagnate si tuvieses que buscar 5 o ms palabras.
Lo que propongo con el uso del ndice invertido, es conocer de antemano, en que
posiciones estn las letras candidatas a ser evaluadas y luego hacer uso del
backtracking para verificar la solucin a la palabra buscada.

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:
4 INGENIERIA DE SISTEMAS E INFORMATICA
Edwin Antonio

Alumno : Castro Rosado,

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.
4. Seleccionar una de las direcciones: (ABAJO, ARRIBA, DERECHA, IZQUIERDA,
DIAGONAL_INFERIOR_IZQUIERDA,
DIAGONAL_INFERIOR_DERECHA,
DIAGONAL_SUPERIOR_DERECHA, DIAGONAL_SUPERIOR_IZQUIERDA).
5. Verificar la siguiente letra de la palabra buscada en una de las direcciones
seleccionada.
6. Si es igual entonces: ir al paso 5.
7. No es igual entonces: ir al paso 4.
8. Si ya no hay mas letras que buscar en la palabra buscada, entonces la palabra
ha sido encontrada en la direccin seleccionada y en la posicin de letra de la
matriz comparada. ir al paso 10.
9. Si ya no hay mas direcciones en donde buscar la solucin entonces ir al paso 3.
10. Pasar a la siguiente palabra buscada.
11. No existen ms palabras por buscar, entonces debemos mostrar las soluciones
encontradas.

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.

5 INGENIERIA DE SISTEMAS E INFORMATICA


Edwin Antonio

Alumno : Castro Rosado,

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

Un Sudoku inicial se obtiene al eliminar m nmeros en las celdas de un Sudoku.


El nmero m es el orden del Sudoku inicial (1 m 81). Decimos que un Sudoku
inicial est bien definido si y solo si existe una nica forma de llenar las celdas
vacas para alcanzar un Sudoku.
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

Sudoku inicial deorden m=32

ALGORITMOS PARA GENERAR Y RESOLVER


A continuacin, se expone una breve explicacin de algunos de ellos.
Algoritmos para resolver Sudokus iniciales:
Marcha atrs. Consiste en asignar un valor aleatorio a una celda vaca,
verificando que dicha asignacin cumpla con las condiciones del Sudoku,
de lo contrario, devuelve el Sudoku inicial original e intenta con un valor
distinto. Este algoritmo itera este mtodo conservando los valores que
cumplen las condiciones del Sudoku. Es costoso en trminos de tiempo.
Programacin lineal. Transforma el Sudoku inicial en un problema de
programacin, con una funcin maximizadora.
6 INGENIERIA DE SISTEMAS E INFORMATICA
Edwin Antonio

Alumno : Castro Rosado,

Algoritmos para generar Sudokus iniciales:


Fuerza bruta. Genera una matriz de 9 9 y asigna los smbolos del conjunto
{1, 2, . . . , 9} aleatoriamente, despus comprueba si la matriz resultante es un
Sudoku. En el momento en que encuentra unSudoku, procede a eliminar el
nmero de celdas requeridas por el usuario, verificando despus de cada
eliminacin si la matriz resultante es un Sudoku inicial bien definido
Mtodosimtrico. Para un Sudoku predefinido elimina celdas en lamatriz
triangular superior. Cuando las celdas estn completamentedeterminadas las
refleja por la diagonal y elimina las correspondientes celdas en la matriz
triangular inferior para obtener un Sudoku inicial.
Estos algoritmos pueden llegar a ser muy lentos (Marcha atrs y Fuerza bruta) y
complicados (Programacin lineal).El objetivo de este trabajo recae en disear un
algoritmo sencillo y fcil de entender que permita generar Sudokus con diferentes
niveles de dificultad. Partiremos de una coleccin de Sudokus iniciales bien
definidos, que segn la literatura son aceptados como de orden mximo, y por
medio de un algoritmo de solucin, que se detallarams adelante, se obtendr un
Sudoku inicial bien definido con el nivel de dificultad deseado.
Con base en la lista de Sudokus iniciales bien definidos de orden m = 64, se
procedi de la siguiente manera:
1. Se cre una pequea base de datos con elementos de dicha lista,
llamamos a estos elementos, elementos bsicos.
2. El algoritmo toma aleatoriamente un elemento bsico y lo modifica para
obtener un Sudoku inicial bien definido equivalente con el nivel de dificultad
deseado.
Para alcanzar esto, se encontr un algoritmo desarrollado en Matlab, el cual
genera Sudokus iniciales simtricos y adems proporciona una solucin paso a
paso del rompecabezas. Del anlisis del algoritmo, se concluy que la funcin
(hint) que determina la solucin paso a paso no es complicada, de esta forma
podra ser til para nuestro proyecto. La funcin bsicamente consiste en dos
estrategias:
La primera estrategia intenta responder la pregunta Qu nmero puede
ocupar esta posicin?.
La segunda estrategia es preguntar Dnde puede ir el nmero N en esta fila
(o columna, o caja)?.
Si alguna de las preguntas anteriores tiene solucinnica, el algoritmo asigna el
valor correspondiente.
Como un primer paso, se definen los niveles de dificultad. Se considera que
los elementos bsicos son los Sudokus iniciales bien definidos aceptados en la
literatura como orden mximo. El nivel de dificultad se define como muestra la
siguiente tabla:
7 INGENIERIA DE SISTEMAS E INFORMATICA
Edwin Antonio

Alumno : Castro Rosado,

Nivel deDificultad

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
5
6

8
5
5

2
8

1
3
9
2

3
5
8

5
8

7
9
1
5
2
4
8
3
6

5
6
2
8
3
7

3
4
8

2
7
5

8
5
7
4
1
2
9
6
3

2
3
6
7
8
9
1
5
4

9
1
4
3
6
5
7
2
8

4
8
5
6
7
1
3
9
2

6
7
9
2
4
3
5
8
1

1
2
3
9
5
8
6
4
7

7
9
1
5
2
4
8
3
6

5
6
2
8
3
7
4
1
9

3
4
8
1
9
6
2
7
5

(a ) Nivel fcil(b ) Solucin

8 INGENIERIA DE SISTEMAS E INFORMATICA


Edwin Antonio

Alumno : Castro Rosado,

bien

You might also like