Tenga en cuenta que la mayoría de los problemas de optimización se pueden resolver con una estructura de árbol muy simple que explora todas las posibilidades. Por ejemplo, si desea crear un algoritmo de cambio, que calcule la menor cantidad de monedas de EE. UU. Comúnmente utilizadas para realizar el cambio, simplemente puede explorar todas las combinaciones posibles de monedas. Si se utilizara este algoritmo de árbol simple para calcular las monedas por $ .26, incluiría:
26 centavos (26 monedas)
21 centavos y 1 níquel (22 monedas)
16 centavos y 2 monedas de cinco centavos (18 monedas)
…
1 cuarto y 1 centavo (2 monedas)
Y una vez que se calculan todas las posibilidades, puede ver fácilmente que 2 monedas, el cuarto y el centavo juntos, es la solución óptima.
- ¿Existe un algoritmo para determinar el algoritmo óptimo para ordenar un conjunto de datos en particular?
- Ahora he leído sobre algoritmos y estructuras de datos como Al Klein me dijo. ¿Qué lenguaje de programación debo aprender?
- ¿Qué enfoque debe adoptar en la vida, un paradigma codicioso o un enfoque de programación dinámica?
- ¿Hay alguna estructura de datos que no se pueda representar dentro de una computadora?
- Cómo implementar el algoritmo
Entonces, ahora que ha creado un algoritmo para resolver su problema de optimización, puede comenzar la tarea de optimización. La optimización de un algoritmo basado en árbol gira en torno a dos cosas:
- El algoritmo debe adivinar dónde comenzar a buscar la solución óptima y comenzar allí.
- Las ramas enteras de soluciones no óptimas deben eliminarse lo más rápido posible sin evaluar todas las soluciones posibles.
Así que volvamos al algoritmo de hacer cambios. Este problema es lo suficientemente trivial como para dar un salto intuitivo: usar monedas grandes es mejor. Entonces, para la solución de $ .26, si comenzamos usando un cuarto para una de las monedas, podemos eliminar instantáneamente docenas de sucursales que usan monedas más pequeñas para obtener los primeros $ .25. Esto hace que el cálculo sea mucho más rápido.
Además, al hacer esto, estamos comenzando a acercarnos a la solución, porque sabemos que si alguna solución incluye una cuarta parte, entonces esa solución es mejor que todas las soluciones que no incluyen una cuarta parte. Comenzar con el tipo más grande posible que se ajuste es la base del “algoritmo codicioso”, que es uno de los algoritmos más comunes utilizados en la optimización.
La próxima vez que se encuentre con algún problema de optimización, primero considere si se puede resolver (de manera no óptima) mediante un árbol simple. Si es así, comience allí y luego optimice el algoritmo.
editar: La generalización de que las monedas más grandes siempre son mejores para el sistema de monedas de EE. UU., pero tal vez no para TODOS los sistemas de monedas (lea los comentarios para obtener más información). El algoritmo codicioso a menudo debe ajustarse a problemas individuales. Gracias Jimmy Kim por la captura.