Digamos que quieres saber la menor cantidad de monedas con las que puedes hacer x centavos. Definimos que F es la función que asigna el número de centavos que tiene al número mínimo de monedas para esa cantidad y, por lo tanto, busca una expresión para F (x).
Consideremos la primera moneda en este conjunto mínimo de monedas. No sabemos qué tipo de moneda será, pero es uno de los tipos de monedas disponibles.
Así que probemos con todos los tipos de monedas posibles. Para cada valor de moneda monedas [i], consideramos tomar ese tipo de moneda. El número mínimo de monedas para obtener x centavos, teniendo en cuenta que primero tomaremos una moneda de valor de monedas [i], entonces sería 1 más el número mínimo de monedas necesarias para obtener x – monedas [i] centavos; es decir, F (monedas x [i]) + 1.
- ¿Vale la pena ir a una conferencia sin publicación?
- ¿Cuáles son los subcampos de IA más activos fuera de Machine Learning (en 2017)?
- ¿Cuál es la relación entre el aprendizaje automático y la filosofía de las matemáticas o la epistemología?
- ¿Cómo se usa una función hash en una tabla hash?
- ¿Cuál es una explicación intuitiva para la idea de que un cerebro es una computadora cuántica?
Sin embargo, no sabemos qué moneda debemos tomar, por lo que tenemos que calcular esta cantidad para cada i posible y luego tomar la mejor (la más pequeña) de esas. Por lo tanto,
F (x) = 0 si x = 0 (no necesita monedas para hacer nada)
F (x) = + inf si x <0 (imposible hacer una cantidad negativa)
De otra manera,
F (x) = min sobre todo i de 0 a monedas. Longitud -1 de (F (x-monedas [i]) + 1)
Entonces podemos evaluar esto de forma recursiva. Descubriremos que hay subproblemas superpuestos (muchos de los mismos casos se resuelven una y otra vez en el transcurso de la recursión), por lo que podemos usar la memorización para optimizar el tiempo de ejecución.
También podemos usar la programación dinámica de abajo hacia arriba al observar que F (x) siempre llama a F solo en valores menores que x, por lo que si comenzamos con F (1) y luego subimos de allí a F (2), F (3 ), F (4) etc. y mantener una tabla de valores de F calculados previamente, siempre sabremos los valores de F que necesitamos en cada cálculo.