Download subárbol

Document related concepts

Árbol binario wikipedia , lookup

Rotación de árboles wikipedia , lookup

Recorrido de árboles wikipedia , lookup

Árbol binario de búsqueda wikipedia , lookup

Treap wikipedia , lookup

Transcript
Uso de estructuras y
control de backtracking.
Tema 3. Programación Lógica
Temas
Introducción
Uso de estructuras
Familias
Árboles binarios
Diccionarios
Binarios
Control del backtracking
Bibliografía:
Bratko, Programming in Prolog for Artificial
Intellligence, pp. 84-103, 120 - 129 .
Objetivos
Que los estudiantes se familiaricen y
trabajen con estructuras de datos
Simples
como caso familia, persona...
Árboles y Diccionarios Binarios
Que
conozcan
cómo
controlar
el
backtracking y su importancia para la
rapidez y eficiencia de programas.
Objetos de Datos
simples
estructuras
constantes variables
átomos números
términos
Estructuras
Son
objetos
que
tienen
varios
componentes, las que, a su vez, pueden
ser estructuras.
Tratadas como un solo objeto a través de
la selección de un functor
Ejemplo:
fecha
oracion
fecha(dia, mes, año)
sujeto
fraseverbal
20
oct 2008
oracion(sujeto,fraseverbal(verbo,nombre))
fecha(20, oct, 2008)
verbo
nombre
functor
argumentos
Uso de Estructuras
Ejemplo 1
Buscar el sinónimo de una palabra dentro
de un conjunto de palabras representado
por una lista. Sea el caso de buscar el
sinónimo de aroma:
palabras([mueca(gesto), presagio(augurio),
rapido(veloz), aroma(perfume)]).
Solución Ejemplo 1
Buscar el sinónimo de aroma
palabras([mueca(gesto), presagio(augurio),
rapido(veloz), aroma(perfume)]).
Solución Prolog:
sinonimo(X): palabras(L),
- miembro(X,L).
miembro(X, [X | L]
).
miembro(X, [Y | miembro(X,
?- sinonimo(aroma(X)).
Se recorre la lista hasta que se
L]):- L).
X = perfume ;
encuentra X o el final de la lista
Relaciones de Progenitor
Juan
Ana
Maria
Pedro
José
Lupe
prog(juan,pedro).
prog(juan,ana).
prog(maria,pedro).
prog(pedro,lupe).
prog(pedro,jose).
hombre(juan).
hombre(pedro).
hombre(jose).
mujer(maria).
mujer(ana).
mujer(lupe).
Uso de estructuras
padre
familia (
madre
,
,
persona
,
nombre
Lista de personas
,
apellidos
,
día
).
persona
persona (
fecha (
hijos
,
mes
).
fecha nacimiento
).
año
Con estructura familia
Juan
Ana
Maria
Pedro
José
Lupe
familia(persona(juan, perez, fecha(26, julio, 1953)),
persona(maria, diaz, fecha(1, enero, 1959)),
[persona(pedro, perez, fecha(1, mayo, 1980))]).
Ejemplo 2
familia(persona(juan, perez, fecha(26, julio, 1953)),
persona(ana, diaz, fecha(1, enero, 1959)),
[persona(pedro, perez, fecha(2, mayo, 1980)),
persona(eva, perez, fecha(3, abril, 1985))]).
padre(X):- familia(X, _, _).
madre(X):- familia(_, X, _).
hijo(X):- familia(_, _, Hijo),
miembro(X, Hijo).
existe(X):- padre(X);madre(X);hijo(X).
miembro(X, [X | L] ).
miembro(X, [Y | L]):- miembro(X, L).
% X es padre
% X es madre
% X es un hijo
% Hay persona
% Miembro de una
lista
?- existe(persona(N, A, _)).
%N y A de las personas
?- madre(persona(N, diaz,_)). %Madre de apellido diaz
Árboles Binarios
Representación de Árbol Binario
Árbol binario es un árbol vacío o consta de:
una
raíz
un subárbol izquierdo (binario)
un subárbol derecho (binario)
Gráficamente el conjunto {m, p, r, a}
Raíz
Subárbol izquierdo
m
Subárbol derecho
p
r
a
Representación Prolog de Árbol Binario
Convenciones:
Símbolo
especial para representar un árbol
vacío (nil).
functor (t) para construir un árbol no vacío a
partir de sus tres componentes: raíz, subárbol
Raíz
izquierdo y subárbol derecho.
En PROLOG la estructura:
t
(Izq, X, Der)
Izq
m
p
Der
r
X
Izq
Ejemplo:
Der
a
t(t(nil, p, nil),m,t( t(nil, a, nil),r,nil))
Pertenencia a un Árbol Binario
Un hecho: arbol(T).
Y la relación: esta(X, T) que es verdadera
si X es un nodo de T. Se cumple si:
La
raíz de T es X
X está en el subárbol izquierdo de T
X está en el subárbol derecho de T
En PROLOG:
esta(X, t(_, X, _)).
esta(X, t(Izq, _, _)):- esta(X, Izq).
esta(X, t(_, _, Der)):- esta(X, Der).
Pertenencia a un Árbol Binario
(ejecución)
En PROLOG:
arbol(t(t(nil,p,nil),m,t(t(nil,a,nil),r,nil))). % hecho
esta(X, t(_, X, _)).
esta(X, t(Izq, _, _)):- esta(X, Izq).
esta(X, t(_, _, Der)):- esta(X, Der).
% regla 1
% regla 2
% regla 3
?-arbol(T), esta(X, T).
%pegunta
X
X
X
X
=
=
=
=
m;
p;
r;
a
Diccionario Binario
Todos los nodos del subárbol izquierdo
(Izq), son menores que X
Todos los nodos del subárbol derecho
(Der), son mayores que X
Ambos subárboles también son
ordenados.
8
Ejemplo
5
3
15
7
10
20
12
Búsqueda en Diccionario Binario
En Prolog:
enD(X,t(_,X,_)):enD(X,t(Izq,R,_)):5
!.
8
mayor(R,X),!,
15
enD(X,Izq).
3
7 10
20
enD(X,t(_,R,Der)):- enD(X,Der).
12
mayor( X, Y) :- X > Y.
% es la
Raiz
% Raiz >
X
% X > Raiz
Para hallar un elemento X en un diccionario D:
Si
X es la raíz de D entonces X se encuentra
Si X es menor que la raíz de D entonces buscar
X en el subárbol izquierdo de D
En otro caso, buscar X en el subárbol derecho
de D.
Control de Backtraking.
Corte (!)
Backtracking
Al procesar una pregunta con más de una
meta puede suceder que el Prolog logre
satisfacer algunas de ellas y no consigue
satisfacer la meta que sigue en orden.
En ese caso, el interprete regresa a la
meta anterior y trata de buscar otra
solución posible para esa meta que le
permita avanzar en la siguiente
Este
retroceso
pudiera
tener
profundidad que sea requerida.
la
Backtracking
padre(jose, ana).
padre(jose, pepe).
padre(juan, eva).
padre(juan, pedro).
padre(mario, juan).
Observaciones:
hijo(X, Y) :- padre(Y, X).
Las
respuestas se obtienen buscando en la
La pregunta
BD los hechos en el orden en que fueron
?- hijo( _, Y).
dados.
Respuestas:
Y = jose ;
Y = joserealiza
;
Prolog
el backtracking a ciegas
Y = juan ; otras soluciones.
buscando
Y = juan ;
Y = mario
Backtracking
hombre(juan).
hombre(jose).
hombre(pedro).
mujer(ada).
mujer(eva).
posiblepareja( X, Y) :- hombre( X), mujer( Y).
Funcionamiento Prolog
Pregunta
1.Busca
posiblepareja(_,_,_).
?- posiblepareja(X,
Y).
2.Satisface el objetivo I-hombre(X).
Respuestas:
3.Pasa
a satisfacer objetivo II-mujer(Y) .
X = juan
= ada
;
4.Trata
de ,Y
volver
a satisfacer
mujer(Y).
X = juan
= eva
;
5.Trata
de ,Y
volver
a satisfacer
mujer(Y) y falla.
6.Trata
de ,volver
a satisfacer
el objetivo hombre(X),
X = jose
Y = ada
;
… ;
Xretrocediendo.
= jose , Y = eva
Situaciones al Satisfacer Objetos
1.
Ajuste o matching con un hecho. De ser
necesario se instancian variables y el sistema
marca la posición en la BD.
2.
Ajuste con la cabeza de una regla.
a)
b)
Intentan satisfacer los objetivos introducidos
por la regla, de izquierda a derecha. Si el
primero de la izquierda se satisface, se
intenta satisfacer el que le sigue a la derecha
y así sucesivamente.
Si alguno de ellos no se satisface se dice que
el objetivo falla y se intenta resatisfacer
explorando otra opción de ajuste para el
objetivo anterior (a la izquierda).
Corte (cut). Control del backtracking
Ejemplo:
R1:
R2:
R3:
Y
4
2
Si X < 3 entonces Y = 0
Si 3 ≤ X y X < 6 entonces Y = 2
Si 6 ≤ X entonces Y = 4
En Prolog:
3
6
f( X, 0) :- X < 3.
% Regla 1
X f( X, 2) :- 3 =< X, X < 6. % Regla 2
f( X, 4) :- 6 =< X.
% Regla 3
¿Cómo funcionaria Prolog para la pregunta?
?- f( 1, Y), 2 < Y.
Corte (cut). Control del backtracking
f( 1, Y)
2<Y
regla 1
Y=0
1<3
2<0
corte
2<0
no
regla 2
Y=2
1<3
2<0
no
regla 1
Y=4
Backtracking
innecesarios
1<3
2<0
no
Se puede lograr con corte:
f( X, 0) :- X < 3.
3, !.
f( X, 2) :- 3 =< X, X < 6.
6, !.
f( X, 4) :. 6 =< X.
Conclusiones
Uso de estructuras.
Instanciar estructura completa.
Elementos
Árboles Binarios
Representación y Pertenencia
Diccionario Binario y Búsqueda
Control del backtracking
!
Valor en rapidez y eficiencia
Clase Práctica 1
1.Agregar al menos 2 familias a la BD y
formular las siguientes preguntas:
a.¿Qué personas nacieron antes de 70?
b.Apellidos de los padres de familia que
no tienen hijos.
3.Teniendo una BD con relaciones entre un
país y su población (poblacion(pais, Hab)),
y entre un país y su área (area(Pais,
Sup)). Elabore un programa Prolog que
calcule la densidad de población de un país
(densidad(Pais, Hab)).
Clase Práctica 1
3. Elaborar
un programa Prolog que permita:
Determinar si una persona estudiaba el
preuniversitario en un año particular.
Considerar un predicado de la forma
estudio(X, Y, Z), que es verdadero si la
persona X estudió el preuniversitario entre
los años Y y Z.
Construir una base que contenga hechos
tales como: estudio(juan, 2001, 2004).
Verificar su funcionamiento en un sistema
Prolog.
Clase Práctica 2
4.
Modificar el programa de búsqueda en
diccionario binario para el caso en que los
nodos del árbol sean letras. Verificar con
un árbol de ejemplo. (Sugerencia: tener
en cuenta el predicado predefinido
name(Atomic, List)).
5.
Elaborar un programa que permita
agregar un elemento X a un diccionario
binario T para obtener otro T1. (agregar(
T, X, T1)).
Clase Práctica 2
6.
Utilizando
el
corte,
elaborar
un
procedimiento Prolog para:
a) Calcular el mínimo de 2 números, con
la relación minimo( X, Y, Min).
b) Determinar sólo la primera ocurrencia
de un elemento en una lista.
7.
Analizar la segunda y última versión del
programa para la pregunta ?- f( 8, Y). y
comprobar que el sistema Prolog
generará 2 ramas en el árbol de
ejecución.