Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - nosferacento

Páginas: 1 ... 3 4 5 6 7 [8] 9 10 11 12 13 ... 23
141
PREGUNTA: ¿Cuál de las siguientes máquinas tienen mayor capacidad de representación?:


a) Las máquinas de Turing no deterministas.

b) Las máquinas de Turing deterministas.

c) Las máquinas de Turing de múltiples cintas.

d) Todas las anteriores máquinas tienen la misma capacidad de representación.




RESPUESTA: la opción correcta es la d).

Pregunta sencilla de responder si se ha estudiado lo suficiente. Recordar: todas las máquinas de Turing (de un tipo u otro) tienen la misma capacidad de representación (aunque el coste de computación puede diferir, pero la capacidad de reconocimiento es la misma).

142
PREGUNTA: Dado el siguiente autómata podemos afirmar:



a) El conjunto de letras que forman las palabras reconocidas por el autómata es {x}.

b) El conjunto de letras que forman las palabras reconocidas por el autómata es {x, y}.

c) El conjunto de letras que forman las palabras reconocidas por el autómata es {x, y, c}.

d) El conjunto de letras que forman las palabras reconocidas por el autómata es {x, y, c, d}.





RESPUESTA: La opción correcta es la b).

Se trata de un autómata a pila que en primer lugar pone el símbolo # como fondo de pila y luego introduce el símbolo S en la pila.

Este autómata parece representar una gramática que vamos a escribir a partir de las reglas del autómata:

S -- > A
S -- > B
A -- > xAy
B -- > xxBy
A -- > xy
B -- > xxy
B -- > cCd
A -- > cCd
C -- > cCd

Para que un no terminal pueda intervenir en el lenguaje son necesarias dos condiciones:

a)   Que sea alcanzable
b)   Que permita derivar en algún momento a símbolos terminales o a la cadena vacía λ

Analicemos lo que ocurre con cada no terminal:

S: permite derivar a A y B

A: tiene una regla recursiva pero también una regla finalista que deriva a los terminales xy

B: tiene una regla recursiva xxBy, y otra regla que deriva a cCd. También una regla finalista que permite derivar a los terminales xxy

C: sólo deriva a una regla recursiva donde interviene el mismo símbolo C. Por tanto este símbolo no puede utilizarse para generar palabras del lenguaje, porque si se introdujera alguna producción donde intervenga C luego no habría forma de eliminar C derivando a símbolos terminales.

Debido a lo anterior, únicamente podemos construir palabras utilizando A y B, y estas palabras únicamente pueden incluir los símbolos {x, y}. Por tanto respondemos la opción b).

Si no analizamos la gramática con cuidado podemos pensar que la solución es {x, y , c, d} pero no sólo hay que considerar si un no terminal es alcanzable, sino también si permite finalizar las recursiones para construir cadenas válidas. ¡Hay que fijarse!



143
De todo un poco... / lenguaje reconocido por máquinas de Turing
« en: 26 de Febrero 2014, 12:35 »
PREGUNTA: Dado el lenguaje L = {xnyn : n > 0}. Podemos afirmar que:

a) Las dos máquinas de Turing de las opciones c y d reconocen el lenguaje L.

b) Ninguna de las máquinas de Turing de las opciones c ó d reconoce el lenguaje L.




RESPUESTA: respondemos la opción a), pero ver comentarios.

Se nos plantea un “pequeño problema” que consiste en que habitualmente el símbolo λ no se usa en las máquinas de Turing mientras que aquí sí aparece. ¿Lo consideramos como que representa el “blanco” de la máquina de Turing o como un símbolo distinto? Esto debería aclararlo el enunciado pero no lo hace.

En principio optaríamos por considerar que representa el blanco, ya que escribir en una casilla la cadena vacía sería dejar la casilla en blanco (esto normalmente se representa con una B, pero en este caso consideraremos que λ equivale al símbolo B).

Supongamos ahora que λ representa lo mismo que B.

Miramos a la máquina de la opción c) y nos preguntamos si acepta xxyy

q0xxyy ├ aq1xyy├ axq1yy ├ axyq1y ├ axyyq1 ├ si suponemos que  λ es blanco pasamos a q2 moviéndonos a izquierda ├ axyq2y ├ axq3y ├ aq3xy ├ q3axy ├  q0λxy ├ FλSxy y aceptación. Sí acepta.

¿Acepta xy?

q0xy ├ aq1y ├ ayq1λ ├ aq2y ├ q3a ├ q0 λx ├ FλSx y aceptación. Sí acepta.   

Esta máquina parece reconocer cualquier cadena formada por al menos una x y una y, por tanto reconocería el lenguaje L (y más cadenas).

Miramos a la máquina de la opción d). Si reconoce el mismo lenguaje L debería reconocer xxyy.

qoxxyy ├ λq0xyy ├  λλqoyy ├ λλλq1y ├ λλλλq1B ├ si suponemos que λ representa B la máquina pasa al estado de aceptación F.   

¿Reconoce xyy?

q0xyy ├ q0yy ├ q1y ├ q1λ ├ λF λ y aceptación. Esta cadena no pertenece a L.

Sí la reconoce, esta máquina parece reconocer cualquier cadena del tipo xx*yy*, es decir, cualquier cadena con al menos una x y al menos una y. El lenguaje L es un subconjunto de este lenguaje, por tanto la máquina de la opción d) reconoce el lenguaje L.

Todo apunta a que ambas máquinas reconocen un lenguaje (más amplio que L) que incluye al lenguaje L, por lo que respondemos la opción a). Podríamos pensar que estas máquinas no reconocen exactamente el lenguaje L, pero la pregunta es simplemente si reconocen L, no si reconocen exactamente sólo el lenguaje L (esto es una interpretación que estamos haciendo nosotros).

Pregunta que nos ha resultado difícil de responder, en parte porque el enunciado puede considerarse un tanto ambiguo y en parte porque las máquinas de Turing un poco complejas pueden resultar difíciles de interpretar. Recomendamos comentar este tipo de preguntas en el examen para indicar el razonamiento y consideraciones que se han tomado para responder.


144
PREGUNTA: Dada la siguiente máquina podemos afirmar:


a) Es una máquina de Turing mal definida ya que no se indica el movimiento a realizar.

b) Es un autómata finito determinista.

c) Es un autómata a pila determinista.

d) Es un autómata a pila no determinista.




RESPUESTA: la opción correcta es la d).

La máquina representada es un autómata a pila donde la notación x, y; h indica que se lee el símbolo x de la cadena de entrada estando el símbolo y en la cima de pila, se pone el símbolo h en cima de pila y se realiza la transición que corresponda.

Se trata de un autómata a pila no determinista porque para un mismo símbolo de entrada y símbolo en cima de pila define dos transiciones distintas posibles (por ejemplo se permite una transición que sin leer ningún símbolo de entrada y teniendo S en la cima de pila ponga bien A en la pila o bien B).

Este autómata tiene la forma usual de autómata construido a partir de una gramática (aunque aquí no nos preguntan nada relacionado con esto).

145
De todo un poco... / expresión regular y lenguaje definido
« en: 24 de Febrero 2014, 09:47 »
PREGUNTA: Sea la expresión regular ((abc)* + (acb)* + (bac)* + (bca)* + (cab)* + (cba)*)*

a) Todas las cadenas del lenguaje tienen un número impar de letras.

b) El lenguaje está formado por todas las posibles cadenas que tengan el mismo número de a's, b's y c's.

c) El lenguaje está formado por cadenas que tengan el mismo número de a's, b's y c's que empiecen por la subcadena "abc" y terminen con la subcadena "cba".

d) Ninguna de las anteriores.





RESPUESTA: La opción correcta es la d)

El lenguaje definido por la expresión regular admite la cadena vacía, por tanto no es cierto que todas las cadenas del lenguaje tengan un número impar de letras y descartamos la opción a).

El lenguaje no admite aabbcc por lo que es falso que esté formado por todas las posibles cadenas que tengan el mismo número de as, bs y cs. Descartamos entonces la opción b).

El signo + equivale a opcionalidad (equivale al OR lógico) por lo que las cadenas pueden empezar con abc, acb, bac, bca, cab ó cba y terminar con cualquiera de ellas también por lo que descartamos la opción c).

Por tanto respondemos la opción d), ninguna de las anteriores.

146
De todo un poco... / lenguaje definido por una expresión regular
« en: 20 de Febrero 2014, 09:41 »
PREGUNTA: Dada la expresión regular ((a + b + acb + ba)* + (a* + bc*))* c (( ac* + b*) + (a + bc)*)* . Podemos asegurar que el lenguaje que define es:

a) Un lenguaje regular.

b) Un lenguaje independiente del contexto determinista, no regular.

c) Un lenguaje independiente del contexto no determinista, no regular.

d) Un lenguaje recursivamente enunmerable, no independiente del contexto.





RESPUESTA: la opción correcta es la a).

Si el lenguaje está definido por una expresión regular bien formada, se trata de un lenguaje regular. Además será independiente del contexto y recursivamente enumerable, ya que estos son superconjuntos de los lenguajes regulares.

147
De todo un poco... / reconocer palabra sin llegar a aceptación
« en: 18 de Febrero 2014, 00:39 »
PREGUNTA: ¿Un autómata finito puede reconocer una palabra sin llegar al estado de aceptación?

a) Si.
b) No.




RESPUESTA: la opción correcta es la b).

Un autómata finito reconoce una palabra cuando se cumplen dos condiciones:

a)   Haber llegado a un estado de aceptación.
b)   Haber consumido todos los caracteres de la palabra de entrada.

Sin llegar a aceptación no puede haber reconocimiento de una palabra.

148
De todo un poco... / aceptación en un autómata finito
« en: 13 de Febrero 2014, 08:40 »
PREGUNTA: ¿Un autómata finito puede reconocer una palabra con solo llegar al estado de aceptación?

a) Si.
b) No.



RESPUESTA: la opción correcta es la b).

Un autómata finito reconoce una palabra cuando se cumplen dos condiciones:

a)   Haber llegado a un estado de aceptación
b)   Haber consumido todos los caracteres de la palabra de entrada

Llegar a un estado de aceptación sin haber consumido todos los caracteres de entrada no implica el reconocimiento de la palabra.

Pregunta que parece simple pero no lo es tanto como parece.


149
Gracias a todos los que hacéis llegar comentarios y sugerencias, así al menos puedo saber que todo esto está sirviendo para algo  ;)

150
Con las últimas diez preguntas hemos completado un examen, que normalmente consta de diez preguntas tipo test. Es conveniente que se trate de resolver el examen haciendo una simulación de examen real, controlando el tiempo empleado y todas las preguntas a la vez sin consultar ningún tipo de documentación, y luego comprobar cómo nos hubiera ido en ese caso supuesto "real" y qué nota habríamos sacado. Para quien quiera intentarlo, dejo el examen con enunciados completos en el archivo adjunto a este post (archivo jun12_1a_sem_A.pdf, pulsar sobre el nombre o icono para descargarlo estando logeado). Y continuamos...


151
De todo un poco... / Lenguaje recursivamente enumerable no regular
« en: 07 de Febrero 2014, 08:29 »
PREGUNTA: Dado el lenguaje L definido por la gramática:

S -- > xS
S -- > Sy
S -- > xy

y la siguiente máquina de Turing que reconoce el lenguaje L:


Podemos asegurar que el lenguaje es recursivamente enumerable no regular

a) Verdadero.
b) Falso.




RESPUESTA: la opción correcta es la b).

Analicemos qué cadenas pertenecen al lenguaje: S -- > xS permite generar cadenas que empiezan por una x y tienen cualquier número de x´s, terminando en una xy debido a la producción que permite finalizar S -- > xy. Por ejemplo xxy, xxxy, xxxxy, etc. Expresado como expresión regular x*(xy)

S -- > Sy permite generar cadenas que empiezan con una xy, y tienen a continuación cualquier número de y´s. Expresado como expresión regular (xy)y*

Si comenzamos con S -- > xS y sustituimos S por Sy, xSy, resulta que podemos insertar tantas x´s como queramos y tantas y´s como queramos, siempre las x´s primero y las y´s después. Expresado como expresión regular x x* y* y

Las expresiones x*(xy) y (xy)y* son subconjuntos de la expresión que representa el lenguaje que es x x* y* y, que además podemos ver representada en la máquina de turing, que puede transformarse fácilmente en un autómata finito determinista.

Si lo podemos expresar como expresión regular o con un autómata finito, es que el lenguaje es regular. Por tanto respondemos la opción b), es falso que sea no regular.



152
De todo un poco... / máquina más simple que reconoce un lenguaje
« en: 06 de Febrero 2014, 09:50 »
PREGUNTA: Sea el lenguaje L = {xnymzn : con n y m > 0, y m = n/2}. ¿Cuál es la máquina más simple que puede reconocer este lenguaje?

a) Un autómata finito.
b) Un autómata a pila determinista.
c) Un autómata a pila no determinista.
d) Una máquina de Turing.




RESPUESTA: la opción correcta es la d).

El enunciado no deja claro qué ocurre si n no es par, en ese caso m no sería un valor entero lo cual no tendría sentido, por lo que vamos a suponer que se exige que n sea par (0, 2, 4, 6, 8, …). Si n es 0 m es 0, lo que significa que se admite la cadena vacía.

Cadenas admitidas serían: ε, xxyzz, xxxxyyzzzz, xxxxxxyyyxxxxxx, etc.

Para verificar que el número de y´s es la mitad que el número de x necesitamos contar, con lo cual podemos descartar que se trate de un lenguaje regular y descartamos la opción a.

Con una pila podríamos apilar un símbolo por cada dos x´s leídas, y posteriormente desapilar un símbolo por cada y leída, pero después no tenemos capacidad para recordar la cantidad de x´s aparecidas, cosa que sí podemos hacer con una máquina de Turing.

Nota: hay preguntas muy similares que tienen una respuesta distinta, así que no recomendamos “memorizar” sino “tratar de razonar”.





153
PREGUNTA: Sea el lenguaje L = {xnym : n + m es un numero par}. ¿Cuál de las siguientes afirmaciones es verdadera?


a) El lenguaje L es un Lenguaje Regular.

b) El lenguaje L es un Lenguaje Independiente del Contexto no Regular.





RESPUESTA: La opción correcta es la a)

Si el lenguaje es regular podremos representarlo con una expresión regular, una gramática regular ó un autómata finito (determinista o no determinista).

En primer lugar tenemos que reflexionar sobre la definición del lenguaje. Nos dice m+n es un número par. Número par es todo número múltiplo de 2. ¿Es el cero un número par? Esto nos puede generar algo de duda, pero efectivamente el cero es un número par porque son pares todos los enteros multiplicados por 2, así son pares -8, -6, -4, -2, 0, 2, 4, 6, 8 … En este caso los números negativos no tienen sentido y el cero todavía no lo sabemos, pero sí sabemos que es par.

Veamos cadenas que genera el lenguaje:

a)   Fijamos las x y vemos las posibles y´s teniendo en cuenta que son pares 0+0, 1+1, 1+3, 1+5… , 2+0, 2+2, 2+4, 2+6 …, 3+1, 3+3, 3+5, … , 4+0, 4+2, 4+4, 4+6…,   :  cadenas ε, xx, xyyy, xyyyyy, xx, xxyy, xxyyyy, xxyyyyyy, xxxy, xxxyyy, xxxyyyyy, etc.

b)   Fijamos las y´s y vemos las posibles x`s: 0+0, 1+1, 2+2, 4+2, 6+2, 8+2 …, 1+3, 3+3, 5+3, 7+3, …, 2+4, 4+4, 6+4, 8+4, … , : cadenas ε, xx, xxyy, xxxxyy, xxxxxxyy, xyyy, xxxyyy, xxxxxyyy, xxxxxxxyyy, etc.

No descartamos que sea regular porque no vemos la necesidad de contar, sino de un autómata capaz de generar bucles de cierta manera.

El patrón observable es:

Si la x es impar, entonces el número de y´s admisible es 1, 3, 5, 7, 9 … , es decir, si x es impar y ha de ser impar

Si la x es par entonces el número de y´s admisible es 2, 4, 6, 8…, es decir, si x es par y ha de ser par

Si la y es impar, entonces el número de x´s admisible es 1, 3, 5, 7, 9 …

Si la y es par, entonces el número de x´s admisible es 2, 4, 6, 8

En resumen, si número de x´s es par número de y´s también ha de serlo, y si número de x´s es impar número de y´s también ha de serlo.

Vamos a tratar de generar una gramática regular que reconozca el lenguaje:

S -- > ε | xAyB
A -- > ε | xxA
B -- > ε | yyB


Genera: ε y cadenas con x´s impares e e impares, lo que da lugar a que la suma de x´s e y´s sea par.

Pero ojo: la gramática anterior no es regular desde el punto de vista formal.

Ahora tratemos de ampliar a la posibilidad de x´s pares e y´s pares.
 
S -- > ε | xAyB | AB
A -- > ε | xxA
B -- > ε | yyB


Esta gramática parece generar el lenguaje. Ahora nos preguntamos ¿es regular el lenguaje?

Sabemos transformar gramáticas regulares en autómatas finitos, pero como esta gramática no es regular no podemos aplicar el “método conocido” y vamos a tratar de hacerlo intuitivamente.


Nota: formalmente deberíamos tener estados intermedios en cadenas como xx ó yy, pero como lo único que nos interesaba era ver si era un lenguaje regular hemos abreviado no representando las transiciones carácter a carácter.

Este autómata finito determinista representa el lenguaje, que por tanto consideramos que es regular.

Ahora vamos a intentar expresar el lenguaje como expresión regular:

L = (ε | x(xx)*y(yy*) | (xx)*(yy)* )

Esta expresión parece generar el lenguaje, por tanto todo indica que es regular.

¿Es necesario todo este desarrollo para responder esta pregunta? No, basta con de alguna manera llegar a la conclusión correcta de que el lenguaje es regular. Si a ti se te ha ocurrido directamente la expresión regular que representa el lenguaje, por ejemplo, y has tardado un minuto, genial. Nosotros hemos tardado bastante más tiempo…  ???



154
PREGUNTA: Sea L1 el lenguaje generado por la gramática con símbolo inicial S. (Nota:La producción cb -- > bc  indica que cada vez que aparezca la subcadena cb se transforma en la subcadena bc).

S -- > AB
A -- > aAc
A -- > ac
B -- > bB
B -- > b
cb -- > bc


y el lenguaje L2 = {anbncn : con n > 0}. Podemos afirmar que:

a) L1 = L2

b) L1 ⊂ L2

c) L2 ⊂ L1

d) L1 ≠ L2   




RESPUESTA: la opción correcta es la c).

El lenguaje L2 sabemos que no es un lenguaje regular porque requiere tener capacidad para contar el número de veces que aparece cada símbolo (incluso podemos decir que no es un lenguaje independiente el contexto porque no nos va a bastar una pila para poder recordar cuántas a´s y cuántas b´s han aparecido y poder comparar esto con el número de c´s).

L2 acepta abc, aabbcc, aaabbbccc, etc.

Comencemos analizando qué lenguaje genera la gramática. La gramática no es regular (formalmente porque no cumple las condiciones), pero quizás genere un lenguaje regular, vamos a estudiarlo.

La rama de la A nos da lugar a cadenas tipo ancn, es decir, cadenas con el mismo número (balanceado) de a´s y c´s.

La rama de la B nos da lugar a cadenas tipo b+ ó bb*, es decir, una o más b´s.

La concatenación AB nos genera cadenas ancn bb*. La unión entre ambas ramas es cb que se transforma en bc según nos indican

Por tanto acb se transforma en abc
aaccb se transforma en aacbc; aaccbb se transforma en aacbcb

aaccbbbbbbb se transforma en aacbcbbbbbb   

La gramática genera cadenas con el mismo número de c´s que de a´s, y con una o muchas b´s.

La opción a) la descartamos: no son lenguajes iguales.

La opción b: ¿es L1 un subconjunto de L2? No, aacbcbbbbbb pertenece a L1 pero no a L2, por tanto L1 no puede ser subconjunto de L2.

La opción c: ¿es L2 subconjunto de L1? Es decir, las cadenas de L2 ¿serán siempre cadenas de L1?. Sí porque tienen igual número de a´s que de c´s y una o muchas b´s. Por tanto responderemos la opción c).

La opción d) también puede considerarse válida puesto que son lenguajes distintos, aunque es “menos exacta” que la opción c). De cualquier manera, recomendamos comentar esta circunstancia en el examen.



155
PREGUNTA: La siguiente gramática con símbolo inicial S:

S -- > AB
A -- > Aa
A -- > a
B -- > Bb
B -- > b

a) Es una gramática regular.
b) Es una gramática independiente del contexto.
c) Ninguna de las anteriores.




RESPUESTA: la opción correcta es la b) (esta pregunta tiene “truco”, ver la explicación).

Trataremos de analizar qué cadenas genera la gramática. No hay derivaciones a la cadena vacía, por tanto la cadena vacía no forma parte del lenguaje. A puede derivar a una cadena con un mínimo de una a y un máximo de infinitas a´s. B puede derivar a una cadena con un mínimo de una b y un máximo de infinitas b´s. El símbolo inicial puede derivar a como mínimo ab, y a cualquier cadena con cualquier número de a´s antecediendo a cualquier número de b´s. Esto equivale a la expresión regular aa*bb*. ¿Siempre que una gramática representa un lenguaje regular es una gramática regular? Intuitivamente quizás respondamos que sí, pero lo cierto es que no, ahí está el truco o sutileza de esta pregunta.

Por ello nos tenemos que remitir a la definición de gramática regular. Una gramática es regular si cumple estos requisitos:

a)   En el lado izquierdo de las reglas de producción solo aparece un símbolo
b)   El lado derecho de las normas sólo puede contener dos cosas: un símbolo terminal (se acepta también la cadena vacía) ó un símbolo terminal seguido de un símbolo no terminal.

Por tanto no se aceptan reglas como A -- > Aa porque el símbolo no terminal no puede aparecer como primer símbolo en el lado derecho.

Tampoco se aceptan reglas como A -- > AB porque tiene dos símbolos no terminales seguidos en el lado derecho de la regla, por tanto la gramática propuesta no es regular.

Dado que los lenguajes regulares son un subconjunto de los lenguajes independientes del contexto y dado que las gramáticas independientes del contexto aceptan que en el lado derecho haya cualquier sucesión de símbolos (terminales o no terminales) concluimos que la gramática es una gramática independiente del contexto que genera un lenguaje regular.

Pregunta que parecía sencilla pero que ha resultado bastante más complicada de responder de lo que aparentaba.


156
PREGUNTA: Sea L2 = {xnynzn | n > 0}. Y sea L1 el lenguaje reconocido por la siguiente máquina de Turing.


¿Cuál de las siguientes afirmaciones es correcta?


a) L1 = L2

b) L1 ≠ L2   

c) L1 ⊂ L2

d) L2 ⊂ L1




RESPUESTA: hay dos opciones que podrían considerarse correctas, la b y la d. Nosotros nos decantamos por responder la d) (ver el razonamiento seguido a continuación)

Nota: fijarse que el símbolo B o blanco de la máquina de Turing aquí lo representan con un espacio vacío. Es decir, la transición de q1 a q2 es B;B, -->, etc. En otras ocasiones también se representa con un cuadradito vacío.

Tratemos de ver qué es lo que hace la máquina de Turing propuesta. Vemos que en la transición de q0 a q1 requiere una x, en la transición de q2 a q3 requiere una y, y en la transición de q4 a q5 requiere una z.

Nos preguntamos ¿admite la MT la cadena zyx? Para esta cadena tenemos estas transiciones: q0zyx ├ zq0yz ├ zyq0x ├ zq1yx ├ q1zyx ├ q1Bzyx ├ q2zyx ├ zq2yx ├ q3zyx ├ q3Bzyx ├ q4zyx ├ q5Bzyx

Efectivamente la máquina admite esta cadena. La máquina parece admitir cualquier cadena que contenga al menos una x, una y y una z sin requerir un orden específico.

Si tratamos de ver lo que hace, en primer lugar se mueve a derechas hasta encontrar una x. Luego vuelve al principio de la cadena, hasta encontrar el blanco inicial. Luego se mueve a derechas hasta encontrar una y, y seguidamente vuelve al principio de la cadena, hasta encontrar el blanco inicial. Luego se mueve a derechas hasta encontrar una z y acepta.

Hemos visto que admite zyx y esta cadena no pertenece al lenguaje L2, por tanto descartamos tanto la opción de que L1 = L2 como la opción de que L1 sea un subconjunto de L2.

La opción b podemos decir que es verdadera, pero nos preguntamos si la opción d es también verdadera.

L1 reconoce cualquier cadena que contenga al menos una x, una y una z, por tanto reconoce todas las cadenas en el lenguaje L2 que han de tener obligatoriamente una x, una y y una z. Por tanto es cierto que L2 es subconjunto de L1.

Respondemos la opción d) porque es la que mejor describe la situación, aunque dado que la opción b) puede considerarse cierta y por tanto generar dudas, recomendamos escribir un comentario al respecto en el examen, en una hoja aparte.

157
PREGUNTA: ¿Existe algún lenguaje independiente del contexto no regular compuesto por un número finito de palabras?

a) Sí.
b) No.



RESPUESTA: la opción correcta es la b)

Si el lenguaje estuviera compuesto por un número finito de palabras sería representable por un autómata finito y por tanto sería un lenguaje regular. Para ser un LIC no regular debe admitir infinitas palabras, por tanto respondemos la opción b).

Adicionalmente indicaremos que: todo lenguaje con un número finito de palabras es regular. Es cierto que con muchas palabras quizás nos salieran autómatas finitos gigantescos, pero seguiría siendo un lenguaje regular.


158
PREGUNTA: Dado el lenguaje L1 reconocido por el autómata


y el lenguaje L2 definido por la gramática

S -- > xSy
S -- > λ

Podemos afirmar:

a) L1 = L2

b) L1 ≠ L2   

c) L1 ⊂ L2

d) L2 ⊂ L1




RESPUESTA: la opción correcta es la b)

Hay que tener en cuenta que la gramática, lenguaje L2, obliga a que por cada x se añada una y, es decir, obliga a que el número de x y el número de y sean iguales. En cambio el lenguaje L1 permite que venga cualquier número de x y cualquier número de ys sin necesidad de que sean iguales. El lenguaje L1 está representado por un autómata finito determinista, por tanto es un lenguaje regular.

El lenguaje L2 será L2 = {xnyn | n >= 0}. Este lenguaje requiere contar el número de x para verificar que el número de y´s sean iguales. Los autómatas finitos no tienen capacidad para contar. Por tanto este lenguaje necesita de un autómata a pila para apilar con las x y desapilar con las y´s y se trata de un LIC.

Vemos que el lenguaje L2 se diferencia además de L1 en que L1 no acepta la cadena vacía y L2 sí acepta la cadena vacía.

Por tanto la opción a) es falsa: no son lenguajes iguales.

La opción b) significa que los lenguajes son distintos, lo cual es cierto pero vamos a repasar las otras opciones.

La opción c) significaría que todas las cadenas de L1 pertenecen a L2. ¿Es cierto? No, porque en L1 estaría por ejemplo xxxy que no está en L2 por no coincidir el número de x con el número de ys.

La opción d) significaría que todas las cadenas de L2 estarían en L1, lo cual no es cierto porque la cadena vacía no está en L1.

Respondemos la opción b), son lenguajes distintos. No es difícil de ver pero requiere razonar meticulosamente y sin perder de vista detalles como la aceptación o no de la cadena vacía.



159
PREGUNTA: El lema del bombeo aplicado a los autómatas a pila demuestra que el lenguaje L = {xnynzn : n > 0} no puede ser reconocido por ninguna máquina.

a) Verdadero.
b) Falso.




RESPUESTA: la opción correcta es la b).

Falso. Este lenguaje puede ser reconocido por una máquina de Turing. El lema de bombeo aplicado a los autómatas a pila demuestra que un lenguaje no es un LIC, y por tanto no puede ser reconocido por un autómata a pila, pero no demuestra que un lenguaje no pueda ser reconocido por ninguna máquina.



160
PREGUNTA:  ¿Qué ocurrirá al compilar y ejecutar el siguiente código?

class Padre {}
class ClaseHija extends Padre {}
class ClaseHija2 extends Padre {}
public class Test{
public static void main(String argv[]) {
Padre b=new Padre ();
ClaseHija s=(ClaseHija) b;
System.out.print("Ejecutando Aplicación");
}
}


a. Compilará y se ejecutará sin problemas
b. Error de Compilación
c. Excepción en tiempo de ejecución
d. Excepción en tiempo de ejecución y luego mostrará el mensaje "Ejecutando Aplicación"


RESPUESTA: la opción correcta es la c)

Estas preguntas no son fáciles de responder (lo serían si tuviéramos un ordenador delante). Tratamos de analizar lo que hará el código.

Se declara una clase Padre, vacía. Se declara dos clases que herendan de Padre, ClaseHija y ClaseHija2. Estas clases se declaran sin modificador de acceso: esto es legal (se aplica un tratamiento por defecto previsto por Java). A continuación se declara la clase pública Test que contiene el método main.

Nos puede llamar la atención public static void main(String argv[]) ya que no se suele usar argv sino args, pero esto es igualmente legal, es el nombre de un parámetro para el método. Se declara un objeto de la clase Padre al que se denomina b. Se crea un objeto de la clase hija que es el objeto de la clase Padre convertido en hija (casting de padre a hija). ç

Aquí nos tenemos que plantear: ¿es legal convertir un objeto de un nivel jerárquico superior a un objeto de nivel jerárquico inferior? La respuesta es que esto sólo es posible si el objeto de nivel superior contiene un objeto del tipo del nivel inferior. Es decir, en este caso si el objeto b contuviera un objeto del tipo ClaseHija. Si no lo contiene, como es este caso, salta un error del tipo java.lang.ClassCastException en tiempo de ejecución. java.lang.ClassCastException: Padre cannot be cast to ClaseHija

En resumen, si hiciéramos ClaseHija s= b; obtendríamos un error en tiempo de compilación

Si hacemos ClaseHija s=(ClaseHija) b; la compilación es correcta pero salta un error ClassCastException en tiempo de ejecución.

Si hiciéramos Padre b=new ClaseHija (); el programa se ejecutaría sin error, ya que la clase padre contiene un objeto de la clase hija (legal, en eso consiste el polimorfismo).

Pregunta nada sencilla de responder en un examen   :(

Páginas: 1 ... 3 4 5 6 7 [8] 9 10 11 12 13 ... 23

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".