Primero, debe examinar las restricciones del problema para determinar si necesita una solución óptima o si una solución no óptima está dentro del rango de lo que desea.
Si no necesita una solución óptima, es de esperar que un algoritmo codicioso pueda obtener lo que desea: una solución que sea mejor que las que la rodean, pero no necesariamente la mejor. Por ejemplo, videojuegos AI y Apple Maps.
Si necesita una solución óptima, entonces no debería considerar un algoritmo codicioso. Si su problema es NP-complete, debería utilizar un solucionador NP-complete.
- En file.log, cada línea comienza con una marca de fecha completa. ¿Qué comando podría usarse para devolverme las líneas N-1, N y N + 1 con una diferencia de tiempo mayor que X segundos entre N y N + 1?
- He resuelto unos 52 problemas en SPOJ. ¿Debería mudarme a Codeforces ahora?
- ¿Hay alguna relación de recurrencia famosa aparte de Fibonacci?
- ¿Puedo usar mi algoritmo para ejecutar operaciones con Zerodha Kite Connect?
- ¿Por qué se utiliza la ordenación del montón?
Por ejemplo, si su software está tratando de sintetizar hardware de computadora y / o enrutar un programa a un FPGA, las soluciones subóptimas causarán malas velocidades de reloj y su software será extremadamente lento. Los sintetizadores de software generalmente usan un solucionador de ILP (programación lineal-entera), que es un solucionador de NP, como una caja negra mágica que puede encontrar la solución óptima si se ejecuta para siempre, pero puede encontrar fácilmente soluciones que eliminen los heurísticos. solucionadores basados en tiempo manejable.
El panorama general es realmente si desea un enfoque heurístico que simplemente arroje varios algoritmos a su problema para llegar a algo bueno, o si desea una solución declarativa que pueda modelar el problema y encontrar la solución óptima, pero es NP-complete para resolver y, por lo tanto, puede tomar una cantidad ilimitada de recursos para grandes espacios problemáticos.
Para una solución declarativa, las consideraciones de tiempo probablemente harán que finalice el programa antes de la solución óptima, pero puede destruir algoritmos codiciosos y, además, el código que escribe que modela el problema puede ser más reflexivo y mucho más conciso.