Básicamente, mientras se prueba la corrección de los problemas, primero debe modelar el problema en la estructura que toma el problema.
Según yo hay 5 categorías principales: –
Avaricioso: estos son los problemas más directamente visibles y sus algoritmos generalmente toman un enfoque de toma de decisiones local para la solución.
Para probar la corrección, necesita usar algún argumento estándar (como la codicia se mantiene por delante). Este conjunto de argumentos se ajusta a la mayoría de los problemas.
Flujo de red y programación dinámica: – Estos problemas tienen la corrección asegurada por reducción. En términos generales, solo intenta describir por qué recibió la respuesta y, en la mayoría de los casos, es suficiente.
Nota: algunas veces el flujo de red también usa trucos como funciones potenciales.
Optimización continua : – Algunos algoritmos utilizan técnicas como la programación lineal y la prueba de la corrección es probar si la respuesta que obtiene es una respuesta válida.
Algoritmos aproximados: – Probar la corrección se vuelve un poco difícil. Como ahora tiene que demostrar que su algoritmo no puede ser correcto, pero el peor de los casos puede no llegar muy lejos. Sin embargo, los algoritmos aproximados utilizan un codicioso subyacente, LP (programación lineal) o programación dinámica.
Algoritmo aleatorizado: – Probar la corrección aquí también es muy similar a los algoritmos aproximados.
Como puede ver, los primeros tres se convierten en la base de la mayoría de las estructuras problemáticas (por lo tanto, la mayoría de las pruebas están relacionadas con ellas).
Sugeriría revisar algunos libros sobre algoritmos. El libro de Jon Klienberg y Eva Tardos es mi favorito. Sugeriría resolver todos los problemas de ejercicio.
Para entender cómo demostrar en casos de optimización continua. Sugeriría leer el libro de Stephan Boyd sobre optimización convexa.
Para los dos últimos temas, sugeriría revisar el libro El diseño y análisis de algoritmos aproximados.
¿Cuál es el mejor recurso para aprender sobre las pruebas de corrección para algoritmos?
Related Content
Cómo resolver problemas sobre el análisis de algoritmos paso a paso
Cómo estimar el orden de complejidad de una operación
Cómo analizar un archivo de texto en Python y obtener la suma de los números presentes en el archivo
Para comenzar, te sugiero que elijas un amigo y juegues el siguiente juego.
Elija un algoritmo y discuta con su amigo que le da la solución correcta. El motivo principal de su amigo será encontrar agujeros de bucle y cajas de esquina que no haya cubierto. A medida que se le ocurran estos casos, debe atender a ese caso. Este procedimiento finalmente se detendrá cuando se hayan llenado todos los agujeros en su solución (estoy usando la premisa simple aquí de que es más fácil encontrar casos descubiertos en lugar de mirar todos los casos que se han manejado).
Dale algunos días y pronto estarás en condiciones de jugar solo.
More Interesting
¿Cuál es la diferencia entre el aprendizaje PAC y el aprendizaje agnóstico PAC?
Criptografía: ¿Cuál es una explicación intuitiva del algoritmo de cifrado RC4 y sus debilidades?
¿Cuál es el mayor obstáculo para progresar en el aprendizaje profundo?
¿Cuáles son algunos tipos interesantes de algoritmos / métodos de licitación?
¿Es la teoría de la computación el tema 'inferior' de la informática?
¿Qué tipo de matemáticas usan los programadores de computadoras?
¿Por qué una función está tan definida?
Binario (sistema de números): ¿Qué sucede si un byte tiene 16 bits en lugar de 8?
¿Qué conceptos matemáticos difíciles se pueden entender fácilmente mediante la programación?
¿Cuál es el algoritmo más rápido para encontrar el número más grande en una matriz sin clasificar?