Nos acaban de asignar un nuevo proyecto en mi clase de estructuras de datos - Generando texto con cadenas de markov.Markov Chain Text Generation
general
Dado un archivo de texto de entrada, se crea una semilla inicial de longitud n caracteres. Añadimos eso a nuestra cadena de salida y elegimos nuestro próximo carácter basado en el análisis de frecuencia ..
Este es el gato y hay dos perros.
Initial seed: "Th"
Possible next letters -- i, e, e
Therefore, probability of choosing i is 1/3, e is 2/3.
Now, say we choose i. We add "i" to the output string. Then our seed becomes
hi and the process continues.
Mi solución
tengo 3 clases, Nodo, ConcreteTrie y Conductor
Por supuesto, la clase ConcreteTrie no es un trie del sentido tradicional. Así es como funciona:
Teniendo en cuenta la frase con k = 2:
Este es el gato y hay dos perros.
I generar nodos Th, hi, is, ... + ..., gs, s. Cada uno de estos nodos tiene hijos que son la letra que los sigue. Por ejemplo, Node Th tendría hijos i y e. Mantengo los recuentos en cada uno de esos nodos para que luego pueda generar las probabilidades de elegir la siguiente letra.
Mi pregunta:
En primer lugar, ¿cuál es la forma más eficiente para completar este proyecto? Mi solución parece ser muy rápida, pero realmente quiero quitarle los calcetines a mi profesor. (En mi último proyecto Una variación del problema de distancia de edición, hice un A *, un algoritmo genético, un BFS y recocido simulado, y sé que el problema es NP-Hard)
En segundo lugar, ¿cuál es el punto de esta tarea? En realidad, no parece estar relacionado con gran parte de lo que hemos cubierto en clase. ¿Qué se supone que debemos aprender?
Tal vez su profesor es un usuario SO, y él quiere ver si estaba prestando atención en clase, y qué tan bien nos lo puedes explicar. – pavium
No mencionó las cadenas de Markov en clase. – dacman