La programación dinámica no es difícil de entender.
Todo lo que necesitas hacer es practicar .
Los problemas de DP requieren que detecte el subproblema subyacente para que pueda memorizarlos o repetirlos. La clave es encontrar el subproblema recurrente y esto requiere práctica, cuanto más practiques más fácil será detectar subproblemas.
Los problemas de DP a menudo son difíciles y complicados, no puede simplemente aprender cuáles son e implementarlos directamente, aprender resolviendo las preguntas.
Programación dinámica de TopCoder: de principiante a avanzado, explica DP al resolver preguntas.
Programación Dinámica | El conjunto 1 GeeksforGeeks explica los diferentes tipos de programación dinámica, comience haciendo el conjunto 1.
DP no es un algoritmo, es una técnica para resolver problemas y por eso requieren práctica. Sigue practicando y comenzarás a resolver problemas por tu cuenta en poco tiempo.
- ¿La matriz de Java de primitivas se almacena en la pila o el montón?
- ¿Cuál es el equivalente binario de -2?
- ¿Cómo funciona el algoritmo de Youtube en términos de tendencias de un video?
- ¿Cómo recomienda Foursquare las sugerencias de mis amigos de Facebook?
- ¿Qué algoritmos usa Quora para restringir que el contenido de ciertos escritores se transmita tanto como otros?
Lea el capítulo de programación dinámica de Introducción a los algoritmos de Cormen y otros. Debe comprender la teoría de dividir un problema en subproblemas, almacenar los resultados intermedios en la matriz y ver cómo se resuelven algunos problemas estándar con DP.
Hay más tipos de problemas de programación dinámica. Aquí están los más famosos, ordenados según su dificultad:
- Problemas que simplemente le piden que se le ocurra la fórmula de calcular la respuesta de los subproblemas. Estos son los más comunes y probablemente los que desea practicar (más del 95% de los problemas de DP son de este tipo). En TopCoder, generalmente se clasifican como Div1-500 y más fáciles. En otros jueces en línea, simplemente busque los problemas con muchas soluciones exitosas.
El número de dimensiones de la matriz realmente no dice mucho acerca de la dificultad del problema, así que no juzgues en base a eso. Solo necesita un poco más de implementación.
Los problemas más difíciles en esta categoría requieren que use máscaras de bits. Por ejemplo:
http://community.topcoder.com/st…
Aquí hay un tutorial muy bueno sobre técnicas de manipulación de bits:
http://community.topcoder.com/tc… - Problemas que requieren que se te ocurra una recurrencia lineal eficiente, poner la recurrencia en la matriz y calcular la enésima potencia de la matriz. Ejemplos son:
http://www.spoj.pl/problems/XORR…
http://www.spoj.pl/problems/TRKN…
http://www.spoj.pl/problems/RP/ - Problemas que requieren que elimines el ciclo interno en el algoritmo. Para obtener más información, puede consultar la aceleración de Knuth para calcular el árbol de búsqueda binario óptimo (http://dl.acm.org/citation.cfm?i…) o:
http://community.topcoder.com/tc… - Problemas que requieren que usted calcule y opere efectivamente en el casco convexo de las soluciones óptimas. Para un buen problema con una solución, mire el problema Harbingers de CEOI 2009. Otros ejemplos son:
http://www.spoj.pl/problems/MKPA…
http://www.spoj.pl/problems/NKLE…
http://www.spoj.pl/OI/problems/C…
Solo recuerda una fórmula simple
“Cuanto más practiques, mejor serás”
No lleves mucha carga. Comience con preguntas simples y cuando pueda comprender las preguntas, pase a preguntas difíciles.
Sea regular : cuanto más tiempo dedique a los problemas, mejor lo comprenderá y después verá cambios en usted.
Fuente :
- ¿La programación dinámica es difícil de aprender?
- ¿Cuáles son las formas sistemáticas de prepararse para la programación dinámica?