Ambos son en realidad lo mismo. La programación competitiva definitivamente te obliga a pensar de manera diferente, a veces fuera de la caja. Las restricciones mantenidas en cada problema están muy bien pensadas para obtener soluciones óptimas.
Hay muchos algoritmos estándar en los que las preguntas a menudo se basan en programación dinámica, algoritmos de gráficos y algoritmos de cadena. Sin embargo, es muy poco probable que la pregunta exija una implementación directa de algoritmos conocidos (también debido al hecho de que los programadores son inteligentes googlers también). En la mayoría de los casos, los algoritmos conocidos están un poco torcidos e implementados (lo que lo obliga a pensar). Esto se hace para garantizar 2 puntos:
- Realmente entiendes el funcionamiento del algoritmo en cada fase.
- Pasas un tiempo considerable pensando y ejercitando tu cerebro.
Pero hay varias preguntas sobre combinatoria, manipulación de bits y matemáticas para las cuales no se conoce un algoritmo y el programador tiene que pensar para obtener la solución óptima.
- Si usamos un algoritmo np para el problema del vendedor ambulante donde la gente va en cada ruta. ¿Por qué hay 2 ^ n personas en total? ¿Es porque una persona está viajando una ruta o no está viajando una ruta?
- ¿Cuáles son algunos algoritmos utilizados por las grandes empresas (como Amazon) para determinar de manera eficiente desde qué almacén se debe cumplir un pedido?
- ¿Cuáles son las ventajas y desventajas de comparar la búsqueda de árboles de Monte Carlo y la programación dinámica aproximada?
- ¿Debo aprender algoritmos primero antes de aprender programación? Si es así, ¿cuál es la mejor manera de aprender algoritmos?
- Cómo imprimir un elemento emergente en la pila
Por lo tanto, tanto los hechos como el pensamiento y la modificación de algoritmos conocidos son difíciles de separar, van de la mano entre sí.