¿Cuál es el mejor para resolver el problema: la programación dinámica o el enfoque codicioso?

En la mayoría de los problemas, su pregunta no tiene sentido, quiero decir que es muy raro encontrar un problema que pueda resolverse utilizando una técnica codiciosa y una técnica de programación dinámica.

Son dos pistas diferentes, dos tipos diferentes de técnicas que resuelven dos categorías diferentes de problemas, pero hay una pequeña superposición entre ellas, es decir, algunos problemas que pueden resolverse utilizando ambos métodos.

En caso de que haya una solución de programación dinámica y una solución codiciosa para el mismo problema, entonces decida qué usar en el problema en función de dos factores:

  1. El tiempo consumido por ambos algoritmos y el límite de tiempo que tiene.
  2. La memoria que necesitan ambos algoritmos y la memoria que tiene.

Por lo general, la programación dinámica necesita mucha memoria pero menos tiempo y los algoritmos codiciosos necesitan menos tiempo y menos memoria.
Por lo general, el algoritmo codicioso es mejor.

Pero también creo que no podemos decir esto con seguridad sin investigar el problema.

Espero que esto ayude.

Estos dos son paradigmas diferentes para resolver problemas y depende de la declaración del problema en la categoría a la que pertenece, por lo tanto, uno no podría decidir cuál es el mejor para resolver problemas, ya que los problemas resueltos con un enfoque codicioso pueden proporcionar una solución incorrecta si no pertenece a la categoría codiciosa como el problema (0/1) Mochila que cuando se resuelve con un enfoque codicioso proporciona una respuesta incorrecta. Una vez que se comprende el problema, decidimos si satisface las condiciones codiciosas o las propiedades de programación dinámica. La comparación entre diferentes conceptos no tiene ningún sentido, ya que un concepto se define a sí mismo bajo el cual se pueden aplicar todas las condiciones y tiene su propia singularidad para resolver los problemas en esas condiciones. La comparación para mí es como ::

Ambos se utilizan para mantener apretado el grupo de páginas, pero depende de las condiciones de cuándo usar qué. por ejemplo :: El lugar donde algunas páginas tienen que separarse del grupo original en esa posición usando la grapadora no haría las cosas bien para usted. Así, de la misma manera para resolver problemas correctamente, se deben seleccionar los paradigmas correctos.

Estas son dos técnicas algorítmicas diferentes. La forma en que diseñamos algoritmos está centrada en el problema . Es decir, explotamos las propiedades que tiene un problema . Algunas veces una técnica funciona y otra no. Los algoritmos codiciosos tienden a ser más eficientes que los algoritmos de programación dinámica, pero, por supuesto, solo puede usar estas técnicas en entornos muy específicos.

Para que un algoritmo codicioso resuelva un problema, el problema debe satisfacer la propiedad de elección codiciosa .

Para utilizar la programación dinámica, el principio de optimización debe mantenerse si desea resolver el problema.

More Interesting

¿Cuáles son los algoritmos comunes que uno debe conocer?

No soy bueno en algoritmos, pero estoy tratando de descubrir algo. ¿Cuáles son algunas técnicas o libros o alguna sugerencia?

¿Existe un algoritmo eficiente para enumerar todos los ciclos dentro del Componente fuertemente conectado de un gráfico dirigido?

¿Cuál es una forma rápida de factorizar números con 12 dígitos sin utilizar ningún algoritmo de división de prueba o Pollard-Rho?

¿Cómo funciona la revisión gramatical en Microsoft Word?

¿Cómo podrías escribir un programa que ingrese un número entero positivo N y genere el número de Fibonacci F2N?

Cómo crear un algoritmo que comprima el código binario

Cómo hacer que los algoritmos sean eficientes

¿Qué estructuras de datos usa MS Word para almacenar elementos del documento en la memoria?

¿Cuál es la complejidad Big-O de una búsqueda lineal?

¿Existe un algoritmo en línea para calcular la mediana de una secuencia de números si los elementos de la secuencia se pueden agregar o eliminar en cualquier momento?

¿Debería centrarme en el aprendizaje de algoritmos y estructuras de datos en profundidad, o aprender una habilidad como desarrollo web o desarrollo móvil usando Nanodegree?

¿Por qué es necesario un relleno de palabra no utilizado al comienzo del espacio de almacenamiento dinámico asignado?

¿Qué hago después cuando logré un programa de aprendizaje automático (supervisado) con un 97% de precisión y buen ajuste?

Si [matemática] f (n) [/ matemática] [matemática] \ en O (n) [/ matemática] y [matemática] g (n) \ en O (n) [/ matemática], es [matemática] f ( g (n)) \ en O (n ^ 2)? [/ matemáticas]