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 ... 4 5 6 7 8 [9] 10 11 12 13 14 ... 23
161
PREGUNTA:  Dada la siguiente gramática regular no determinista, donde A es su símbolo inicial:

A -- > xA
A -- > yA
A -- > xB
B -- > xA
B -- > yA
B -- > xB
B -- > xC
C -- > yD
C -- > xB
D -- > λ
D -- > xB
D -- > yA

Podemos construir un autómata finito determinista con solo 2 estados que reconozca el mismo lenguaje.

a) Verdadero.
b) Falso.



RESPUESTA:

Tenemos que prestar atención al enunciado:

a)   Nos dice que es una gramática regular no determinista con símbolo inicial A
b)   Nos pregunta si podemos construir un autómata finito determinista que reconozca el mismo lenguaje

Por tanto no nos pide ni siquiera transformar la gramática en un autómata, sino ver si podemos construir un autómata que reconozca el mismo lenguaje.

Lo primero que haremos será reflexionar sobre el lenguaje y las cadenas que genera el lenguaje.

Si transformamos la gramática en autómata finito no determinista obtenemos esto:


Este autómata finito es indeterminista, pero sabemos que un AFN se puede transformar en un AFD. Ahora trataremos de encontrar algunas de las cadenas aceptadas por el autómata:

xxy: es la cadena más corta que acepta, podríamos representarla con un AFD de dos estados, uno inicial que acepta indefinidamente x y otro final al que se llega con una y. Sin embargo, aparte de ser la cadena más corta que acepta es la secuencia final obligatoria para llegar a aceptación y se permiten expresiones del tipo x(intercarlar x´s e y´s)xxy. Si usamos un estado inicial que acepta indefinidamente x´s e y´s que nos lleve a aceptación con una y, no podemos asegurar que el final será xxy. Para asegurar este final, con un AFD necesitaremos más de dos estados.

Respondemos entonces b) Falso.

Otro razonamiento: cuando se pasa de AFD a AFN se definen nuevos estados a partir del conjunto potencia de los estados del AFN. En el paso de AFD a AFN nos podemos encontrar:

a)   Caso peor: se generan 2n estados en el AFD
b)   Caso mejor: se mantienen los n estados del AFN

Por tanto el AFD no tendrá menos de 4 estados y respondemos la opción b) Falso.

Aunque con lo dicho ya no es necesario, vamos a construir el AFD usando la técnica de subconjuntos a modo de ejercicio. Para ello partimos del estado inicial y vamos representando los conjuntos de estados alcanzables (y las transiciones desde cada uno de ellos) mediante cierres ε. En este caso como no tenemos transiciones ε simplemente tenemos que fijarnos en los estados alcanzables directamente en base al símbolo leído.

Estado
x
y
Observaciones
{A} {A, B} {A} Estado inicial
{A, B} {A, B, C} {A}  
{A, B, C} {A, B, C} {A,D}  
{A, D} {A, B} {A} De aceptación

Nos queda este autómata:


En este caso estamos en el caso “mejor”: no se ha incrementeado el número de estados respecto del AFN.

162
Con lo visto hasta ahora 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_2a_sem_A.pdf, pulsar sobre el nombre o icono para descargarlo estando logeado). Y continuamos...


163
PREGUNTA. Sea el lenguaje L = {xnymzn : con n y m > 0, y con n = m}. ¿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).

Al indicarnos que n = m el lenguaje es equivalente a xnynzn : con n > 0, es decir, cadenas con el mismo número de x´s, y´s y z´s que aparecen en este orden. Un autómata finito no puede recordar el número de x´s que han aparecido para compararlo con el número de y´s y el número de z´s. Con un autómata finito podríamos reconocer ciclos simples xyz pero no cadenas del tipo xxxyyyzzz donde necesitamos recordar los caracteres que han aparecido previamente. 

Pensemos ahora en un autómata a pila. Podríamos pensar en apilar con las x´s, luego desapilar con las y´s, pero ya no podríamos comprobar las z´s.

Supongamos ahora que apilamos dobles x´s cada vez que encontramos una x, luego hacemos una transición a otro estado al encontrar una y y desapilamos una x simple por cada y, luego hacemos una transición con una z a otro estado y desapilamos una x simple por cada z. Una cadena como xxyyzz nos llevaría a aceptación pero una cadena como xxyzzz también porque no sabemos al desapilar con las z´s quién ha puesto el símbolo, si se debe a una x ó se debe a una y.

Un autómata a pila no determinista nos permite explorar múltiples vías, pero tampoco nos permite recordar la información que necesitamos recordar.

Una máquina de Turing con varias cintas puede almacenar la información que desee (y puede reducirse a una máquina de Turing de una cinta si se quiere). Por tanto respondemos la opción d) Máquina de Turing.



164
PREGUNTA: Dado el lenguaje L = {xnynzm : donde se cumplen las siguientes condiciones, n > 0, si n es par m es igual a 2 o si n es impar m es igual a 3}

¿Cuál es la máquina más simple que puede reconocerlo?

a) Un autómata finito

b) Un autómata a pila determinista

c) Un autómata a pila no determinista

d) Ninguna de las anteriores






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

Veamos algunas de las cadenas que reconoce el lenguaje:

Con n=1, n es impar, reconoce xyzzz
Con n=2, n es par, reconoce xxyyzz
Con n=3, n es impar, reconoce xxxyyyzzz
Con n=4, n es par, reconoce xxxxyyyyzz
Con n=5, n es impar, reconoce xxxxxyyyyyzzz

Necesitamos contar las apariciones de las x´s para luego comprobar que las apariciones de las y´s sean coincidentes en número. Desde el momento en que necesitamos contar descartamos los autómatas finitos, requeriremos como mínimo un autómata a pila. En este caso, si logramos diferenciar cuándo el número de x´s es impar, sabemos que podemos llegar a aceptación desapilando las x´s y añadiendo dos z´s. Si logramos diferenciar cuándo el número de x´s es par, sabemos que podemos llegar a aceptación desapilando las x´s y añadiendo tres z´s.

Vamos a tratar de plantear un autómata a pila que resuelva el problema. A priori no tenemos del todo claro si va a ser posible resolverlo con un autómata a pila determinista o no. Después de varias pruebas y tanteos planteamos el siguiente autómata:


Este es un autómata a pila determinista. Pasamos las cadenas que habíamos planteado a este autómata. Vemos que las resuelve bien, y vemos que la generalización no plantea problemas. Hemos representado el lenguaje con un autómata a pila determinista, por tanto la opción correcta es la b).

Nota: el autómata resuelve bien porque logra diferenciar par / impar mediante transiciones y porque una vez detectado si el caso es par o impar tiene que añadir un número finito de símbolos.

Los estados se pueden interpretar de la siguiente manera:

q2: se ha reconocido un número impar de x´s
q3: se ha reconocido un número par de x´s
q6: se acepta la cadena de entrada

165
Gracias mil, como siempre digo sólo paro para coger carrerilla. Suerte a todos los que están estudiando!

166
De todo un poco... / lenguaje definido por una gramática
« en: 18 de Diciembre 2013, 10:08 »
PREGUNTA: Sea el lenguaje L definido por la gramática

S -- > AB
A -- > aAc
A -- > λ
B -- > bBc
B -- > λ

¿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 b).

Analicemos qué cadenas genera la gramática.

El símbolo inicial, dado que no nos indican otra cosa, es S. Con la producción S -- > AB podemos alcanzar la cadena vacía, ya que A deriva a la cadena vacía y B deriva a la cadena vacía. Por tanto, la cadena vacía forma parte del lenguaje generado por la gramática.

Las producciones A nos permiten generar cadenas con el mismo número de a´s que de c´s, por ejemplo ac, aacc, aaaccc, etc.

Las producciones B nos permiten generar cadenas con el mismo número de b´s que de c´s, por ejemplo bc, bbcc, bbbccc, etc.

La producción AB permite que se puedan concatenar cero o muchos pares de (ac) con cero o muchos pares de (bc).

Vamos a tratar de escribir una expresión regular que represente el lenguaje:

(ac)*(bc)*

¿Esta expresión regular representa el lenguaje? (incluido la cadena vacía). La respuesta es que no, esta expresión regular permite cadenas como ac, acac, acacac … ó bc, bcbc, bcbcbc… o la concatenación de ambas, pero esto no es el lenguaje que queremos representar.

Si nos fijamos necesitamos contar el número de a´s y verificar que el número de c´s que vengan a continuación sea igual, ó contar el número de b´s y verificar que el número de c´s que venga a continuación sea igual. Si necesitamos contar vamos a necesitar al menos un autómata a pila. Vamos a tratar de construir un autómata a pila que reconozca el lenguaje.

Podríamos pensar en este autómata, pero la transición λ desde q1 introduce no-determinismo.


Para hacerlo determinista eliminamos la transición con cadena vacía desde q1 y a cambio hacemos q0 estado de aceptación.


Con este autómata tenemos el problema de que obliga a recibir al menos ac una vez, mientras que el lenguaje permite que ac aparezca cero o muchas veces.

Vamos a corregir esto y redibujar el autómata:


Ahora parece que sí está correcto. Es un autómata a pila determinista. Le pasamos cadenas:

λ : acepta
ac: acepta
aacc: acepta
aaa…ccc… : acepta


Nota: el autómata ha resultado relativamente complejo debido a la cantidad de variantes que admite. ¿Podíamos haber respondido sin dibujar el autómata? Posiblemente sí, teniendo en cuenta que el autómata “simplemente” tiene que apilar y desapilar en dos etapas puede “intuirse” que es un autómata a pila determinista, pero esto depende de “la capacidad de visión” que tenga cada uno. Esta pregunta es menos sencilla de lo que parece...





167
PREGUNTA: Sea el lenguaje L = {xnymzn : con n > 0 y m par}. ¿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 b).

Planteamos en primer lugar ejemplos de cadenas que pertenecen al lenguaje. El lenguaje no admite la cadena vacía. Admite xyyz, xyyyyz, xyy..yyz, x…xyy…yyz…z. Al hacer la referencia m par podemos preguntarnos si el 0 es considerado par. Vamos a considerar que sí. El cero cumple con la definición de número par: es un entero múltiplo del dos, 0 × 2 = 0. Entonces la cadena xz también sería admitida, así como xxyy, xxxyyy, etc.

Para reconocer este lenguaje podríamos apilar x´s y desapilar y´s, lo cual puede ser realizado por un autómata a pila. Sin embargo, adicionalmente necesitamos verificar que el número de y´s sea par. Esto podríamos hacerlo con un autómata a pila que apila con cada y que recibe y desapila con la siguiente. Vamos a tratar de representar el autómata. Primero lo dibujamos de forma aproximada y luego lo vamos perfeccionando a medida que vamos haciendo pruebas.

Para permitir la posibilidad de que vengan y´s o no vengan y´s podríamos pensar en usar no determinismo (transiciones basadas en la cadena vacía, “espontáneas”), pero tenemos que estudiar si podemos evitar el no determinismo. Vamos a intentarlo, puesto que la máquina determinista es más simple que la no determinista.


Ahora le pasamos las cadenas al autómata y comprobamos el comportamiento:

xz:  acepta
xxzz: acepta
xx…xxzz…zz: acepta
xyyz: acepta
xyyyyz: acepta
xxyyzz: acepta

Conclusión: podemos reconocer el lenguaje con un autómata a pila determinista y la respuesta correcta es la b).

Nota: la posibilidad de un autómata finito la descartamos desde el momento en que necesitamos contar para reconocer el lenguaje.

Nota: este ejercicio quizás se pueda resolver de forma intuitiva teniendo en cuenta que las x´s se pueden contrarrestar con las z´s y que las y´s al ser pares se pueden contrarestar a sí mismas. No obstante, consideramos preferible representar el autómata y hacer comprobaciones antes que basarnos en una visión rápida.


168
De todo un poco... / gramáticas y forma normal de chomsky
« en: 16 de Diciembre 2013, 12:18 »
PREGUNTA:  ¿Es posible construir la forma normal de Chomsky de la gramática siguiente?

S -- > AB
A -- > aAc
A -- > λ
B -- > bBc
B -- > λ
 
a) Si.

b) No.





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

El símbolo inicial, dado que no nos indican otra cosa, es S. Con la producción S -- > AB podemos alcanzar la cadena vacía, ya que A deriva a la cadena vacía y B deriva a la cadena vacía. Por tanto, la cadena vacía forma parte del lenguaje generado por la gramática.

Recordar que la FNC implica estas condiciones:

a)   El lenguaje no genera la cadena vacía
b)   Toda producción es de tipo A -- > BC ó A -- > a
c)   La gramática no tiene producciones λ ni producciones unitarias ni símbolos inútiles.

En este caso el lenguaje genera la cadena vacía por lo que respondemos la opción b), no es posible generar la forma normal de chomsky de esta gramática.

Nota: si se nos preguntara, ¿es posible generar una gramática que genere un lenguaje igual al lenguaje de esta gramática, excluida la cadena vacía, en forma normal de chomsky? La respuesta sería que podríamos responder que sí siguiendo el siguiente proceso (indicado a continuación PARA QUIEN LE INTERESE HACERLO COMO EJERCICIO). Primero, eliminar las producciones que llevan a la cadena vacía:

S -- > AB
S -- > A
S -- > B
A -- > aAc
A -- > ac
B -- > bBc
B -- > bc

Segundo, eliminar las producciones unitarias. Para ello se utiliza el método de pares unitarios:

(S, S) | (S, A) | (S, B)
(A, A)
(B, B)
S -- > AB | aAc | ac | bBc | bc
A -- > aAc | ac
B -- > bBc | bc

Hacemos estos cambios: X -- > a, Y -- > b, Z -- > c     con lo que la gramática queda:

S -- >  AB | XAZ | XZ | YBZ | YZ
A -- > XAZ | XZ
B -- > YBZ | YZ

Nos faltaría transformar las producciones que contienen tres no terminales en producciones con 2 no terminales. Para ello hacemos T -- > AZ,  M -- > BZ y la gramática queda:

S -- >  AB | XT | XZ | YM | YZ
A -- > XT | XZ
B -- > YM | YZ
T -- > AZ
M -- > BZ

Que ya está en forma normal de chomsky y representa el lenguaje inicial excepto la cadena vacía, es decir, L – { λ }



169
De todo un poco... / lenguaje intersección y sus propiedades
« en: 13 de Diciembre 2013, 08:36 »
PREGUNTA: Dado el lenguaje L1 = {xnyn : n > 0} y el lenguaje L2 = {xny2n : n > 0}.

a) El lenguaje L = L1 ∩ L2 no es reconocido por un autómata finito.

b) El lenguaje L = L1 ∩ L2 no es reconocido por un autómata a pila determinista.

c) El lenguaje L = L1 ∩ L2 no es reconocido por un autómata a pila no determinista.

d) Ninguna de las anteriores






RESPUESTA: la opción correcta es la d)

el lenguaje L1 comprende las cadenas: xy, xxyy, xxxyyy … siendo reconocible por un autómata a pila al que le basta apilar x´s y desapilarlas con y´s hasta vaciar la pila.

El lenguaje L2 comprende las cadenas xyy, xxyyyy, xxxyyyyyy … siendo reconocible por un autómata a pila al que le basta apilar dos x´s cada vez que reciba una x y desapilar una x cada vez que reciba una y hasta vaciar la pila.

Por tanto, L1 y L2 son lenguajes independientes del contexto. Ahora nos preguntan acerca de la intersección de estos dos lenguajes, es decir, el lenguaje que representa las cadenas comunes entre ambos. Sin embargo, ambos lenguajes no tienen cadenas en común (prueba a buscar alguna y verás que no hay), con lo que el lenguaje intersección es el lenguaje vacío. El lenguaje vacío es reconocido por cualquier autómata que simplemente tiene un estado de aceptación y no tiene transiciones. Por tanto, sí es reconocido por un autómata finito, a pila determinista o a pila no determinista, lo que hace las respuestas a), b) y c) falsas. Respondemos por tanto la opción d).


170
PREGUNTA: Dado el lenguaje L definido por la siguiente gramática:

S -- > xX
S -- > Sy
S -- > xy

L es reconocido por el siguiente automáta a pila:


Podemos asegurar que el lenguaje es un lenguaje independiente del contexto no regular

a) Verdadero.
b) Falso.




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

Veamos cadenas que genera el lenguaje: no se admite la cadena vacía. Genera: xy, xxy, xxxy, xxx…xxxy, xyy, xyyy, xyyy…yyy, xxx…xxxxyyyy…yyy

El lenguaje permite tantas x antes y tantas y después como se quiera, obligando a que aparezca una xy central.

Vamos a tratar de encontrar una expresión regular que describa el lenguaje: x*(xy)y* permite que haya tantas x antecesoras como se quiera, obliga a que haya una xy central y permite tantas y posteriores como se quiera. También podemos escribir el lenguaje como xx*yy*. Además si nos fijamos en el autómata a pila propuesto, podemos transformarlo en un autómata finito determinista que parte de qo y pasa a q1 cuando recibe una x, admite tantas x como se desee en q1 mediante un lazo y pasa a q2 (aceptación) al recibir una y. Además en q2 admite tantas y como se desee mediante un lazo.

Por tanto se trata de un lenguaje regular, con lo cual es falso que sea un lenguaje independiente del contexto no regular. Respondemos la opción b).

Nota: el hecho de que el lenguaje se describa con un autómata a pila tal y como se plantea en el enunciado significa que es un LIC, pero no dice nada respecto de si el lenguaje es regular o no regular ya que los lenguajes regulares son un subconjunto de los LIC.


171
PREGUNTA: El uso de variables globales:

a) No tiene por qué evitarse
b) Sólo puede evitarse mediante el paso de argumentos por valor
c) Sólo puede evitarse mediante el paso de argumentos por referencia
d) Puede evitarse mediante el paso de argumentos por valor y por referencia






RESPUESTA:

Variables globales son las reconocidas en todo el ámbito del programa.

Si pasamos argumentos por valor el argumento no se modifica durante la operación de la función, lo que impide "manipulaciones indeseadas" de la variable que se pasa.

Si pasamos argumentos por variable el argumento sí se puede modificar durante la operación de la función, lo que permite que varíe el valor de la variable que se pasa.

La pregunta no es demasiado clara. Vamos a tratar de razonar para responderla:

1) Idealmente el resultado de una función debe ser predecible de antemano en función de los argumentos que se le pasan. A esto se le denomina transparencia referencial y se garantiza si la función utiliza solo elementos locales o mencionados en la lista de argumentos. La función no debería usar variables globales porque pueden modificar el resultado de la función siendo algo ajena a ella. Si un subprograma modifica una variable ajena se dice que está produciendo efectos secundarios o laterales (side effects).

2) Idealmente todos los argumentos de funciones deberían pasarse por valor porque el objetivo de las funciones debería ser devolver el resultado en función de unos argumentos y nada más.

Pasar argumentos por valor no garantiza que no se usen variables globales dentro de una función. Pasar argumentos por referencia idem.

El uso de variables globales no tiene por qué evitarse siempre que se haga de forma controlada y razonada.

Esta pregunta es confusa y por tanto daríamos la respuesta a) al mismo tiempo que incluimos una explicación adicional (hoja adicional) indicando por qué hemos respondido esta opción.


172
De todo un poco... / forma normal de chomsky para una gramática
« en: 09 de Diciembre 2013, 11:15 »
PREGUNTA: Dado el lenguaje L = {xnym : n, m > 0} definido por la gramática

S -- > xX
X -- > xX
X -- > yY
Y -- > yY
Y -- > λ

¿Podríamos construir su forma normal de Chomsky?

a) Si.
b) No.





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

Recordar que la FNC implica estas condiciones:

a)   El lenguaje no genera la cadena vacía
b)   Toda producción es de tipo A -- > BC ó A -- > a
c)   La gramática no tiene producciones λ ni producciones unitarias ni símbolos inútiles.

¿Genera este lenguaje la cadena vacía? S ha de derivar en xX. Dado que X ha de derivar en xX ó yY llegamos a xxX ó xyY. Si derivamos Y a la cadena vacía tenemos que la cadena más corta que se puede generar es xy. Por tanto el lenguaje no contiene la cadena vacía.

Nota: puede despistar el que haya una producción que lleve a la cadena vacía, pero esto no significa que el lenguaje genere la cadena vacía.

Vamos a intentar ponerla en forma normal de Chomsky. Para ello en primer lugar eliminamos las producciones λ. Reemplazamos las producciones λ haciendo el reemplazo por todas las producciones alternativas posibles. La gramática queda:

S -- > xX
X -- > xX
X -- > y
Y -- > yY
Y -- > y

En segundo lugar eliminaríamos producciones unitarias tipo A -- > B pero como no tenemos pasamos al siguiente paso.

En tercer lugar eliminaríamos símbolos inútiles pero como no tenemos pasamos al siguiente paso.

Nos falta dejar la gramática en la forma adecuada. Para ello introducimos variables adicionales como F -- > x así como G -- > y. La gramática queda:

S -- > FX
X -- > FX
F -- > x
X -- > y
Y -- > GY
Y -- > y
G -- > y

Esta gramática está en forma normal de Chomsky y genera el mismo lenguaje que la gramática inicial, por tanto la respuesta es la a), sí se puede construir la FNC.



173
De todo un poco... / lema de bombeo aplicado a los lenguajes regulares
« en: 08 de Diciembre 2013, 10:10 »
PREGUNTA: El lema del bombeo aplicado a los lenguajes regulares nos demuestra que para todo autómata finito no determinista existe un autómata finito determinista que reconoce el mismo lenguaje.

a) Verdadero.
b) Falso.



RESPUESTA:
la opción correcta es la b). El lema de bombeo aplicado a los lenguajes regulares nos demuestra que si un lenguaje no cumple el lema de bombeo no es un lenguaje regular. En caso de cumplirse, no es garantía de que el lenguaje sea regular ni de que no lo sea. No tiene nada que ver con lo que indica el enunciado de la pregunta, por lo tanto la respuesta es la b), Falso.



174
De todo un poco... / máquina más simple para reconocer un lenguaje
« en: 07 de Diciembre 2013, 10:53 »
PREGUNTA: Sea el lenguaje L = {xnymzn : con n y m > 0, y con n ≠ m}. ¿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 lenguaje implica que el número de x´s ha de ser igual al número de z´s, y con al menos una y entre las x´s y las z´s. El número de x´s y z´s tiene que ser distinto al número de y´s. El número mínimo de cualquier símbolo es 1.

Con estas premisas xyz no se acepta porque el número de y´s tiene que ser distinto que el número de x´s y de z´s. Se aceptarían las siguientes cadenas:

xyyz, xyyyz, xyyyyyy…yyyyyyz, xxyzz, xxxyzzz, xx…xxyzz..zz, xxxyyzzz, etc.

Necesitamos contar, con lo cual ya sabemos que los autómatas finitos no podrán representar este lenguaje.

Ahora nos preguntamos, ¿podrá un autómata a pila reconocer este lenguaje? Necesitamos comprobar las siguientes restricciones:

a)   Que el número de z´s sea distinto al número de x
b)   Que el número de x´s sea igual al número de z´s
c)   Que tanto el número de x´s como de y´s sea al menos 1

Con un autómata a pila podemos contar algo añadiendo a la pila y comprobar la coincidencia con otra cosa desapilando, pero aquí esto no es suficiente, necesitaríamos contar dos cosas: las x´s y las y´s, luego desapilar con las z´s y verificar que las x´s están en distinto número que las y´s. Esta capacidad de computación podríamos decir que necesita “2 pilas” y está por encima de las posibilidades de un autómata a pila, sea determinista o no determinista, por lo que concluimos que la máquina más simple para reconocer este lenguaje ha de ser una máquina de Turing.

Otra vía para tratar de responder esta pregunta es usar el lema de bombeo para lenguajes independientes del contexto. El lenguaje xny2nzn sería un subconjunto del lenguaje y por tanto debería ser un LIC si el lenguaje propuesto fuera un LIC. Supongamos que este lenguaje es un LIC. Entonces existe un valor constante n de forma que para z = xny2nzn  se cumpliría que:

z = uvwxy
|vwx| <= n
v ≠ λ, x ≠  λ
   
Si |vwx| <= n significa que vwx ha de estar formado en nuestro caso por símbolos y´s, mientras que x ha de contener símbolos x´s y posiblemente y´s , y z ha de estar formado posiblemente por símbolos y´s y por símbolos z´s.

Según el lema de bombeo uvkwxky ha de pertenecer al lenguaje para todo k>=0, pero si hacemos k=0 tenemos que la parte central de la cadena estaría formada por como mucho n símbolos y, mientras que necesitamos 2n símbolos y. La cadena no pertenecería al lenguaje y no se cumple el lema de bombeo para lenguajes LIC, por lo que podemos concluir que el lenguaje no es un LIC.

Conclusión: será necesaria una máquina de Turing para reconocer el lenguaje.

Esta pregunta es menos simple de lo que parece.

175
De todo un poco... / examen autómatas gramáticas y lenguajes
« en: 06 de Diciembre 2013, 11:31 »
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 respondiendo 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 jun13_1a_sem_A.pdf, pulsar sobre el nombre o icono para descargarlo estando logeado). Y continuamos...


176
De todo un poco... / gramática y símbolo inicial de una gramática
« en: 05 de Diciembre 2013, 08:12 »
PREGUNTA: Dada la siguiente gramática, donde A es el símbolo inicial de la gramática:

S -- > A1B
A -- > 0A | λ
B -- > 0B | 1B | λ

Indicar cuál de las siguientes afirmaciones es VERDADERA:

a) La gramática genera el lenguaje representado por la expresión regular 0*

b) La gramática genera el lenguaje representado por la expresión regular 0*1 (0 + 1)*

c) La gramática genera un lenguaje con un número finito de cadenas

d) Ninguna de las anteriores afirmaciones es verdadera




RESPUESTA: la opción correcta es la a)

Tenemos que prestar atención a cuál es el símbolo inicial de la gramática, normalmente S pero en este caso nos indican específicamente que es A. Por ello vamos a reescribir la gramática comenzando con la regla asociada al no terminal A para evitar confundirnos.

A -- > 0A | λ
B -- > 0B | 1B | λ
S -- > A1B

Al analizar la gramática con A como símbolo inicial vemos que B y S son símbolos inalcanzables, por tanto la gramática se reduce a esta regla: A -- > 0A | λ

Esta gramática es recursiva por la derecha y admite la cadena vacía λ dentro del lenguaje que genera. El lenguaje generado es λ, 0, 00, 000, 0000… que es lo mismo que la expresión regular 0*

Analizamos las posibles respuestas:
a) es verdadera
b) es falso, el símbolo 1 no aparece dentro del lenguaje
c) es falso, el número de cadenas que genera es infinito
d) es falso

Pregunta sencilla pero donde mucha gente cometerá la equivocación de usar S como símbolo inicial de la gramática. ¡Prestar atención!


177
De todo un poco... / lenguaje con un alfabeto de tres letras
« en: 04 de Diciembre 2013, 09:01 »
PREGUNTA:  Sea L el lenguaje definido por el conjunto de cadenas del alfabeto Σ   = {a, b, c} que contienen al menos una a y al menos una b. Indicar cuál de las siguientes afirmaciones es VERDADERA:

a) L es un lenguaje independiente del contexto no regular

b) L es un lenguaje regular y por tanto, es posible encontrar una expresión regular que lo reconozca

c) La definición del lenguaje impone restricciones acerca del número de c's que deben contener las cadenas del lenguaje




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

Vamos a tratar de plantear un autómata finito que represente el lenguaje. Si lo logramos, ya sabremos que es una expresión regular.

Partimos de un estado inicial q0. Si en dicho estado se lee una c, el autómata se mantiene en q0. Si se lee una a el autómata pasa al estado q1 y si se lee una b el autómata pasa al estado q2. Si estando en q1 se lee una c ó una a, el autómata permanece en q1, mientras que si se lee una b el autómata pasa al estado de aceptación q3. Si estando en q2 el autómata lee una b ó una c, el autómata permanece en q2, mientras que si lee una a pasa al estado de aceptación q3. En q3 la lectura de a, b ó c hacen que se permanezca en q3.

Si queremos estar más seguros lo dibujamos y lo probamos con diferentes cadenas.

Analizamos las opciones: a) es falsa porque dice que es un lenguaje no regular.

b) es verdadera pues como hemos visto es un lenguaje regular.

c) es falsa porque la definición del lenguaje no dice nada acerca del número de c´s que deben contener las cadenas del lenguaje.



178
PREGUNTA: Dado un alfabeto Σ,llamamos L1 al conjunto de lenguajes de Σ aceptados por máquinas de Turing deterministas de una sola cinta, L2 al conjunto de lenguajes de Σ aceptados por máquinas de Turing deterministas con varias cintas y L3 al conjunto de lenguajes de Σ aceptados por máquinas de Turing no deterministas y con varias cintas

¿Cuál de las siguientes afirmaciones es verdadera?

a) L1 = L2 ⊂ L3

b) L1 ⊂ L2 = L3

c) Ninguna de las anteriores afirmaciones es cierta




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

La capacidad de reconocimiento de lenguajes es la misma para máquinas de Turing deterministas de una cinta, de varias cintas o no deterministas de una o varias cintas. Lo que sí puede variar es la eficiencia o tiempo necesario para resolver un problema entre máquinas deterministas y no deterministas, pero en este caso no hablamos de la eficiencia o complejidad temporal de las máquinas, sino de la capacidad de reconocimiento de lenguajes.

La opción a) indicaría que las máquinas deterministas reconocen un conjunto de lenguajes que es subconjunto de los que reconocen las máquinas no deterministas, lo cual es falso.

La opción b) indicaría que las máquinas deterministas de una cinta reconocen menos lenguajes que las máquinas deterministas de varias cintas o que las máquinas no deterministas, lo cual es falso.

Si se quiere hacerlo más simple, recordar esto: todas las máquinas de Turing tienen la misma capacidad de reconocimiento de lenguajes.

Conclusión: respondemos la opción c), ninguna de las afirmaciones anteriores es cierta.



179
De todo un poco... / Re:gramática para generar contraseñas
« en: 01 de Diciembre 2013, 11:45 »
Supongamos que quieres crear una contraseña que puede constar de cinco letras: a, b, c ó d, ordenadas de cualquier manera.

Una expresión regular sería:

E = (a | b | c | d | e) , con esta expresión decimos que E es bien a, bien b, bien c, bien d o bien d.

La contraseña sería:

Contraseña = EEEEE, con esta expresión decimos que la contraseña se genera concatenando cinco veces la expresión regular E. También podríamos escribirlo así: Contraseña = (a | b | c | d | e) (a | b | c | d | e) (a | b | c | d | e) (a | b | c | d | e) (a | b | c | d | e) pero esta expresión es más farragosa.

Expresado en forma de gramática tendríamos:


Contraseña -- > EEEEE
E -- > a | b | c | d | e


Una contraseña de 4 dígitos como expresión regular sería:

D = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

Contraseña = DDDD

Expresado en forma de gramática sería:

Contraseña -- > DDDD

D -- > 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9


Hay una notación para expresiones regulares que nos permite hacer la escritura más cómoda que es la notación de conjuntos. La notación es [A-Z] indica "cualquier letra mayúscula comprendida entre la A y la Z"; [A-Za-z] indica cualquier letra mayúscula o minúscula entre la a y la z. Por último [0-9] indica cualquier dígito comprendido entre 0 y 9. Puedes restringir los conjuntos, por ejemplo [m-z] significa cualquier letra minúscula entre la m y la z, o [5-8] indica cualquier número entre el 5 y el 8.

De esta manera podríamos definir una contraseña de longitud 4 caracteres que admita letras mayúsculas, minúsculas o dígitos de esta manera:

Como expresión regular:

letra = [A-Za-z]
digito = [0-9]
Caracter = letra | digito
contraseña = CaracterCaracterCaracterCaracter

La gramática suele generarse apoyándonos en las expresiones regulares, que son considerados terminales de la gramática. En este caso la gramática sería:

Contraseña -- > CaracterCaracterCaracterCaracter


Nota: el símbolo de elección "|" también se representa a veces usando el símbolo "+"

180
De todo un poco... / Re:gramática para generar contraseñas
« en: 01 de Diciembre 2013, 11:21 »
Te respondo a través de un nuevo tema del foro para no mezclar

Páginas: 1 ... 4 5 6 7 8 [9] 10 11 12 13 14 ... 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".