Programación lógica con listas
|
|
- Esther Asunción Ponce Coronel
- hace 5 años
- Vistas:
Transcripción
1 Ingeniería Informática Ingeniería Técnica en Informática de Sistemas Departamento de Lenguajes y Ciencias de la Computación Universidad de Málaga
2 Contenido 1. Programación básica con listas 2. Generar/comprobar con listas 2
3 Programación básica con listas
4 Definición de listas Sea D un dominio o tipo base Definición: el conjunto de listas L de D se define inductivamente 1. nil L (lista vacía) [base] 2. si L L D D, entonces D :: L L [recursivo] :: es un constructor infijo: D L L primer argumento es la cabeza, el segundo la cola Ejemplo: a :: b :: c :: nil 1 :: 2 :: 3 :: 4 :: nil (a :: nil) :: (b :: c :: nil) :: nil 4
5 Representación Prolog de las listas Necesitamos términos recursivos para representar listas Seguimos la definición inductiva de L: 1. nil L (lista vacía) [base] 2. si L L D D, entonces D :: L L [recursivo] Caso base constante [] Caso recursivo estructura functor./2.(cabeza, Cola) Una lista bien formada es un término generado por la gramática: L ::= [].(T,L) donde T es un término Prolog 5
6 Prolog no tiene tipos Las listas así definidas tienen el término como tipo base:.(a,.(b,.(c, []))).(a,.(1,.(f(x,y), []))).(.(a,.(b, [])),.(t(u,c),[]) ) En general, los contenedores tendrán el término como tipo base Ventajas: Prolog es polimórfico Inconvenientes: Prolog es inseguro 6
7 Endulzando las listas Prolog añade azúcar sintáctico para mejorar la legibilidad: L ::= [] % vacía [T 1, T 2,, T n ] % n elementos [T 1, T 2,, T n L] % al menos n elementos Ejemplo: prefijo cola.(a,.(b,.(c,[]))) [a,b,c].(a,.(1,.(f(x,y), []))) [a,1,f(x,y)].(.(a,.(b,[])),.(t(u,c),[]) ) [[a,b],[t(u,c)]] 7
8 Azúcar según el gusto la lista.(a,.(b,.(c,[]))) puede representarse de varias formas equivalentes: [a,b,c] [a,b,c []] [a,b [c]] [a [b,c]] [a [b [c] ]] [a [b [c [] ]]] Cuidado: después del la tiene que haber una lista 8
9 Plantillas de listas (I) Qué representa cada una de estas listas? [X] [X,Y] [X,X] [X [Y]] [X Xs] [a As] [X,Y Zs] [Xs Xs] [Xs a] 9
10 Plantillas de listas (y II) Qué representa cada una de estas listas? [X] [X,Y] [X,X] [X [Y]] [X Xs] [a As] [X,Y Zs] [Xs Xs] [Xs a] listas de un elemento listas de dos elementos listas de dos elementos iguales listas de dos elementos (equivale a [X,Y]) listas de al menos un elemento listas que empiezan por a listas de al menos dos elementos listas cuyo primer elemento es una lista que coincide con la cola (ej. [[1,2,3], 1, 2, 3]) no es una lista, después de debe haber una lista 10
11 Unificación de listas las listas deben unificar elemento a elemento hay que rescribir las listas colocando la en la misma posición (el prefijo más corto) Ejemplo: [X Y] [X Y] [a,b,c] [a [b,c]] { X / a, Y / [b,c] } [X, Y Ys] [X [Y Ys]] [a Zs] [a Zs] { X / a, Zs / [Y Ys] } 11
12 Ejercicios Unificar los siguientes pares de listas: 1. [X Y] [a,b,c] 2. [a,[b,c]] [X Y] 3. [[a,b],c] [X Y] 4. [a X] [Y a] 5. [a X] [Y [c]] 6. [a X] [Y] 7. [a,b,x] [X T] 8. [a,b Y] [X,T] 9. [a,b [Y]] [a,b,c] 10. [a,b [Y]] [a,b,c,d] 12
13 Definición de dominio Seguimos la definición inductiva de L: nil L (lista vacía) [base] si L L D D, entonces D :: L L [recursivo] Utilizaremos la sintaxis simplificada: % es_lista(?xs) es_lista([]). es_lista([x Xs]) :- es_lista(xs). % base % recursivo Notación: variables acaban en s cuando deben ser listas; ej: Xs Ejercicio: Define es_lista_de_naturales/1 13
14 Comprobando y generando listas?- es_lista([a,2+3,t(x)]). % test Yes?- es_lista([a,x c]). % test No?- es_lista(xs). % generador no acotado Xs = [] ; Xs = [_G308] ; Xs = [_G308, _G311] ; Xs = [_G308, _G311, _G314] 14
15 El predicado longitud/1 (I) longitud(+xs,?n) la lista Xs tiene N elementos Ejemplo:?- longitud([a,b,c], 3). % test Yes?- longitud([a,b,c],n). % generador único N = 3 ; No 15
16 El predicado longitud/1 (II) longitud(+xs,?n) la lista Xs tiene N elementos Aplicamos recursión sobre la lista Xs: longitud([],?) :-... longitud([x Xs],? ) :
17 El predicado longitud/1 (III) longitud(+xs,?n) la lista Xs tiene N elementos El caso base es trivial: longitud([],0). longitud([x Xs],? ) :
18 El predicado longitud/1 (y IV) longitud(+xs,?n) la lista Xs tiene N elementos El caso recursivo es muy simple (patrón recursivo): longitud([],0). longitud([x Xs], N) :- longitud(xs,t), % reducir y resolver N is T+1. % componer Cómo sería recursivo de cola? 18
19 El predicado longitud/1 recursivo de cola longitud(+xs,?n) la lista Xs tiene N elementos Basta aplicar directamente el patrón: longitud(xs,n) :- long_cola(xs,0,n). long_cola([],n,n). long_cola([x Xs],Ac,N) :- Ac1 is Ac+1, long_cola(xs,ac1,n). Ejercicio: compara las tablas de comportamiento de las versiones recursiva y recursiva de cola 19
20 Ejercicios Define versiones recursivas y recursivas de cola de los siguientes predicados sobre listas de números: 1. suma(+xs,?n), N es la suma de los elementos de Xs 2. maximo(+asmbs,?m), M es el máximo de AsMsBs 3. minimo(+asmbs,?m), M es el mínimo de AsMsBs 4. cuantas(+x,+asxbs,?n), X aparece N veces en AsXBs 5. escalar(+xs,+ys,?p), P es el producto escalar de Xs y Ys 6. rango(+x,+y,?ls), Ls es la lista con los enteros entre X e Y 20
21 El predicado miembro/2 (I) miembro(?x,?xs) X pertenece a la lista Xs Cómo aplicamos recursión sobre la lista? miembro(x,?):-... miembro(x,?):-... % base % recursivo Cuál es el caso base? 21
22 El predicado miembro/2 (II) miembro(?x,?xs) X pertenece a la lista Xs Caso base: he encontrado el elemento miembro(x,[x Xs]). miembro(x,?):-... % base % recursivo sólo puedo inspeccionar la cabeza de la lista suponemos que Xs es una lista 22
23 El predicado miembro/2 (y III) miembro(?x,?xs) X pertenece a la lista Xs Caso recursivo: puede estar en el resto de la lista miembro(x,[x Xs]). % base miembro(x,[y Xs]):- miembro(x,xs). % recursivo Los casos base y recursivo no son excluyentes 23
24 Usos de miembro/2?- miembro(b,[a,b,c]). % test Yes?- miembro(x,[a,b,c]). % generador acotado X = a ; X = b ; X = c ; No?- miembro(a,xs). % generador no acotado Xs = [a _G323] ; Xs = [_G322, a _G326] ; Xs = [_G322, _G325, a _G329]... 24
25 Tabla de comportamiento de miembro/2 miembro(x,asxbs) Uso Comportamiento Significado (+,+) test X AsXBs (-,+) generador acotado {X X AsXBs} (+,-) generador no acotado AsXBs= [_,..., _, X _] (-,-) generador no acotado AsXBs= [_,..., _, X _] Notación: el nombre AsXBs refleja la estructura del término: una lista que contiene X Ejercicio: Construir la tabla utilizando como caso base miembro(x,[x Xs]) :- es_lista(xs). 25
26 El predicado prefijo/2 (I) prefijo(?xs,?xsys) Xs es prefijo de XsYs Se puede razonar: aplicando el patrón: reducir, resolver, componer (hacia atrás) operacionalmente, recorriendo Xs (hacia delante) Lo resolveremos de ambas formas 26
27 El predicado prefijo/2 (II) prefijo(?xs,?xsys) Xs es prefijo de XsYs Aplicamos recursión sobre el primer argumento: prefijo([],?) :-... prefijo([x Xs],?) :-... % base % recursivo Caso base: de qué listas es prefijo la lista vacía? 27
28 El predicado prefijo/2 (III) prefijo(?xs,?xsys) Xs es prefijo de XsYs Caso base: la lista vacía es prefijo de cualquier lista prefijo([],ys). prefijo([x Xs],?) :-... % base % recursivo Caso recursivo: reducir, resolver y componer 28
29 El predicado prefijo/2 (IV) prefijo(?xs,?xsys) Xs es prefijo de XsYs Caso recursivo: reducir y resolver son triviales prefijo([],ys). prefijo([x Xs],?) :- prefijo(xs,xsys). % base % recursivo Caso recursivo: componer supongamos que Xs es prefijo de XsYs de qué listas es prefijo [X Xs]? 29
30 El predicado prefijo/2 (V) prefijo(?xs,?xsys) Xs es prefijo de XsYs prefijo([],ys). prefijo([x Xs],[X XsYs]):- prefijo(xs,xsys). % base % recursivo También se puede razonar operacionalmente 30
31 El predicado prefijo/2 (VI) prefijo(?xs,?xsys) Xs es prefijo de XsYs Recorremos la primera lista de la cabeza a la cola: prefijo([x Xs],?) :-... Si la primera lista comienza con X, por qué debe empezar la segunda lista? 31
32 El predicado prefijo/2 (VII) prefijo(?xs,?xsys) Xs es prefijo de XsYs La segunda también debe comenzar por X: prefijo([x Xs],[X XsYs]) :-... Ya hemos comprobado que las cabezas coinciden: y los restos? 32
33 El predicado prefijo/2 (VIII) prefijo(?xs,?xsys) Xs es prefijo de XsYs Continuamos recorriendo la lista para comprobar el resto: prefijo([x Xs],[X XsYs]) :- prefijo(xs,xsys). Cuando acabamos? 33
34 El predicado prefijo/2 (IX) prefijo(?xs,?xsys) Xs es prefijo de XsYs Cuando hayamos recorrido completamente la primera lista: prefijo([],ys). prefijo([x Xs],[X XsYs]) :- prefijo(xs,xsys). 34
35 El predicado prefijo/2 (y XI) prefijo(?xs,?xsys) Xs es prefijo de XsYs Podemos representar gráficamente el razonamiento operacional: XsYs [X1 X1s] Ys [X1 X1s] Xs Idea: ir comparando ambas listas por la cabeza, hasta agotar Xs 35
36 Usos de prefijo/2?- prefijo([a,b,c],[a,b,c]). % test Yes?- prefijo(ps,[a,b,c]). % generador acotado Ps = [] ; Ps = [a] ; Ps = [a, b] ; Ps = [a, b, c] ; No 14?- prefijo([a,b],xs). % generador único Xs = [a, b _G362] ; No 36
37 Tabla de comportamiento de prefijo/2 prefijo(?xs,?xsys) Uso Comportamiento Significado (+,+) test comprueba Xs es prefijo de XsYs (-,+) generador acotado genera prefijos de XsYs (+,-) generador único dada Xs= [t 1,,t n ], genera XsYs= [t 1,, t n _] (-,-) generador no acotado genera Xs= [V 1,,V n ] XsYs= [V 1,,V n _] Ejercicio: construir la tabla de comportamiento que se obtiene al añadir la comprobación de dominio (es_lista/1) al caso base 37
38 El predicado sufijo/2 (I) sufijo(?xs,?ysxs) Xs es sufijo de YsXs Lo más fácil es razonar operacionalmente (hacia delante): Ys eliminar YsXs Xs Xs Idea: eliminar elementos de la cabeza de YsXs hasta obtener Xs 38
39 El predicado sufijo/2 (y II) sufijo(?xs,?ysxs) Xs es sufijo de YsXs sufijo(xs,xs). % son iguales sufijo(xs,[y YsXs]) :- sufijo(xs,ysxs). % eliminar cabeza 39
40 Usos de sufijo/2?- sufijo(ss,[a,b]). % generador acotado Ss = [a, b] ; Ss = [b] ; Ss = [] ; No?- sufijo([a,b],xs). % generador no acotado Xs = [a, b] ; Xs = [_G346, a, b] ;...?- sufijo(xs,ys). % generador no acotado Xs = _G266 Ys = _G266 ; Xs = _G266 Ys = [_G331 _G266] ;... 40
41 Tabla de comportamiento de sufijo/2 sufijo(?xs,?ysxs) Uso Comportamiento Significado (+,+) test comprueba si Xs es sufijo de YsXs (-,+) generador acotado genera en Xs sufijos de YsXs (+,-) generador no acotado YsXs = [V1,,Vi Xs] i= 0 (-,-) generador no acotado Xs = V, YsXs =[V1,,Vi V] i= 0 41
42 El predicado selecciona/3 (I) selecciona(?x,?asxbs,?asbs) AsBs es el resultado de eliminar X de AsXBs hay que localizar X en AsXBs (similar a miembro/2) y eliminarlo aplicamos recursión sobre la lista AsXBs : selecciona(x,[x Bs],?) :-... selecciona(x,[a AsXBs],?) :
43 El predicado selecciona/3 (II) selecciona(?x,?asxbs,?asbs) AsBs es el resultado de eliminar X de AsXBs Caso base: trivial selecciona(x,[x Bs],Bs). selecciona(x,[a AsXBs],?) :-... Caso recursivo: reducir, resolver, componer 43
44 El predicado selecciona/3 (III) selecciona(?x,?asxbs,?asbs) AsBs es el resultado de eliminar X de AsXBs Caso recursivo: reducir y resolver son directos selecciona(x,[x Bs],Bs). selecciona(x,[a AsXBs],?) :- selecciona(x,asxbs,asbs). en qué consiste componer? 44
45 El predicado selecciona/3 (y IV) selecciona(?x,?asxbs,?asbs) AsBs es el resultado de eliminar X de AsXBs selecciona(x,[x Bs],Bs). selecciona(x,[a AsXBs],[A AsBs]) :- selecciona(x,asxbs,asbs). Ejercicio: construye la tabla de comportamiento de selecciona/3 45
46 Usos de selecciona/3?- selecciona(a,[a,b,a,c],xs). % gen acotado Xs = [b, a, c] ; Xs = [a, b, c] ; No?- selecciona(a,xs,[b,c]). % gen acotado Xs = [a, b, c] ; Xs = [b, a, c] ; Xs = [b, c, a] ; No?- selecciona(x,[a,b,c,d],[a,c,d]). % gen único X = b ; No 46
47 Ejercicios Define los siguientes predicados sobre listas: 1. primero(?x,?xys), X es el primer elemento de XYs 2. ultimo(?x,?ysx), X es el último elemento de YsX 3. pri_y_ult(?x,?y,?xzsy), X e Y son primero y último de XZsY 4. adyacentes(?x,?y,?asxybs), A y B son adyacentes en AsXYBs 5. todos_iguales(?xs), Xs tiene todos los elementos iguales 6. iesimo(+i,?asxbs,?x), X es el I-ésimo elemento de AsXBs 7. sublista(?xs,?asxsbs), Xs es sublista de AsXsBs 47
48 El predicado concatena/3 (I) concatena(?xs,?ys,?xsys) XsYs es la concatenación de Xs e Ys Aplicamos recursión sobre el primer argumento: concatena([], Ys,?) :-... concatena([x Xs], Ys,?) :
49 El predicado concatena/3 (II) concatena(?xs,?ys,?xsys) XsYs es la concatenación de Xs e Ys Caso base: trivial concatena([], Ys, Ys). concatena([x Xs], Ys,?) :-... Caso recursivo: reducir, resolver y componer 49
50 El predicado concatena/3 (III) concatena(?xs,?ys,?xsys) XsYs es la concatenación de Xs e Ys Caso recursivo: reducir y resolver concatena([], Ys, Ys). concatena([x Xs], Ys,?) :- concatena(xs,ys,xsys). Si Xs concatenado con Ys es XsYs, Qué se obtiene al concatenar [X Xs] con Ys? 50
51 El predicado concatena/3 (y IV) concatena(?xs,?ys,?xsys) XsYs es la concatenación de Xs e Ys concatena([], Ys, Ys). concatena([x Xs], Ys, [X XsYs]) :- concatena(xs,ys,xsys). A qué predicado de la aritmética de Peano se parece? 51
52 Usos de concatena/3?- concatena([a,b],[c,d],xs). % gen único Xs = [a, b, c, d] ; No?- concatena(xs,[c,d],[a,b,c,d]). % gen único Xs = [a, b] ; No?- concatena(xs,ys,[a,b,c]). % gen acotado Xs = [] Ys = [a, b, c] ; Xs = [a] Ys = [b, c] ; Xs = [a, b] Ys = [c] ; Xs = [a, b, c] Ys = [] ; No 52
53 Tabla de comportamiento de concatena/3 concatena(?xs,?ys,?xsys) Uso Comportamiento Significado (+,+,+) test Xs concatenada con Ys es XsYs (+,+,-) generador único dadas Xs = [X1,,Xn], Ys = [Y1,,Ym] genera XsYs = [X1,,Xn,Y1,,Ym] (-,+,+) generador único dadas XsYs = [X1,,Xn,Y1,,Ym], Ys = [Y1,,Ym] genera Xs = [X1,,Xn] (+,-,+) generador único similar a (-,+,+) (-,-,+) generador acotado dada XsYs = [T1,,Tn], i=0..n genera Xs = [T 1,,T i ] Ys = [T i+1,,t n ] 53
54 Ejercicios Define los siguientes predicados empleando concatena/3: 1. primero(?x,?xys), X es el primer elemento de XYs 2. ultimo(?x,?ysx), X es el último elemento de YsX 3. pri_y_ult(?x,?y,?xzsy), X e Y son primero y último de XZsY 4. adyacentes(?x,?y,?asxybs), X e Y son adyacentes en AsXYBs 5. prefijo(?xs,?xsys), Xs es prefijo de XsYs 6. sufijo(?xs,?ysxs), Xs es sufijo de XsYs 7. sublista(?xs,?asxsbs), Xs es sublista de AsXsBs 8. miembro(?x,?asxbs), X pertenece a la lista AsXBs 9. selecciona(?x,?asxbs,?asbs), AsBs resulta de eliminar X de AsXBs 54
55 El predicado inversa/2 (I) inversa(+xs,?sx) Sx es la inversa de Xs Aplicamos recursión sobre el primer argumento: inversa([],[]). inversa([x Xs],?) :- inversa(xs,sx),?. Si la inversa de Xs es Sx, cuál es la inversa de [X Xs]? 55
56 El predicado inversa/2 (y II) inversa(+xs,?sx) Sx es la inversa de Xs Hay que poner X al final de Sx: inversa([],[]). inversa([x Xs],SxX) :- % O(n 2 ) inversa(xs,sx), concatena(sx,[x],sxx). % O(n) Tiempo: O(n 2 ) Cómo mejorar la eficiencia? aplicar recursión de cola 56
57 inversa/2 con recursión de cola (I) inversa(+xs,?sx) Sx es la inversa de Xs inversa(xs,sx) :- inversa_cola(xs,[],sx). inversa_cola([],sx,sx). inversa_cola([x Xs],Is,Sx) :- actualizar(x,is,xis), inversa_cola(xs,xis,sx). En qué consiste actualizar? 57
58 inversa/2 con recursión de cola (y II) inversa(?xs,?sx) Sx es la inversa de Xs inversa(xs,sx) :- inversa_cola(xs,[],sx). inversa_cola([],sx,sx). inversa_cola([x Xs],Is,Sx) :- inversa_cola(xs,[x Is],Sx). Tiempo: O(n) La recursión de cola reduce el consumo de memoria y tiempo 58
59 El predicado borrar/3 (I) borrar(+x,+as,?bs) borra todas las X de As, dando Bs Aplicamos recursión a As: borrar(x,[],[]). borrar(x,[a As],?) :-... % base % recursivo En el caso recursivo: no puedo emplear unificación (X y As están en modo +) lo que se haga depende de si X y A son el mismo término qué predicado de comparación debo utilizar? 59
60 El predicado borrar/3 (y II) borrar(+x,+as,?bs) borra todas las X de As, dando Bs El caso recursivo se divide en dos casos: borrar(x,[],[]). borrar(x,[a As],Bs) :- X == A, borrar(x,as,bs). borrar(x,[a As],[A Bs]) :- X \== A, borrar(x,as,bs). % base % borrar A % conservar A 60
61 Ejercicios Define los siguientes predicados (sin unificar en modo +): 1. esta(+x,+asxbs), X está en AsXBs 2. no_esta(+x,+asbs), X no está en AsBs 3. purga(+xxss,?xs), Xs resulta de eliminar elementos repetidos de XXss 4. borra_una(+x,+as,?bs), borra una X de As, dando Bs 5. borra_algunas(+x,+as,?bs), borra algunas X de As, dando Bs 6. borra_al_menos_una(+x,+as,?bs), borra al menos una X de As, dando Bs 7. borra_pri(+x,+as,?bs). borra la primera X de As, dando Bs 8. borra_ult(+x,+as,?bs), borra la última X de As, dando Bs 61
62 El predicado quicksort/2 quicksort(+as,?os) Os es As ordenada por quicksort Aplicamos recursión sobre As: quicksort([],[]). quicksort([a As], Os) :- partir(a,as,menorigs,mayores), quicksort(menorigs,omenorigs), quicksort(mayores,omayores), concatena(omenorigs,[a OMayores],Os). Cómputo = Deducción controlada Algoritmo 62
63 El predicado partir/3 partir(+pivote,+as,?menorigs,?mayores) parte As en MenorIgs y Mayores respecto a Pivote Aplicamos recursión sobre As: partir(pivote,[],[],[]). partir(pivote,[a As],[A MenorIgs],Mayores) :- Pivote, partir(pivote,as,menorigs,mayores). partir(pivote,[a As],MenorIgs,[A Mayores]) :- Pivote, partir(pivote,as,menorigs,mayores). 63
64 Ejercicios Define los siguientes predicados de ordenación: 1. burbuja(+as,?os) 2. insercion(+as,?os) 3. mezcla(+as,?os) 4. quicksort_azar(+as,?os) ordena por quicksort, seleccionando el pivote al azar (emplea la función random/1) 64
65 El predicado permutacion/2 (I) permutacion(+xs,?ys) Ys es una permutación de Xs Aplicamos recursión sobre Xs: permutacion([],[]). % base permutacion([x Xs],?) :- % recursivo permutacion(xs,ys), % reducir + resolver? % componer Componer: añadir X a Ys en qué posición? 65
66 El predicado permutacion/2 (y II) permutacion(+xs,?ys) Ys es una permutación de Xs Hay que añadir X a Ps en todas las posiciones posibles: permutacion([],[]). permutacion([x Xs],Ys) :- permutacion(xs,ps), selecciona(x,ys,ps). % base % recursivo % reducir + resolver % componer 66
67 El predicado combinacion/3 (I) combinacion(+xs,+n,?cs) Cs es una combinación de N elementos de Xs Aplicamos recursión sobre N: combinacion(xs,0,[]). combinacion([x Xs],N,?) :- N > 0, % base % recursivo Caso recursivo: hay que distinguir dos posibilidades, según X forme parte o no de la combinación Cs 67
68 El predicado combinacion/3 (y II) combinacion(+xs,+n,?cs) Cs es una combinación de N elementos de Xs combinacion(xs,0,[]). combinacion([x Xs],N,[X Cs]) :- N > 0, N1 is N-1, combinacion(xs,n1,cs). combinacion([x Xs],N,Cs) :- N > 0, combinacion(xs,n,cs). % base % X Cs % X Cs 68
69 Generar/comprobar con listas
70 El prefijo más largo que suma N (I) Problema: aplicando generar/comprobar, define un predicado premax(+psxs,+n,?ps) que se satisface cuando Ps es el prefijo no vacío más largo de PsXs tal que la suma de sus elementos no supera N Ejemplo:?- premax([1,2,3,4,5,6],12,ps). Ps = [1,2,3,4] ; No 70
71 El prefijo más largo que suma N (II) Necesitamos un generador de prefijos: premax(psxs,n,ps) :- prefijo(ps,psxs), % generar... % comprobar Qué condiciones debe verificar Ps? 1. no es vacío 2. la suma de sus elementos no supera N 3. es el más largo posible 71
72 El prefijo más largo que suma N (III) El prefijo no puede ser vacío: premax(psxs,n,[p Ps]) :- prefijo([p Ps],PsXs), % generar... % comprobar 72
73 El prefijo más largo que suma N (IV) La suma de los elementos de [P Ps] no puede superar N: premax(psxs,n,[p Ps]) :- prefijo([p Ps],PsXs), suma([p Ps],S), S =< N,... % generar % comprobar [P Ps] debe ser el prefijo más largo con estas condiciones 73
74 El prefijo más largo que suma N (y V) [P Ps] no puede crecer sin violar las condiciones: premax(psxs,n,[p Ps]) :- concatena([p Ps],Xs,PsXs), suma([p Ps],S), S =< N, no_crece(s,n,xs). % generar % comprobar no_crece(_,_,[]). no_crece(s,n,[x _]) :- S + X > N. 74
75 La secuencia mágica (I) Problema: definir un predicado secuencia(?xs) que genere todas las secuencias de dígitos entre 1 y 9 tales que: 1) todos los dígitos aparecen tres veces 2) las tres apariciones del dígito i están separadas entre sí por i dígitos Ejemplo: 1, 9, 1, 2, 1, 8, 2, 4, 6, 2, 7, 9, 4, 5, 8, 6, 3, 4, 7, 5, 3, 9, 6, 8, 3, 5, 7 Qué longitud tiene la lista Xs? Solución: aplicando generar/comprobar, construimos listas que satisfagan todas las condiciones 75
76 La secuencia mágica (y II) secuencia(xs) :- % Xs = lista de 27 variables libres Xs = [_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_], % restricciones sublista([1,_,1,_,1],xs), sublista([2,_,_,2,_,_,2],xs), sublista([3,_,_,_,3,_,_,_,3],xs), sublista([4,_,_,_,_,4,_,_,_,_,4],xs), sublista([5,_,_,_,_,_,5,_,_,_,_,_,5],xs), sublista([6,_,_,_,_,_,_,6,_,_,_,_,_,_,6],xs), sublista([7,_,_,_,_,_,_,_,7,_,_,_,_,_,_,_,7],xs), sublista([8,_,_,_,_,_,_,_,_,8,_,_,_,_,_,_,_,_,8],xs), sublista([9,_,_,_,_,_,_,_,_,_,9,_,_,_,_,_,_,_,_,_,9],xs). 76
77 El problema de las N reinas (I) Problema: colocar N reinas en un tablero de ajedrez de manera que las reinas no se ataquen unas a otras Ejemplo: para N = 8, dónde ponemos la siguiente reina? 77
78 El problema de las N reinas (II) Solución: no hay solución analítica (incluso Gauss fracasó!), sólo podemos aplicar un método de prueba y error Aplicando generar/comprobar, definiremos un predicado reinas(+n,?solucion) que genere en Solucion todas las soluciones posibles La solución debe mostrar el emplazamiento de las N reinas Cómo representamos la solución? 78
79 El problema de las N reinas (III) Primera posibilidad: como una lista de coordenadas (fila,columna) [(X1,Y1), (X2,Y2),, (XN,YN)] Inconveniente: el espacio de búsqueda es demasiado grande para N = 8, tenemos unos candidatos posibles comprobando 1 millón de candidatos por segundo, llevaría 135 años Cómo reducir el espacio de búsqueda? 79
80 El problema de las N reinas (IV) Segunda posibilidad: El elemento i-ésimo de la lista representa la fila ocupada por la reina situada en la columna i-ésima 1 2 N columna Yi [X1, X2,, XN] Xi {1..N}, sin repet. [X1, X2,, XN] es una permutación de la lista [1,2,3,,N] tal que las reinas no se atacan (N! candidatos, 8! = 40320) Por construcción: sólo puede haber una reina en cada fila sólo puede haber una reina en cada columna sólo hay que evitar ataques diagonales 80
81 El problema de las N reinas (V) reinas(n,solucion) :- rango(1,n,filas), permutacion(filas,solucion), no_se_atacan(solucion). % generar % comprobar Cómo mejorar esta solución? 81
82 El problema de las N reinas (VI) Entrelazar generación y comprobación: cada vez que se coloque una reina, comprobar que no ataca a las ya colocadas Esto exige llevar cuenta de las reinas colocadas reinas(n,solucion) :- rango(1,n,disponibles), reinas(disponibles,[],solucion). colocadas Vamos tomando filas Disponibles y las ponemos en Colocadas, comprobando que no ataca a las anteriores 82
83 El problema de las N reinas (VII) % reinas(disponibles,colocadas,solucion) reinas([],solucion,solucion). reinas(disponibles,colocadas,solucion) :- selecciona(fila,disponibles,disponibles_1), no_ataca(fila,colocadas), reinas(disponibles_1,[fila Colocadas],Solucion). El tablero se rellena por columnas, de derecha (N) a izquierda (1) 83
84 El problema de las N reinas (y VIII) no_ataca(fila,colocadas) comprueba que la reina recién colocada no está en la misma diagonal que las anteriores no_ataca(fila,colocadas) :- no_ataca(fila,1,colocadas). no_ataca(_,_,[]). no_ataca(fila,n,[f Colocadas]) :- % N dist horiz. N =\= abs(fila - F), % dist. vertical N1 is N+1, no_ataca(fila,n1,colocadas). 84
Programación Declarativa Ejercicios de programación con listas
Programación Declarativa Ejercicios de programación con listas Ejercicio 1 Define versiones recursivas de los siguientes predicados sobre listas: es lista(xs) Xs es una lista bien formada es lista nat(ss)
Más detallesProgramación lógica con árboles. Introducción. Contenido. Introducción. 1. Programación con árboles 2. Otras estructuras arbóreas
Contenido 1. Programación con árboles 2. Otras estructuras arbóreas Ingeniería Informática Ingeniería Técnica en Informática Departamento de Lenguajes y Ciencias de la Computación Universidad de Málaga
Más detallesProgramación con Listas
Capítulo 2 Programación con Listas En Prolog la estructura de lista está predefinida como una estructura recursiva lineal cuyas componentes pueden ser heterogéneas porque en Prolog no existe una comprobación
Más detallesProgramación con listas
Programación con Estructuras III.1 Programación con listas Unificación con listas. Dominio de definición Predicados sobre listas.tablas de comportamiento Predicados aritméticos con listas. Predicados iterativos
Más detallesProgramación recursiva en Prolog
Programación recursiva en Prolog Curso 2002/03, Fecha:14/12/2002 Enunciado 1 (naturales) El siguiente predicado define la suma de números naturales representados mediante la constante 0 y la función siguiente
Más detallesProgramación Declarativa UNIVERSIDAD DE MÁLAGA
Programación Declarativa UNIVERSIDAD DE MÁLAGA (3 o de Ingeniería Técnica en Informática) E.T.S.I. INFORMÁTICA 17 de Febrero de 2005 Alumno: Grupo: Prolog Ejercicio 1 (a)(2 pts.) Realiza el árbol de búsqueda
Más detallesTema IV Programación lógica con estructuras
Tema IV Programación lógica con estructuras Programación Lógica - E.T.S.I. Informática - Málaga 1 Términos La estructura de datos básica en PROLOG es el término. Los términos se clasifican en : variables
Más detallesTipos algebraicos y abstractos. Algoritmos y Estructuras de Datos I. Tipos algebraicos
Algoritmos y Estructuras de Datos I 1 cuatrimestre de 009 Departamento de Computación - FCEyN - UBA Programación funcional - clase Tipos algebraicos Tipos algebraicos y abstractos ya vimos los tipos básicos
Más detallesGuía 2: Listas, recursión e inducción
Introducción a los Algoritmos - 2do cuatrimestre 2014 Guía 2: Listas, recursión e inducción Docentes: Walter Alini, Luciana Benotti En esta guía comenzaremos a trabajar con listas Para familiarizarnos
Más detallesTipos de datos algebraicos
Tipos de datos algebraicos Taller de Álgebra I Segundo cuatrimestre de 2013 Programación funcional Recordemos que un tipo de datos es un conjunto dotado con una serie de operaciones sobre los elementos
Más detalles3.2. Control con cortes Operador corte Cortes verdes Cortes rojos
3. CONTROL en la PROGRAMACIÓN LOGICA 45 Tema 3. CONTROL en la PROGRAMACION LOGICA 3.1. Control mediante el Orden en literales y sentencias 3.2. Control con cortes 3.2.1. Operador corte 3.2.2. Cortes verdes
Más detallesListas en Prolog. Capítulo. Listas como sujetos
Capítulo 5 Listas en Prolog Este capítulo introduce el concepto de lista, un tipo de dato de gran influencia dentro de la inteligencia artificial. Se comienza con una introducción a listas en Prolog y
Más detallesMetodología de Programación I Tutorial Prolog 1/3
Metodología de Programación I Tutorial Prolog 1/3 Dr. Alejandro Guerra-Hernández Departamento de Inteligencia Artificial Facultad de Física e Inteligencia Artificial aguerra@uv.mx http://www.uv.mx/aguerra
Más detallesProgramas Generate & Test
Programas Generate & Test Son básicamente programas que generan soluciones candidatas que se evalúan para comprobar si son o no correctas En algunas ocasiones es más sencillo comprobar si algo es una solución
Más detallesINDICACIONES PARA LA SOLUCIÓN A ALGUNOS PROBLEMAS DE LA RELACION 6. Se usarán los siguiente predicados genéricos en todos los ejemplos
INDICACIONES PARA LA SOLUCIÓN A ALGUNOS PROBLEMAS DE LA RELACION 6 PINTAR UN SOBRE COLOREADO DE MAPAS MOCHILA REINAS ENCASILLADO Se usarán los siguiente predicados genéricos en todos los ejemplos miembro(x,[x
Más detallesGuía 2: Funciones, listas, recursión e inducción
Introducción a los Algoritmos - 1er cuatrimestre 2013 Guía 2: Funciones, listas, recursión e inducción El objetivo de los siguientes ejercicios es introducirnos en la programación funcional, es decir,
Más detallesAbstracción de procedimientos
Abstracción de procedimientos 1.- Consideremos ABN (árboles binarios numéricos) sin nodos repetidos. Denimos los siguientes conceptos: Se pide: Dados dos ABN, A y B, decimos que B es SUBARBOL PRINCIPAL
Más detallesProgramación Declarativa Universidad de Málaga
Programación Declarativa Universidad de Málaga 3. o de Ingeniería Informática E.T.S.I. Informática Enero de 2008 Tema 5. Programación lógica con árboles Ejercicios Ejercicio 1. Dada la siguiente representación
Más detallesn! = 1 2 n 0! = 1 (n+1)! = (n + 1) n!
Capítulo 3 Recursión La recursión es un estilo autoreferencial de definición usado tanto en matemática como en informática. Es una herramienta de programación fundamental, particularmente importante para
Más detallesPROGRAMACIÓN ORIENTADA A LA INTELIGENCIA ARTIFICIAL
PROGRAMACIÓN ORIENTADA A LA INTELIGENCIA ARTIFICIAL Ejercicios de programación en LISP y PROLOG prog-ia@dia.uned.es Dpto. Inteligencia Artificial E.T.S.I. Informática (UNED) C/ Juan del Rosal 16 28040
Más detallesESTRUCTURAS DE DATOS
ESTRUCTURAS DE DATOS Listas 1. Definir predicados Prolog referentes a listas con los siguientes significados: miembro(elem,lista) "Elem pertenece a Lista" longitud(lista,long) "Lista tiene Long elementos"
Más detallesEstructuras de Datos y Listas en PROLOG. 1. Estructuras y árboles 2. Listas 3. Operaciones con Listas 4. Ejercicios 5. Prácticas
Estructuras de Datos y Listas en PROLOG 1. Estructuras y árboles 2. Listas 3. Operaciones con Listas 4. Ejercicios 5. Prácticas 1. Estructuras y árboles Una estructura de datos en PROLOG se puede visualizar
Más detallesPROGRAMACIÓN ORIENTADA A LA INTELIGENCIA ARTIFICIAL
PROGRAMACIÓN ORIENTADA A LA INTELIGENCIA ARTIFICIAL Ejercicios de programación en LISP y PROLOG Angeles Manjarrés Riesco Severino Fernández Galán Jesús González Boticario prog-ia@dia.uned.es Dpto. Inteligencia
Más detallesEstructuras incompletas. Listas diferencia.
Estructuras incompletas. Listas diferencia. 1 / 13 Estructuras incompletas Proporcionan una técnica de implementación muy potente propia de Prolog: Incrementan radicalmente la eficiencia de muchos programas.
Más detallesTema 13: Aplicaciones de programación funcional
Tema 13: Aplicaciones de programación funcional Programación declarativa (2010 11) José A. Alonso Jiménez Grupo de Lógica Computacional Departamento de Ciencias de la Computación e I.A. Universidad de
Más detallesTema 2: Lenguajes Formales. Informática Teórica I
Tema 2: Lenguajes Formales Informática Teórica I Teoría de Lenguajes Formales. Bibliografía M. Alfonseca, J. Sancho y M. Martínez. Teoría de Lenguajes, Gramáticas y Autómatas, R.A.E.C., Madrid, (1998).
Más detallesMetaprogramación. Ingeniería Informática. Departamento de Lenguajes y Ciencias de la Computación Universidad de Málaga
Ingeniería Informática Departamento de Lenguajes y Ciencias de la Computación Universidad de Málaga Contenido 1. Clasificación de términos 2. Inspección de estructuras 2 Clasificación de términos Clasificación
Más detalles5.3 Tipos de Datos en Prolog
5.3 Tipos de Datos en Prolog Objetos de Datos en Prolog Objetos de datos simples Objetos estructurados Calce de operaciones fundamentales sobre objetos 1 Tipos de Objetos de Datos Objetos de datos Objetos
Más detalles5.3 Tipos de Datos en Prolog
5.3 Tipos de Datos en Prolog Objetos de Datos en Prolog Objetos de datos simples Objetos estructurados Calce de operaciones fundamentales sobre objetos Tipos de Objetos de Datos Objetos de datos Objetos
Más detallesMetodología de Programación I Tutorial Prolog 2/3
Metodología de Programación I Tutorial Prolog 2/3 Dr. Alejandro Guerra-Hernández Departamento de Inteligencia Artificial Facultad de Física e Inteligencia Artificial aguerra@uv.mx http://www.uv.mx/aguerra
Más detallesUna ecuación lineal de n-incógnitas es una igualdad de la forma:
página 1/39 Teoría Tema 6 Ecuación lineal Una ecuación lineal de n-incógnitas es una igualdad de la forma: a 1 x 1 +a 2 x 2 +a 3 x 3 +...+a n x n =c Donde a 1,a 2, a 3,..., a n,c son números reales. En
Más detallesAlgoritmos y programas. Algoritmos y Estructuras de Datos I
Algoritmos y programas Algoritmos y Estructuras de Datos I Primer cuatrimestre de 2012 Departamento de Computación - FCEyN - UBA Programación funcional - clase 1 Funciones Simples - Recursión - Tipos de
Más detallesProgramación n en Prolog
Programación n Declarativa: Lógica y Restricciones Conceptos Básicos B de la Programación n en Prolog Mari Carmen Suárez de Figueroa Baonza mcsuarez@fi.upm.es Contenidos Unificación Estructuras de datos
Más detallesCAPITULO 2: LENGUAJES
CAPITULO 2: LENGUAJES 2.1. DEFINICIONES PREIAS SIMBOLO: Es una entidad indivisible, que no se va a definir. Normalmente los símbolos son letras (a,b,c,.., Z), dígitos (0, 1,.., 9) y otros caracteres (+,
Más detallesMatriz asociada a una transformación lineal respecto a un par de bases
Matriz asociada a una transformación lineal respecto a un par de bases Ejercicios Objetivos Comprender cómo se describe una transformación lineal (que actúa en espacios vectoriales de dimensiones finitas)
Más detallesAlgebra lineal y conjuntos convexos
Apéndice A Algebra lineal y conjuntos convexos El método simplex que se describirá en el Tema 2 es de naturaleza algebraica y consiste en calcular soluciones de sistemas de ecuaciones lineales y determinar
Más detallesAlgoritmos sobre Listas
TEMA 6 Algoritmos sobre Listas V1.1 Manuel Pereira González Agenda Introducción Algoritmos de Búsqueda Búsqueda Secuencial Búsqueda Binaria Análisis de Eficiencia Algoritmos de Inserción Algoritmos de
Más detallesContenido. Prólogo... Prólogo a la edición en español Argumentos y proposiciones lógicas Introducción
CONTENIDO vii Contenido Prólogo... Prólogo a la edición en español... XVIl XXI 1 Cálculo proposicional... 1 1.1 Argumentos y proposiciones lógicas 1.1.1 Introducción 1 1 1.1.2 Algunos argumentos lógicos
Más detallesÁLGEBRA DE MATRICES TRASPUESTA DE UNA MATRIZ SUMA Y RESTA DE MATRICES
ÁLGEBRA DE MATRICES TRASPUESTA DE UNA MATRIZ La traspuesta de una matriz A consiste en intercambiar las filas por las columnas (o las columnas por las filas) y se denota por: A T Así, la traspuesta de
Más detallesProgramación Declarativa Haskell Informática Sistemas Curso Pepe Gallardo Universidad de Málaga. Tema 8. Listas
Programación Declarativa Haskell Informática Sistemas Curso 2003-2004 Pepe Gallardo Universidad de Málaga Tema 8. Listas 8.1 Secuencias aritméticas 8.2 Algunas funciones predefinidas 8.3 Listas por comprensión
Más detallesInteligencia Artificial II Prolog I
Inteligencia Artificial II Prolog I Dr. Alejandro Guerra-Hernández Universidad Veracruzana Centro de Investigación en Inteligencia Artificial mailto:aguerra@uv.mx http://www.uv.mx/personal/aguerra Maestría
Más detallesTema 3. Patrones y Definiciones de Funciones
Informática Haskell Matemáticas Curso 2004-2005 Pepe Gallardo Universidad de Málaga Tema 3. Patrones y Definiciones de Funciones 3.1 Comparación de Patrones Patrones constantes Patrones para listas Patrones
Más detallesTema 6: Estructuras de datos recursivas
Tema 6: Estructuras de datos recursivas Índice 1 Listas jerárquicas...2 2 Árboles binarios... 4 3 Árboles genéricos...7 4 Referencias...10 1. Listas jerárquicas Las listas tienen la propiedad de la clausura
Más detallesTema 3. Patrones y Definiciones de Funciones
Programación Declarativa Haskell Informática Sistemas Curso 2003-2004 Pepe Gallardo Universidad de Málaga Tema 3. Patrones y Definiciones de Funciones 3.1 Comparación de Patrones Patrones constantes Patrones
Más detallesPropiedades de lenguajes independientes del contexto
Capítulo 12. Propiedades de lenguajes independientes del contexto 12.1. Identificación de lenguajes independientes del contexto Lema de bombeo. 12.2. Propiedades Cierre, Complemento de lenguajes, Sustitución,
Más detalles5.3 Tipos de Datos en Prolog
5.3 Tipos de Datos en Prolog Recocimiento de Tipos Se recoce el tipo de un dato por su forma sintáctica; se requiere de declaración de tipos Ejemplo: Variables se definen comienzan con primera en mayúsculas
Más detallesMatrices. En este capítulo: matrices, determinantes. matriz inversa
Matrices En este capítulo: matrices, determinantes matriz inversa 1 1.1 Matrices De manera informal una matriz es un rectángulo de números dentro de unos paréntesis. A = a 1,1 a 1,2 a 1,3 a 2,1 a 2,2 a
Más detallesPráctica N o 1 - Programación Funcional
Práctica N o 1 - Programación Funcional Para resolver esta práctica, recomendamos usar el Hugs 98, de distribución gratuita, que puede bajarse de http://www.haskell.org/hugs/. Ejercicio 1 Dado el siguiente
Más detallesProfesor: José Miguel Rubio L.
Profesor: José Miguel Rubio L. Magíster en Ingeniería Informática Ingeniero Civil en Informática Licenciado en Ciencias de la Ingeniería Técnico en Programación Oficina: 3-20 e-mail 1: jose.rubio.l@ucv.cl
Más detallesProducto Escalar. AMD Grado en Ingeniería Informática. AMD Grado en Ingeniería Informática (UM) Producto Escalar 1 / 31
Producto Escalar AMD Grado en Ingeniería Informática AMD Grado en Ingeniería Informática (UM) Producto Escalar 1 / 31 Objetivos Al finalizar este tema tendrás que: Saber usar el producto escalar. Calcular
Más detallesSuma de productos Producto de sumas. Fundamentos de los Computadores Grado en Ingeniería Informática
2. Simplificación de funciones booleanas: as Método de Karnaugh aug Suma de productos Producto de sumas Fundamentos de los Computadores Grado en Ingeniería Informática Introducción Los circuitos digitales
Más detallesProgramación: Construcción del polinomio interpolante con la fórmula de Newton
Programación: Construcción del polinomio interpolante con la fórmula de Newton Se recomienda resolver estos ejercicios antes de la clase de programación. Objetivos. Programar la construcción del polinomio
Más detallesGUÍA DE EJERCICIOS: MATEMÁTICAS
GUÍA DE EJERCICIOS: MATEMÁTICAS Matrices Esta guía de estudio está diseñada con ejercicios resueltos paso a paso con el fin de mostrar los procedimientos detallados para abordar cada uno de ellos. Las
Más detalles1. Cadenas EJERCICIO 1
LENGUAJES FORMALES Y AUTÓMATAS CURSO 2006/2007 - BOLETÍN DE EJERCICIOS Víctor J. Díaz Madrigal y José Miguel Cañete Departamento de Lenguajes y Sistemas Informáticos 1. Cadenas La operación reversa aplicada
Más detallesAlgoritmo de la factorización LU
Algoritmo de la factorización LU. Objetivo. Estudiar el algoritmo de la factorización LU de una matriz cuadrada invertible.. Requisitos: Matrices elementales y su relación con operaciones elementales.
Más detallesLenguajes y Gramáticas
Lenguajes y Gramáticas Teoría de Lenguajes Fernando Naranjo Introduccion Se desarrollan lenguajes de programación basados en el principio de gramática formal. Se crean maquinas cada vez mas sofisticadas
Más detallesProyecto: El Problema de las 8 Torres
Universidad Simón Bolívar Departamento de Computación y Tecnología de la Información CI-2125 Computación I Sep-Dic 2003 Introducción: Proyecto: El Problema de las 8 Torres El problema de colocar 8 reinas
Más detallesLenguajes, Gramáticas y Autómatas Conceptos
Lenguajes, Gramáticas y Autómatas Conceptos Departamento de Informática e Ingeniería de Sistemas C.P.S. Universidad de Zaragoza Última revisión: Febrero. 2004 11/02/2004 1 Índice Alfabetos, palabras y
Más detallesIsabelle como un lenguaje funcional
Capítulo 1 Isabelle como un lenguaje funcional 1.1 Introducción Nota 1.1.1. Esta notas son una introducción a la demostración asistida utilizando el sistema Isabelle/HOL/Isar. La versión de Isabelle utilizada
Más detallesInformática Haskell Matemáticas Curso Pepe Gallardo Universidad de Málaga. Tema 8. Listas
Informática Haskell Matemáticas Curso 2004-2005 Pepe Gallardo Universidad de Málaga Tema 8. Listas 8.1 Secuencias aritméticas 8.2 Algunas funciones predefinidas 8.3 Listas por comprensión Ejemplo: QuickSort
Más detallesTema 6: Representación lógica del conocimiento
Inteligencia Artificial Curso 999 2000 Tema 6: Representación lógica del conocimiento José A. Alonso Jiménez Miguel A. Gutiérrez Naranjo Francisco J. Martín Mateos Dpto. de Ciencias de la Computación e
Más detallesApellidos: Nombre: 2º Grupo: _D _ Día: 22-XI-2011 CURSO
MATEMATICAS CC SS 1ª EVALUACIÓN Apellidos: Nombre: º Grupo: _D _ Día: -XI-011 CURSO 011-1 OPCIÓN A 0 3 (a) (1, puntos) Dadas las matrices M y N t 3 0, razone cuales de las siguientes operaciones tienen
Más detallesGeneración de Código Intermedio
Generación de Código Intermedio Programación II Margarita Álvarez Generación de código intermedio Con la generación de código intermedio se inicia la tarea de síntesis. Aunque un programa fuente se puede
Más detallesLENGUAJES Y GRAMÁTICAS
LENGUAJES Y GRAMÁTICAS Orlando Arboleda Molina Escuela de Ingeniería de Sistemas y Computación de La Universidad del Valle 20 de septiembre de 2008 Contenido Lenguajes y Gramáticas Gramáticas Gramáticas
Más detallesProgramación Declarativa UNIVERSIDAD DE MÁLAGA
Programación Declarativa UNIVERSIDAD DE MÁLAGA (3 o de Ingeniería Técnica en Informática) E.T.S.I. INFORMÁTICA Septiembre de 2006 mbre: Especialidad: Prolog Grupo: Ejercicio 1.1 (1 punto) Realizad el árbol
Más detallesRESUMEN DE ALGORITMOS PROBABILÍSTICOS
RESUMEN DE ALGORITMOS PROBABILÍSTICOS En los algoritmos probabilísticos hay ciertas decisiones que se toman al azar bajo condiciones estadísticamente estables como una distribución uniforme. Normalmente
Más detallesVectores en el plano UNIDAD I: MATRICES. Dirección de un vector. Sentido de un vector
UNIDAD I: MATRICES Vectores en el plano Un vector,, es un segmento con una dirección que va del punto A (origen) al punto B (etremo).un vector es un segmento orientado que va del punto A (origen) al punto
Más detallesFacultad de Química. Departamento de Química Analítica. Química Analítica Experimental I DIAGRAMA DE FLUJO. Joaquín Preza.
Universidad Nacional Autónoma de México Facultad de Química Departamento de Química Analítica Química Analítica Experimental I DIAGRAMA DE FLUJO Joaquín Preza Semestre 2010-1 Un diagrama de flujo es la
Más detallesTema II: Introducción al Lenguaje Funcional
Tema II: Introducción al Lenguaje Funcional Características de Haskell Lenguaje funcional de o. superior fuertemente tipificado. Clasifica los entes de un programa en: objetos (constantes y funciones)
Más detallesNúmeros naturales y recursividad
Números naturales y recursividad Rafael F. Isaacs G. * Fecha: 12 de abril de 2004 Números naturales Cuál es el primer conjunto de números que estudiamos desde la escuela primaria? Se sabe que los números
Más detallesTema 8: Funciones de orden superior
Tema 8: Funciones de orden superior Programación declarativa (2009 10) José A. Alonso Jiménez Grupo de Lógica Computacional Departamento de Ciencias de la Computación e I.A. Universidad de Sevilla Tema
Más detallesAlgoritmo de factorización LU
Algoritmo de factorización LU Objetivos. Estudiar el algoritmo de la factorización LU de una matriz cuadrada invertible. Requisitos. Matrices elementales y su relación con operaciones elementales, matriz
Más detallesTemas. Objetivo. Símbolo, alfabeto. Hileras y operaciones con hileras. Operaciones con lenguajes
0 1 Temas Símbolo, alfabeto Hileras y operaciones con hileras Operaciones con lenguajes Objetivo Que el estudiante logre conocer, comprender y manejar conceptos vinculados con la Teoría de Lenguajes Formales
Más detallesTema 8: Funciones de orden superior
Tema 8: Funciones de orden superior Programación declarativa (2010 11) José A. Alonso Jiménez Grupo de Lógica Computacional Departamento de Ciencias de la Computación e I.A. Universidad de Sevilla 2 /
Más detallesColegio San Agustín (Santander) Página 1
Colegio San Agustín (Santander Página OPERACIONES CON MATRICES Dadas las matrices A= ( B= ( C= ( a Calcula (A+B C t b Comprueba que (A+B C t = AC t +BC t a (A+B C t = ( ( = ( b AC t +BC t = ( ( + ( ( =
Más detallesRepartido 4. Profesor Fernando Díaz Matemática B 3ro EMT ISCAB 2016
Repartido 4 Profesor Fernando Díaz Matemática B 3ro EMT ISCAB 2016 VECTORES: MÓDULO, DIRECCIÓN Y SENTIDO Un vector es un segmento de recta orientado. Un vector se caracteriza por: 1) su módulo, que es
Más detallesEjemplo: El problema de la mochila. Algoritmos golosos. Algoritmos y Estructuras de Datos III. Segundo cuatrimestre 2013
Técnicas de diseño de algoritmos Algoritmos y Estructuras de Datos III Segundo cuatrimestre 2013 Técnicas de diseño de algoritmos Algoritmos golosos Backtracking (búsqueda con retroceso) Divide and conquer
Más detallesLos modelos abstractos de cómputo. Tema 1: Introducción. El modelo transductor. El modelo reconocedor. ordenador. datos. Modelo Abstracto de Cómputo
Tema 1: Introducción Preliminares Los Modelos Abstractos de Cómputo El principio de inducción Palabras y Lenguajes Palabras Operadores sobre palabras Predicados sobre palabras Lenguajes Operadores sobre
Más detallesPráctica N o 4 - Programación Lógica
Práctica N o 4 - Programación Lógica Para resolver esta práctica, recomendamos usar el SWI-Prolog, de distribución gratuita, que puede bajarse de http://www.swi-prolog.org. No utilizar cut (!) ni predicados
Más detallesSe dice que una matriz cuadrada A es invertible, si existe una matriz B con la propiedad de que
MATRICES INVERTIBLES Se dice que una matriz cuadrada A es invertible, si existe una matriz B con la propiedad de que AB = BA = I siendo I la matriz identidad. Denominamos a la matriz B la inversa de A
Más detallesIntroducción a la Teoría de Códigos
Introducción a la Teoría de Códigos M.A. García, L. Martínez, T. Ramírez Facultad de Ciencia y Tecnología. UPV/EHU Ejercicios y Problemas resueltos Tema 3: CÓDIGOS LINEALES Mayo de 2017 Ejercicios Resueltos:
Más detallesControl en Prolog. Control
Control sobre La búsqueda El retroceso La unificación Aplicaciones. Control en Prolog Recorrido sobre grafos Sin repetir nodo Sin repetir arco Control La búsqueda mediante un predicado sin argumentos!
Más detallesEstrategias de pivoteo
Estrategias de pivoteo Objetivos. Resolver sistemas de ecuaciones lineales aplicando varias técnicas de pivoteo; programar estos algoritmos. Requisitos. Operaciones elementales, experiencia de resolver
Más detallesEspacios vectoriales
CAPíTULO 2 Espacios vectoriales 1. Definición de espacio vectorial Es frecuente representar ciertas magnitudes físicas (velocidad, fuerza,...) mediante segmentos orientados o vectores. Dados dos de tales
Más detallesEstructura de datos y algoritmos. Tema V TDA DINÁMICOS NO LINEALES: Árboles: árboles binarios
Estructura de datos y algoritmos Tema V TDA DINÁMICOS NO LINEALES: Árboles: árboles binarios TEMA V : TIPOS DE DATOS ABSTRACTOS NO LINEALES: ÁRBOLES 5.1 Conceptos y definiciones 5.2 Árboles perfectamente
Más detallesMáquinas de estado finito y expresiones regulares
Capítulo 3 Máquinas de estado finito y expresiones regulares En este tema definiremos y estudiaremos máquinas de estado finito, llamadas también máquinas de estado finito secuenciales o autómatas finitos.
Más detallesPráctica N o 5 - Programación Lógica
Práctica N o 5 - Programación Lógica Para resolver esta práctica, recomendamos usar el SWI-Prolog, de distribución gratuita, que puede bajarse de http://www.swi-prolog.org. No utilizar cut (!) ni predicados
Más detallesProcedimiento para encontrar la inversa de una matriz cuadrada (Método de Gauss-Jordan).
Ejemplo 19: Demuestre que la matriz A es invertible y escríbala como un producto de matrices elementales. Solución: Para resolver el problema, se reduce A a I y se registran las operaciones elementales
Más detallesÁlgebra y Matemática Discreta
Álgebra y Matemática Discreta Sesión de Teoría 1 (c) 2013 Leandro Marín, Francisco J. Vera, Gema M. Díaz 16 Sep 2013-22 Sep 2013 Los Números Enteros El Conjunto Z Vamos a empezar por la aritmética más
Más detalles2.1 Generación y manejo de vectores y matrices.
2.1 Generación y manejo de vectores y matrices. Generación de vectores de forma directa En el lenguaje M se va a trabajar habitualmente con los corchetes ([ ]) para la generación de vectores y matrices.
Más detallesEstructuras de Datos y Algoritmos Tema 3: Arrays y listas enlazadas
Estructuras de Datos y Algoritmos Tema 3: Arrays y listas enlazadas Departamento de Informática Universidad de Valladolid Curso 2011-12 Grado en Ingeniería Informática Grado en Ingeniería Informática de
Más detallesSi u y v son vectores cualquiera en W, entonces u + v esta en W. Si c es cualquier numero real y u es cualquier vector en W, entonces cu esta en W.
Unidad 4 Espacios vectoriales reales 4.1 Subespacios Si V es un espacio vectorial y W un subconjunto no vacío de V. Entonces W es un subespacio de V si se cumplen las siguientes condiciones Si u y v son
Más detallesMatrices 2º curso de Bachillerato Ciencias y tecnología
MATRICES Índice:. Introducción-------------------------------------------------------------------------------------- 2. Definición de matriz-----------------------------------------------------------------------------
Más detallesUn elemento de un monoide se dice que es inversible si tiene elemento inverso.
Tema 1: Semigrupos 1 Tema 1: Semigrupos 1. Semigrupos: Conceptos fundamentales. Recordemos que un sistema algebraico es un conjunto S con una o varias operaciones sobre él, siendo una operación ó ley de
Más detallesGUÍA DE EJERCICIOS: MATEMÁTICAS
GUÍA DE EJERCICIOS: MATEMÁTICAS Matrices Esta guía de estudio está diseñada con ejercicios resueltos paso a paso con el fin de mostrar los procedimientos detallados para abordar cada uno de ellos. Las
Más detallesLas matrices se denotarán usualmente por letras mayúsculas, A, B,..., y los elementos de las mismas por minúsculas, a, b,...
INTRO. MATRICES Y DETERMINANTES Prof. Gustavo Sosa Las matrices se utilizan en el cálculo numérico, en la resolución de sistemas de ecuaciones lineales, de las ecuaciones diferenciales y de las derivadas
Más detalles