¿Cómo planificarías un campamento de algoritmos y estructuras de datos de un mes?

No estoy seguro de qué cantidad de detalles estás buscando, pero seguiré adelante y daré todo lo que pueda. Asumiré ciertas cosas sobre sus estudiantes, incluso si las suposiciones son incorrectas, implican habilidades fundamentales muy pequeñas que se pueden enseñar en una sola o más de dos sesiones.


Como usted dice que tienen habilidades preliminares, supongo que pueden resolver problemas simples como encontrar min, max en una matriz, encontrar la suma de todos los números, media, mediana, modo. Tenga en cuenta que deberían poder identificar estos conceptos incluso cuando se les presenta una historia de fondo. Porque las preguntas en las competiciones algorítmicas no serán sencillas, sino que estarán disfrazadas. El diablo está en los detalles. Sus alumnos deberían poder identificar la pregunta subyacente sin distraerse con la historia que gira en torno al problema.

Por ejemplo, tome este problema de muestra

John Galt es un turista que visita la India en un recado oficial. Su visa le permite quedarse 10 días más, por lo que decide viajar por el país en esos 10 días. El único problema con el plan de John Galt es que su compañía le otorga una asignación de $ 1000 dólares y no quiere gastar de su bolsillo. De repente, John recuerda que le prometió a su hijo un regalo de Navidad y decide que puede comprarle un regalo mejor de lo que podría si ahorra algo de dinero de la asignación de viaje.

John decide idear un plan. Pide a su guía local que planifique su viaje de la siguiente manera: su guía hace una lista de las ciudades que John puede visitar junto con la cantidad de dinero que John tiene que gastar si decide visitar la ciudad. John trabaja para una empresa de turismo y se encargan de los gastos de viaje locales. Se le da una matriz entera [matemática] A [/ matemática] de tamaño [matemática] N [/ matemática] donde [matemática] A [i] [/ matemática] representa la cantidad que John tiene que gastar si decide visitar el [matemáticas] i ^ {th} [/ matemáticas] ciudad. ¿Puedes ayudar a John a decidir la cantidad que le costaría visitar las 10 ciudades menos costosas? También hágale saber cuánto ahorraría en su asignación.

Sus alumnos deberían poder resolver este problema. Deben poder decidir que la historia es irrelevante y todo lo que tiene que hacer es ordenar la matriz en orden ascendente y agregar los primeros 10 elementos. Restan esa cantidad de $ 1000 e imprimen la respuesta. Es solo un problema que inventé ahora por el bien de esta respuesta. Puede ser que puedas usar el mismo ejemplo. Estoy seguro de que puedes encontrar un problema mejor.

Si sus alumnos pueden resolver este problema, entonces están listos para asumir desafíos algorítmicos.


Lo siguiente puede ser su horario. Es solo una sugerencia, siéntase libre de hacer cambios en el tiempo dedicado o el orden de los temas y cómo lo desee.

  • C ++ es tu mejor apuesta. Es el lenguaje más preferido para la programación competitiva también. Enséñeles a usar la Biblioteca de plantillas estándar. Los conceptos básicos deben tomar solo dos o como máximo tres sesiones. Una vez que les diga cómo funciona y cómo pueden simplemente llamar a las funciones, deberían poder descubrir nuevas funciones por su cuenta. Puede enseñarles cómo usar funciones básicas de STL como ordenar, invertir, usar vectores, mapas y conjuntos. Enséñeles cómo usar la manipulación de bits (aunque en mi opinión, esto puede esperar hasta que se sientan cómodos para resolver problemas rápidamente).
  • Preséntales a los concursos de TopCoder Highschool. (Estadísticas de TopCoder). Haz que resuelvan los problemas de 250 puntos durante unos días. Estos problemas son de gran dificultad para no abrumarlos, pero al mismo tiempo representan un desafío decente para que se sientan bien consigo mismos después de resolver un problema.
  • Una vez que se sientan cómodos con eso, preséntelos a niveles más altos de dificultad (problemas de 500 y 1000 puntos). Aunque dudo que puedan resolver los 1000 indicadores dentro del verano, algunos estudiantes que tienen curiosidad podrían intentarlo y eso es algo muy bueno.
  • Mientras tanto, enséñeles matemáticas básicas, lo más importante, teoría de números. Ya estarían familiarizados con conceptos fundamentales como GCD, LCM, etc. Muéstreles dónde se aplican. Intenta hacer que escriban pruebas. Intenta hacer que visualicen los problemas sin resolverlos. Al principio será difícil, pero a la larga ayudaría mucho.
  • Si desea seguir un programa de estudios, use esto como referencia: Programación del programa de campamento. Pero comprenda que la mayoría de los temas en el programa de estudios está mucho más allá del alcance de un estudiante de secundaria.
  • La mayoría de los problemas en la competencia de la escuela secundaria de TopCoder se trata de traducir el pensamiento al código. Entonces eso los preparará bien. Si pueden entender la pregunta y encontrar una respuesta a los casos de prueba básicos, definitivamente pueden traducirla al código cada vez más rápido a medida que se sientan cómodos con el código.
  • No uses Turbo C ++. Enséñeles a usar un buen ide. Code :: Blocks, el editor de texto del que te enamorarás son dos editores increíbles. Enséñeles buenas prácticas de programación como nombrar variables correctamente, etc. Si aprenden esto lo suficientemente temprano, nunca escribirán código suelto.
  • En la última semana de su campamento (o 2/3 semanas antes de que termine), enséñeles programación dinámica. Intente hacer que resuelvan problemas simples de DP estándar, primero en papel y luego en código.
  • Sería de gran ayuda si usted mismo es un programador competitivo. Sigue desafiándolos constantemente. Siempre piense que pueden resolver los problemas mucho mejor de lo que cree que es su estándar, solo tiene que motivarlos y hacer que comprendan los conceptos de la manera correcta.

Buena suerte y si es posible, dígame en la sección de comentarios de esta respuesta cómo los estudiantes disfrutaron el campamento de programación. Estás haciendo una gran cosa, me hace muy feliz. Si lo haces de la manera correcta, estos niños lo recordarán por mucho, mucho tiempo.