¿Cuál es el mejor recurso para aprender sobre las pruebas de corrección para algoritmos?

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.

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?

En informática y lógica matemática, ¿qué es la capacidad de decisión y en qué se diferencia de la capacidad de computación?

Debe encontrar para un número determinado de pulsaciones de teclas (N) el número máximo de caracteres 'A' que puede generar. Solo puede usar 4 teclas: A, Ctrl + A, Ctrl + C y Ctrl + V. Solo se permiten N pulsaciones de teclas. ¿Puedes escribir este programa?

¿Es la teoría de la computación el tema 'inferior' de la informática?

Cómo usar el lema de bombeo para demostrar que [matemáticas] A = \ {www \ mid w \ in \ {a, b \} ^ * \} [/ matemáticas] no es un lenguaje normal

¿Qué tipo de matemáticas usan los programadores de computadoras?

¿Qué es un gráfico cíclico?

¿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?

¿Podría un genio aleatorio resolver el problema P vs NP o pasará a través de avances muy lentos en la ciencia por un grupo de personas que trabajan juntas?

¿Cuál es el algoritmo más rápido para encontrar el número más grande en una matriz sin clasificar?