¿Cuáles son las mejores fuentes para practicar problemas de programación dinámica?

Solía ​​tener bastante miedo a los problemas de programación dinámica en las entrevistas, porque este es un tema avanzado y muchas personas me han dicho lo difíciles que son. A primera vista, son desafiantes y más difíciles que la mayoría de las preguntas de la entrevista. Sin embargo, puedo decir que finalmente lo supere y me permita compartir mi experiencia.

En primer lugar, creo que es extremadamente importante tener claro qué es la programación dinámica. Veo que muchas personas comienzan a practicar con problemas, pero se atascan al preguntar qué es realmente la programación dinámica. Con eso en mente, he realizado muchas búsquedas en Google sobre preguntas como la diferencia entre DP y recursividad, cuándo usar programación dinámica, etc. Si solo lee un par de hilos en Stackoverflow, rápidamente obtendrá una mejor comprensión del tema.

En segundo lugar, aunque la programación dinámica es difícil en general, pero no puede ser muy difícil en las entrevistas (en la mayoría de los casos). He visto tantos problemas difíciles en TopCoder y para algunas preguntas, ni siquiera puedo entender la solución. Sin embargo, este no es el caso en las entrevistas en general porque solo tiene una hora y las preguntas que son demasiado difíciles no serán resueltas por nadie.

Como resultado, con un poco de práctica en las preguntas de la entrevista DP, descubrí que la mayoría de ellas son bastante similares en algunos aspectos y, por lo general, con una sola matriz como memorización, puede convertir fácilmente una solución de recursión en un enfoque de programación dinámica. He aprendido mucho de Una guía paso a paso para la programación dinámica.

Además, tuve una entrevista simulada sobre Gainlo de un entrevistador de Facebook y recibí toneladas de sugerencias no solo para una programación dinámica, sino también para la preparación de la entrevista en general.

Yo diría que no se preocupe demasiado por este tema, ya que es mucho más fácil de lo que la mayoría de la gente pensaba. Además, con suficiente práctica, descubrirá el patrón.

http://Www.hackerrank.com
http://Www.topcoder.com
http://Www.codechef.com
Hackerrank tiene una sección adecuada relacionada con la programación dinámica.
Para topcoder y codechef puede buscar en sus archivos con la etiqueta “dinámico” o “dp”, estoy seguro de que obtendrá las preguntas que está buscando.

Actualizar:
Encontré este sitio Concursos virtuales en línea que tiene una lista realmente grande de problemas de DP categorizados según un nivel. Es toda una colección de problemas de DP de otros sitios.

PD: sugiera otros enlaces para actualizar con

Libro de programación competitiva segunda edición (ahora tercera), Steven y Felix Halim!

Allí encontrará muchos problemas del juez en línea de UVA relacionados con DP.

¡Deberías echar un vistazo allí! 😉

Puede consultar Techie Delight para problemas interesantes de DP y sus soluciones. Incluso han dividido los problemas de DP en archivos de Tabulación (Enfoque ascendente) y Memoización (Enfoque descendente).

Aquí está la lista completa:

  1. Introducción a la programación dinámica
  2. Subsecuencia común más larga | Introducción y longitud de LCS
  3. Subsecuencia común más larga | Versión optimizada para espacio
  4. Subsecuencia común más larga de secuencias K
  5. Subsecuencia común más larga | Encontrar todos los LCS
  6. El problema de subcadena común más largo
  7. La subsecuencia palindrómica más larga usando programación dinámica
  8. Problema de subsecuencia repetida más larga
  9. Implementar la utilidad Diff
  10. Supersecuencia común más corta | Introducción y longitud SCS
  11. Supersecuencia común más corta | Encontrar todos los SCS
  12. Supersecuencia común más corta | Usando LCS
  13. Subsecuencia creciente más larga usando programación dinámica
  14. Subsecuencia bitónica más larga
  15. Subsecuencia creciente con suma máxima
  16. El problema de la distancia de Levenshtein (Editar distancia)
  17. Encuentre el tamaño de la submatriz cuadrada más grande de 1 presente en una matriz binaria dada
  18. Multiplicación de cadena matricial
  19. Encuentre el costo mínimo para llegar a la última celda de la matriz desde su primera celda
  20. Encuentra la secuencia más larga formada por números adyacentes en la matriz
  21. Cuente el número de rutas en una matriz con un costo dado para llegar a la celda de destino
  22. 0-1 problema de mochila
  23. Maximiza el valor de la expresión
  24. Problema de partición
  25. Problema de suma de subconjunto
  26. Problema de partición de suma mínima
  27. Encuentra todas las cadenas binarias de N dígitos sin ningún 1 consecutivo
  28. Corte de varilla
  29. Máximo corte de varilla de producto
  30. Problema de cambio de monedas (suministro ilimitado de monedas)
  31. Problema de cambio de moneda: encuentre el número total de formas de obtener la denominación de monedas
  32. La subsecuencia alterna más larga
  33. Cuente el número de veces que aparece un patrón en una cadena dada como una subsecuencia
  34. Recoge los puntos máximos en una matriz satisfaciendo las restricciones dadas
  35. Cuente el total de combinaciones posibles de números de N dígitos en un teclado móvil
  36. Encuentre el costo óptimo para construir un árbol de búsqueda binario
  37. Word Break Problem
  38. Coincidencia de patrones comodín
  39. Encuentre la probabilidad de que una persona esté viva después de dar N pasos en la isla
  40. Calcular la suma de todos los elementos en una submatriz en tiempo constante
  41. Encontrar la suma máxima de la submatriz K x K en una matriz M x N dada
  42. Encuentra la submatriz de suma máxima presente en una matriz dada
  43. Encuentra la suma máxima de subsecuencia sin elementos adyacentes
  44. Problema de submatriz máxima (algoritmo de Kadane)
  45. Senderos más cortos de una sola fuente: algoritmo Bellman Ford
  46. Caminos más cortos de todos los pares – Algoritmo de Floyd Warshall

La programación dinámica requiere buenos conocimientos básicos sobre los casos básicos para relacionarlo con el problema que está resolviendo.

Antes de llegar a la fase de resolución de problemas, comprenda los conceptos a fondo, uno debe referirse a las fuentes como la serie de conferencias de programación dinámica del MIT, la serie de conferencias de programación dinámica Saurabhschool.

Una vez hecho esto, el mejor recurso para obtener un buen control sobre DP es practicar los problemas de Hackerrank y GeeksForGeek

Tuve que escribir los sistemas de ecuaciones para estos problemas en la tarea y en las pruebas. Terminé las pruebas de 2 horas en 15 minutos y salí de la habitación.

Mi especialidad fue SSM (Sistemas de Ciencias y Matemáticas) en la Universidad de Washington en St. Louis, 1972-1975, y el trabajo que hice, mis profesores escribieron los documentos y obtuvieron el crédito por ello. No me importó y todavía no.

La mejor información que tengo es que una supercomputadora Karmarkar (Narendra Karmarkar) es la mejor plataforma para esto ahora.

Aunque está destinado a resolver problemas de programación lineal en tiempo polinómico, su mal uso causó el viernes 13 el mini accidente en 1989, que yo sepa.

Realmente no sé qué es la programación dinámica.

Más de 50 problemas de programación dinámica y su implementación por Dheeraj Kuamar en GeeksforGeeks

https://uva.onlinejudge.org/inde

Aquí encontrará algunos problemas DP importantes e interesantes. Estos problemas son apropiados para comenzar a aprender DP.

Puedes comenzar con Hackerrank:
HackerRank
Contiene una sección bien organizada con un nivel de dificultad creciente.

TopCoder es probablemente con los mejores problemas.
Eche un vistazo a SPOJ o Timus Online Judge.

More Interesting

Solicité un puesto de Platform Engineering C ++ en Mozilla, recibí un desafío (esperaba una entrevista) pero uso C. ¿Cómo puedo prepararme?

¿Cuál es la mejor estrategia para resolver los problemas de LeetCode?

¿Cuáles son algunos proyectos de C ++ que puedo hacer para mejorar mi conocimiento de la estructura de datos y ayudarme en entrevistas técnicas?

¿Son fáciles las entrevistas de programación?

¿Cuáles son los beneficios de codificar en una pizarra durante una entrevista? ¿Por qué es eso mejor en comparación con la codificación en un IDE?

¿Cuál es el contenido teórico de información de las monedas y el acertijo de escala?

¿Por qué las empresas tecnológicas no realizan entrevistas de codificación en una computadora portátil o una PC?

¿Cuáles son algunas preguntas comunes en una entrevista de cuatro grandes?

Irracionalmente veo que ser un ingeniero de Google es el "trabajo soñado". ¿Cómo puedo convencerme de que no tiene nada de especial?

Si mi currículum es débil, ¿qué puedo tener en mi cuenta de GitHub para ser contratado como desarrollador de software básico?

¿Debo escribir un javadoc durante una entrevista de codificación?

¿Es malo usar funciones de lenguaje integradas en entrevistas técnicas?

Dada una matriz arr [0 ... n-1], ¿cómo calculo arr_low [0 ... n-1] eficientemente st arr_low [i] = número de elementos menor o igual que arr [i] en arr [i + 1 ... n-1]?

¿Por qué no puedo conseguir un trabajo de desarrollador front-end simplemente por una entrevista técnica, a pesar de haber trabajado 6 años como desarrollador y sé lo que estoy haciendo?

Dada una matriz entera, ¿cómo podemos verificar si cada suma acumulativa es divisible por 2 o no usando XOR?