La mayoría de los problemas de programación competitiva se basan en algunos de los algoritmos bien conocidos sobre cadenas, teoría de gráficos, teoría de números y el arte de la programación dinámica. Algunos de los problemas también son ad-hoc, donde debe pensar en una solución en el acto, diseñar un nuevo algoritmo (puede ser mix-n-match en los existentes).
Eso fue desde la teoría y la perspectiva del tema. Ahora, llegando a señalar de qué se trata realmente ese problema y las habilidades necesarias para resolverlos. Muchas de estas preguntas parecen fáciles de ver y creemos que podemos resolverlas con bastante facilidad. Pero, luego vienen las restricciones, a saber, la memoria y los cálculos disponibles. Por lo tanto, el objetivo principal es realizar una tarea con una cantidad limitada de memoria y cálculos y pensar en la técnica de optimización para hacer un equilibrio entre dos.
La gente buena en codificación competitiva puede resolver muchos problemas de la vida real. Algunos de los ejemplos más famosos son:
1) La búsqueda de Google se basa en hash.
2) Los sitios de redes sociales se basan en gráficos y sus algoritmos para hacerlo más rápido.
- ¿Cuál es tu problema de programación dinámica favorito?
- ¿Cuáles son las aplicaciones del algoritmo de la Torre de Hanoi?
- ¿Qué algoritmo de clasificación es eficiente para grandes datos y por qué?
- ¿Existe un mapeo limpio de los ordenamientos de N objetos en la recta numérica?
- Cómo hacer un programa que imprima potencias de 2 hasta n en C ++
Ahora, llegando a la vida real que no sean problemas técnicos. Hay muchos problemas / desafíos que uno enfrenta en la vida. Puede dividir fácilmente cualquier problema en subproblemas y resolverlos uno por uno al involucrar un costo mínimo (el costo aquí significa tiempo / esfuerzo). Por lo tanto, puede resolver un problema con el mínimo tiempo / esfuerzo posible. Ese es el instinto básico de la codificación competitiva, basado en mi experiencia.