Documentos de Académico
Documentos de Profesional
Documentos de Cultura
www.wuolah.com/student/mike_
1049
Febrero-2014-Solucion.pdf
Enunciados y soluciones de examenes AMC
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su
totalidad.
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-1746578
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-1746578
Ejercicio 1 (2 pts)
Sólo se realizan llamadas recursivas si se cumple la condición del if, por tanto, el caso en que no se
cumpla será el caso base, que sería cuando p y r sean iguales por ejemplo, ósea, n = 1.
En caso contrario, tenemos dos llamadas recursivas cuyos índices están separados por la mitad, seguidas
de la llamada a Merge, que sabemos que es O(n), entonces:
1 𝑠𝑖 𝑛 = 1
T(n) = { 𝑛
2𝑇 (2 ) + 𝑘𝑛 + 8 𝑠𝑖 𝑛 > 1
Como no sabemos la función que dé el tiempo exacto para Merge en función de n, lo ponemos como
k·n. Además, dado que 8 ∈ O(1) y O(1) ∈ O(n), debe existir una k’ tal que k’n sea siempre igual o mayor
que k·n + 8:
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
1 𝑠𝑖 𝑛 = 1
T(n) = { 𝑛
2𝑇 ( ) + 𝑘′𝑛 𝑠𝑖 𝑛 > 1
2
Ejercicio 2 (3 pts)
Es como un problema de la mochila, pero en lugar de una mochila, hay 3, y en lugar de tener como
objetivo obtener un beneficio mayor, aquí se desea que la tercera mochila (la tercera conovocatoria)
quede lo menos cargada posible.
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
tiempoEmpleado = (0, 0, 0)
convocatoria = 1
i = 1
t_ord = ordenar(t) // Almacena en t_ord los índices de los elementos de t
// tal y como estaría si estuviera ordenado de menor a
// mayor
// Ej: t = (4,6,1) -> t_ord = (3,1,2)
C = t_ord(i)
mientras convocatoria ≤ 3 Y i ≤ N
si tiempoEmpleado(convocatoria) + t(c) ≤ M
tiempoEmpleado(convocatoria) += t(c)
S(convocatoria)(c) = 1
// Siguiente elemento sin cambiar de convocatoria
i = i + 1
si i ≤ N
c = t_ord(i)
fsi
sino
// Siguiente convocatoria sin cambiar de elemento
convocatoria = convocatoria + 1
fsi
fmientras
si i > N
devuelve S
sino
devuelve fallo
fsi
ffuncion
0 𝑠𝑖 𝑁 = 0
Convocatorias(M,N,C) = {+∞ 𝑠𝑖 𝐶 = 0
min(𝐶𝑜𝑛𝑣(𝑀, 𝑁 − 1, 𝐶) + 𝑡𝑁 , 𝐶𝑜𝑛𝑣(𝑀, 𝑁, 𝐶 − 1)) 𝑠𝑖 𝑛 > 1
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
siendo M el tiempo máximo por convocatoria, N la tarea actual y C la convocatoria actual.
Casos base:
- Si no hay actividades, el número de horas dedicadas en la última convocatoria será 0.
- Si no hay convocatorias, sería una situación de error, expresada mediante +∞.
Tabla:
Sería una tabla de tantas filas como tareas haya, más una fila extra como caso de no haber tareas. Y
tantas columnas como convocatorias haya, más una extra para el caso de no haber convocatorias:
0 1 2 3
0 +∞ 0 0 0
1 +∞
2 +∞
3 +∞
4 +∞
5 +∞
Para la decisión de asignar la tarea a una convocatoria o a la anterior, se tomará aquella que minimice
el tiempo empleado en la última convocatoria que haya.
Convocatorias(T(1...N))
Actual = 0; Anterior = 0
para i = 0 hasta N Tabla[i][0] = +∞ fpara
para j = 1 hasta C Tabla[0][j] = 0 fpara
para i = 1 hasta N // Tarea
para j = 1 hasta C // Convocatoria
Actual = Tabla[i-1][j] + T[i] // Misma convocatoria, sumo el tiempo Ti
si Actual > M
Actual = +∞ // No cabe en la actual
fsi
Anterior = Tabla[i][j-1] + T[i] // Anterior convocatoria, suma Ti
si Anterior ≤ M
Anterior = 0 // Cabe en la anterior, la última conv está vacía
fsi
Tabla[i][j] = min(Actual, Anterior)
fpara
fpara
fConvocatorias
c) Para el backtracking, hay que tener en cuenta los posibles valores que pueden darse en una decisión.
En este caso, para cada tarea, ésta podría ir, en principio, en cada una de las 3 convocatorias
existentes.
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-1746578
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Generar(nivel, S)
// Siguiente convocatoria posible
S(nivel) = S(nivel) + 1
fGenerar
Solucion(nivel, S)
// Es el último nivel y tiene una convocatoria asignada
devuelve nivel == N Y S(nivel) ≠ 0
fSolucion
Criterio(nivel, S)
devuelve nivel ≤ N Y Convocatorias(S(nivel)) + Tiempos(nivel) ≤ M
fCriterio
MasHermanos(nivel, S)
// Comprueba si aún quedan convocatorias
devuelve S(nivel) ≤ C
fMasHermanos
Retroceder(nivel, S)
// Quitar la convocatoria puesta a esta tarea, y pasar a una tarea anterior
S(nivel) = 0
nivel = nivel - 1
fRetroceder
Backtracking()
nivel = 1
// S y Convocatorias inicializadas fuera
fin = false
repetir
Generar(nivel, S)
si Solucion(nivel, S)
fin = true
sino
si Criterio(nivel, S)
Convocatorias(S(nivel)) += Tiempos(nivel)
nivel = nivel + 1
sino
mientras NO MasHermanos(nivel, S)
Retroceder(nivel, S)
hasta fin
fBacktracking
f a b
→0 1 3
1 0 3
2 1 4
*3 5 5
4 3 3
*5 5 3
a) AFD mínimo
Agrupando inicialmente en finales y no finales:
Q/E0 = (c0 = {0, 1, 2, 4}, c1 = {3, 5})
f’(0, a) → 1 ∈ c0, f’(0, b) → 3 ∈ c1
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
f’(1, a) → 0 ∈ c0, f’(1, b) → 3 ∈ c1
f’(2, a) → 1 ∈ c0, f’(2, b) → 4 ∈ c0 → Nuevo conjunto c2 = {2}
f’(4, a) → 3 ∈ c1, f’(4, b) → 3 ∈ c1 → Nuevo conjunto c3 = {4}
f a b
→ c0 c0 c1
* c1
c1 c1
c2
c0 c3
c3
c1 c1
b) Expresión regular reconocida por el AFD mínimo
𝑥0 = 𝑎𝑥0 + 𝑏𝑥1 + 𝑏
𝑥1 = 𝑎𝑥1 + 𝑏𝑥1 + 𝑎 + 𝑏
Ecuaciones características del AFD: {
𝑥2 = 𝑎𝑥0 + 𝑏𝑥3
𝑥3 = 𝑎𝑥1 + 𝑏𝑥1 + 𝑎 + 𝑏
Para resolver x0, hace falta conocer x1. Para conocer x1, no es necesario profundizar más:
x1 = ax1 + bx1 + a + b → Regla de Inferencia → x1 = (a+b)*(a+b) → x1 = (a+b)*a + (a+b)*b
Sustituir en la primera ecuación:
x0 = ax0 + b[(a+b)*a + (a+b)*b] + b → ax0 + b(a+b)*a + b(a+b)*b + b → Regla de inferencia →
x0 = a*( b(a+b)*a + b(a+b)*b + b) → x0 = a*b(a+b)*a + a*b(a+b)*b + a*b
c) Gramática de tipo 3
G = ({c0, c1, c2, c3}, {a, b}, c0, P), siendo P:
- c0 ::= ac0 | bc1
- c1 ::= ac1 | bc1
- c2 ::= ac0 | bc3
- c3 ::= ac1 | bc1
a) El primer autómata no puede ser ya que no existe definida ninguna transición al estado final F,
ninguna cadena sería aceptada.
b) Este autómata podría reconocer el lenguaje. Empezando en A, podría ir a B sólo si recibe un 0, o a F
si no recibe nada (sería el caso en que n = 0). Y estando en B, sólo puede cambiar de estado si
recibe un 1, pasando a C o a F. Si es el último 1, se aceptaría la cadena, y si hubiera un 0 a
continuación, volvería al estado B, donde se esperará el 1 que siga a ese 0.
c) Este autómata no tiene bien definidas las transiciones. De un símbolo No Terminal con otro No
Terminal no se puede hacer una transición a un símbolo Terminal.
d) Este autómata no puede reconocer el lenguaje porque no hay ninguna transición que parta del
símbolo inicial.
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Q0 = λ-Clausura(A) = {A, F}
f’(Q0, 1) = {}
f’(Q1, 0) = {}
f’(Q2, 1) = {}
f 0 1
→ * Q0 Q1
Q1 Q2
* Q2 Q1
AFD mínimo
f 0 1
→ * c1 c0
c0 c1
Ejercicio 5 (2 pts)
Algorítmica y Modelos de Computación
Solución Febrero 2014
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.