Programación dinámica (abajo): ¿Cómo encontrar la ecuación de transición de estado y programarla?

Programación dinámica (abajo): ¿Cómo encontrar la ecuación de transición de estado y programarla?

Ecuaciones de transferencia de estado e implementación de programación

Hay tres parámetros en la función min para encontrar el valor mínimo, que corresponden a las distancias de edición de los tres casos de los que hablamos en la sección anterior, a saber: reemplazar, insertar y eliminar caracteres. La distancia de edición 1 de las dos cadenas de caracteres está marcada en la esquina inferior derecha de la tabla.

Suponemos que las matrices de caracteres A [] y B [] representan las cadenas de caracteres A y B, A [i] representa el carácter en la posición i-ésima en la cadena de caracteres A, y B [i] representa el carácter en la posición i-ésima en la cadena de caracteres B . La matriz bidimensional d [,] representa la tabla bidimensional que se acaba de usar para la derivación, y d [i, j] representa la distancia de edición final que se encuentra en la fila i y la columna j de esta tabla. La función r (i, j) representa la distancia de edición generada durante el reemplazo. Si A [i] y B [j] son ​​iguales, el valor de retorno de la función es 0; de lo contrario, el valor de retorno es 1.

  • Si i es 0, y j también es 0, entonces d [i, j] es 0.
  • Si i es 0 yj es mayor que 0, entonces d [i, j] es j.
  • Si i es mayor que 0, y j es 0, entonces d [i, j] es i.
  • Si i es mayor que 0, y j es mayor que 0, entonces d [i, j] = min (d [i-1, j] + 1, d [i, j-1] + 1, d [i-1, j- 1] + r (i, j)).

El paso más crítico aquí es d [i, j] = min (d [i-1, j] + 1, d [i, j-1] + 1, d [i-1, j-1] + r (i, j)). Esta expresión representa algunos cambios que pueden existir desde el estado anterior al siguiente en la programación dinámica, y el resultado de la decisión final en función de estos cambios. Llamamos a esta expresión la ecuación de transición de estado.

Con la ecuación de transición de estado, podemos describir matemáticamente la transición de estado y su correspondiente proceso de toma de decisiones, y con la ecuación de transición de estado, la codificación específica es realmente muy fácil.

Si utilizamos el método de programación dinámica para medir la distancia de edición, puede garantizar la eficiencia y la eficacia de la recomendación de la consulta. Sin embargo, el algoritmo basado en la distancia de edición también tiene limitaciones: solo es aplicable a la medición de similitud de los idiomas latinos, por lo que generalmente solo se usa para consultas relacionadas con el inglés o el pinyin. Si pertenece a la familia de idiomas asiáticos, como el chino, la semántica de un carácter (o carácter) chino estará muy lejos, por lo que no es adecuado utilizar un algoritmo basado en la distancia de edición.

Ejercicios prácticos: nuevos problemas con las combinaciones de monedas.

Dada la cantidad total y la posible denominación de monedas, ¿puede encontrar el método de recompensa con la menor cantidad de monedas?

Supongamos que aquí tenemos tres denominaciones de monedas, 2 yuanes, 3 yuanes y 7 yuanes. Para compensar la cantidad total de 100 yuanes, tenemos tres opciones.

El primer tipo, un total de 98 monedas de yuanes, más una moneda de 2 yuanes. Si el número mínimo de monedas para llegar a 98 yuanes es x_ {1}, entonces 2 yuanes adicionales son (x_ {1} + 1).

El segundo tipo, un total de 97 yuanes de monedas, más una moneda de 3 yuanes. Si el número mínimo de monedas para llegar a 97 yuanes es x_ {2}, entonces 3 yuanes adicionales son (x_ {2} + 1).

El tercer tipo es un total de 93 yuanes, más una moneda de 7 yuanes. Si la cantidad mínima de monedas para llegar a 93 yuanes es x_ {3}, entonces agregar 7 yuanes es (x_ {3} + 1).

Comparando el número total de monedas en los tres casos anteriores, el más pequeño es el número mínimo de monedas cuando la cantidad total es de 100 yuanes. En otras palabras, dado que la cantidad total de recompensas es fija, la denominación de la última moneda seleccionada determinará la cantidad hasta el paso anterior y también la cantidad mínima de monedas hasta el paso anterior. De acuerdo con esto, podemos derivar la siguiente ecuación de transición de estado:

Entre ellos, c [i] representa el número mínimo de monedas requerido cuando el total es i, donde j = 1,2,3, ..., n, representa n denominaciones de monedas, y el valor [j] representa la j-ésima moneda. Denominación c [i-values ​​(j)] representa el número mínimo de monedas hasta el paso anterior cuando se selecciona la jésima moneda. Cabe señalar que el valor i (j) debe ser mayor o igual que 0, y c [0] = 0.

Cada fila de la tabla representa la cantidad total de recompensas, las tres primeras columnas representan las denominaciones de las tres monedas y la última columna registra el número mínimo de monedas. "/" En la tabla significa imposible o insoluble.

Esta tabla de transición de estado también puede ayudarlo a comprender la corrección de la ecuación de transición de estado. Una vez que se determina la ecuación de transición de estado, no es difícil escribir código para implementarla.

Resumen

En primer lugar, si hay muchas posibilidades para un problema, parece que necesita usar la idea de permutación o combinación, pero al final, solo necesita encontrar una solución óptima (como valor mínimo, valor máximo, subcadena más corta, subcadena más larga, etc.), luego Es posible que desee probar si puede utilizar la programación dinámica.

En segundo lugar, la ecuación de transición de estado es la clave. Puede usar la tabla de transición de estado para comprender el proceso completo. Si puede encontrar la ecuación de transferencia exacta, entonces no está lejos de la implementación final del código. Por supuesto, la mejor manera es continuar practicando, probando y resumiendo en combinación con el proyecto en el trabajo.

Supongo que te gusta

Origin www.cnblogs.com/liugangjiayou/p/12689590.html
Recomendado
Clasificación