Los números divisibles por 7 se corresponden con el autómata finito obvio con 7 estados [matemática] Q = \ {0, \ ldots, 6 \} [/ matemática], estado inicial y final [matemática] 0 [/ matemática] y transiciones [ math] i \ stackrel d \ mapsto (10i + d) \ bmod 7 [/ math]. Convertí este autómata finito en una expresión regular, usando la recursión en el conjunto de estados intermedios permitidos:
Dado [math] i, j \ en Q [/ math] y [math] S \ subseteq Q [/ math], deje que [math] f (i, S, j) [/ math] sea una expresión regular que coincida con todos rutas de autómatas desde [matemática] i [/ matemática] a [matemática] j [/ matemática] utilizando solo estados intermedios dentro de [matemática] S [/ matemática]. Luego,
[matemáticas] f (i, \ varnothing, j) = (j – 10i) \ bmod 7 [/ matemáticas],
[matemáticas] f (i, S \ cup \ {k \}, j) [/ matemáticas]
[matemáticas] = f (i, S, j) \ mid f (i, S, k) f (k, S, k) ^ * f (k, S, j) [/ matemáticas].
(Esta recurrencia ofrece un procedimiento mucho más simple para convertir los NFA en expresiones regulares que el procedimiento típicamente presentado que involucra “NFA generalizados”. Se me ocurrió durante la conferencia sobre el tema de Michael Sipser; cuando se lo mostré después de clase, dijo que no había no lo he visto antes. Sin embargo, aparentemente se sabe; ver comentarios).
- Cómo resolver [matemáticas] 4 + x = 4 \ veces2 ^ x [/ matemáticas]
- ¿Cómo debo autoaprender el material que se obtendría en un buen programa de pregrado en matemáticas?
- ¿Quién piensa que las matemáticas apestan?
- ¿Por qué un sistema matemático tiene que ser incompleto o inconsistente?
- ¿Cómo se originó la fórmula cuadrática?
Utilicé la programación dinámica para elegir [math] k [/ math] para minimizar la longitud de la expresión resultante.