¿La programación competitiva se volverá aún más difícil?

TL; DR: No debería, pero lo hará.

Miremos esta pregunta desde una perspectiva diferente. ¿Cuáles son las consecuencias de ampliar el conocimiento requerido para la programación competitiva (CP).

  1. Hay más libertad para los creadores de problemas al crear problemas.
  2. La curva de aprendizaje es más pronunciada para los competidores. Simplemente hay más cosas que aprender para desbloquear todo su potencial. Esto también significa que el CP es menos accesible para los principiantes (algo malo para la popularidad).
  3. El conocimiento algorítmico avanzado de CP ya es una especialización tan estrecha que la mayor parte es un desperdicio. Las habilidades de resolución de problemas adquiridas, por otro lado, son realmente invaluables fuera de la PC. Mientras más tiempo tenga para invertir en el aprendizaje, menos tiempo tendrá para practicar sus habilidades para resolver problemas.
  4. Algunas de las técnicas pueden crear más diversidad en los problemas y posibles enfoques al resolverlos. Por lo tanto, mejorar la experiencia de resolución de problemas.
  5. Muchos de los algoritmos más avanzados requieren una implementación más larga o, como alternativa, la inclusión de una biblioteca preescrita. Ambos no son deseados.
  6. Muchas de las técnicas avanzadas requeridas son imposibles de resolver por su cuenta, lo cual es un gran problema en caso de que dicha técnica sea absolutamente necesaria para resolver el problema (y al mismo tiempo, saber que hace que el problema sea trivial).

Hay pocos más, pero esa lista ya es lo suficientemente larga. Analicemos esta lista desde el punto de vista de la competencia. Como el n. ° 1 nos afecta solo indirectamente, lo dejaré fuera por ahora. Solo el # 4 es claramente positivo, los otros puntos hacen que nuestra experiencia sea más tediosa y (para la mayoría de nosotros) menos divertida. Para resumir las cosas: si se agrega un nuevo elemento a nuestro vocabulario cada vez mayor de algoritmos / teoremas / técnicas, y no está justificado por el n. ° 4, es una mala decisión. En términos de diseño del juego, aumenta la complejidad sin aumentar la profundidad.

Entonces, dado que esto es tan malo para los competidores, ¿por qué sucede? # 1 es la única razón. Cada nueva semana, se crean docenas (o incluso cientos) de nuevos problemas. Cada creador de problemas quiere crear un problema original y desafiante. Es mucho más fácil lograr esto, cuando no tiene que restringir sus problemas a ciertos dominios. Los problemas nuevos a menudo se inspiran en los antiguos, por lo que cuando un nuevo algoritmo llega a CP, la probabilidad de repetir un problema que lo requiere es mucho mayor. Después de algunos casos, muchas personas (especialmente las de arriba) lo considerarán una técnica estándar para la PC.

Solo se necesita un hombre para introducir una nueva técnica para CP. Se necesita toda la comunidad para detenerlo. Entonces, incluso si introducir cosas nuevas es generalmente malo para la comunidad CP, realmente no podemos hacer nada al respecto.

Estoy bastante seguro de que la mayoría de los algoritmos “convencionales” en la programación competitiva ya se inventaron hace 10 años. Y para estos algoritmos que no se inventaron en ese momento, generalmente puede resolver un problema utilizando algún otro algoritmo.

La programación competitiva definitivamente se volverá “más difícil” en el futuro. Con “más difícil” quiere decir: cuán difícil será alcanzar el nivel más alto, cuán buenos / impresionantes resultados serán, cuán apretada será la competencia, ¿verdad? Desde este punto de vista, sí, será más difícil; se desarrollará, de la misma manera que cualquier deporte o actividad competitiva. Hay dos razones principales para ello: por un lado, se vuelve más popular, con más personas involucradas en él, y aumenta el número esperado de personas con un nivel de al menos X, incluso sin cambios en el proceso de preparación; Por otro lado, es obvio que los esquemas de entrenamiento, las formas de preparación para las competencias también evolucionarán, alcanzar el nivel X será más fácil y requerirá menos esfuerzo. Podemos ver qué tan rápido aumenta hoy el número de conferencias, editoriales y libros disponibles. Algunos de ellos son basura completa, pero otros son lo suficientemente buenos como para ayudarlo con su preparación. Para cualquier tipo de deporte, su metodología mejora con el tiempo. ¿Por qué debería ser de otra manera en la programación competitiva?

Tomemos la natación como un ejemplo. Hace 100 años, el récord mundial en 100 metros de estilo libre era de alrededor de 1:02 . Ahora está por debajo de 0:47 , y si nadas en 1:02, probablemente ni siquiera eres el mejor en tu ciudad. Creo que deberíamos esperar las mismas tendencias aquí.

Hace 10 años no había mucha gente haciendo ningún entrenamiento algorítmico. Hoy en día, su número es mucho mayor, pero aún puede asistir a concursos como ACM ICPC WF sin entrenamientos regulares. Creo que cambiará en el futuro 🙂

Hablar sobre problemas cada vez más difíciles: nadie sabe cómo cambiarán las cosas con el tiempo. Hace 20 años era popular dar basura de implementación en lugar de tareas creativas algorítmicas . Algo así como pintar cuadros con arte ASCII 🙂 Para algunas personas será más fácil porque es simplemente “hacer lo que dice la declaración”, y tales tareas no requieren un conocimiento específico. Para otras personas, tales tareas son más difíciles: prefieren ideas algorítmicas claras y bellas con una realización simple. Tal vez en el futuro los concursantes puedan resolver básicamente todo, y veremos una mejora en la velocidad en lugar de aumentar la dificultad: las personas se centrarán en resolver los problemas lo más rápido posible. ¿Quién sabe? .. Esperemos y veamos 🙂

Volviendo a nuestra analogía con la natación, ¿diría que es más difícil aprender a nadar hoy, en comparación con 1915, solo por saber que los mejores resultados evolucionaron de 1:02 a 0:47 ahora?

Personalmente, creo que se está volviendo “más difícil” porque los temas que necesita saber están aumentando: el programa IOI no deja de crecer.

Creo que aparecerán más y más algoritmos en las preguntas (al igual que los árboles Fenwick se usan ahora en CP mientras solo se inventaron en 1994)

La razón principal es simple: los concursantes entrenan más y más, por lo que necesitas preguntas más difíciles para entretenerlos 😀

Pero lo que significa es que tendrás que entrenar aún más para ser bueno …

More Interesting

¿Los algoritmos de aprendizaje profundo representan métodos basados ​​en conjuntos?

Como estudiante de primer año de una sucursal que no es CS en un IIT, ¿cómo domino las estructuras de datos, los algoritmos y el aprendizaje automático por mi cuenta?

Algunos dicen que después de haber trabajado como desarrollador durante 2 años más o menos, debería poder pasar a un nuevo trabajo sin preguntas de algoritmos, ¿verdad?

¿Cuál es el mejor algoritmo de programación que hayas creado?

¿Qué algoritmos de minería de datos puedo usar para maximizar las ganancias de una compañía de tarjetas de regalo que almacena ventas, pedidos y datos de clientes en una base de datos relacional?

Cómo ordenar una matriz de vectores de pares, es decir, vector <par v [N], en C ++

¿Cómo funciona el algoritmo de búsqueda de ciclo de Floyd? ¿De qué manera mover la tortuga al comienzo de la lista vinculada, mientras se mantiene a la liebre en el lugar de reunión, seguido de mover un paso a la vez, hace que se encuentren en el punto de inicio del ciclo?

¿Cómo idearé un algoritmo eficiente para determinar todos los cursos que debo tomar antes de un curso en particular sin un orden topológico?

¿Qué modelo / algoritmo de ML utilizo para mi proyecto?

¿Son los sentimientos la función del costo del algoritmo de aprendizaje automático de los humanos?

Dados n puntos en un plano 2D, ¿cómo encontrarías el número máximo de puntos que se encuentran en la misma línea recta? Proporcione un algoritmo para resolver este problema.

Soy un desarrollador web que trabaja en el marco Python Django durante el año pasado. ¿Puedo aprender estructuras de datos y algoritmos si paso solo 2-3 horas diarias?

¿Por qué es importante el crossover en el algoritmo genético?

¿Cuál es la diferencia entre recursividad e iteración?

Dada una cuadrícula N-por-M llena de números positivos, ¿cuál es el mejor programa para encontrar la ruta de arriba a la izquierda a la derecha que minimiza la suma de todos los números?