Cómo gané 3 de 4 medallas de oro en la Olimpiada de Computación

imagen

Me estaba preparando para la final de la Copa Mundial de Google HashCode 2017. Este es el concurso más grande con problemas algorítmicos organizado por Google.

Empecé a aprender C ++ desde cero en noveno grado. No sabía nada sobre programación, algoritmos y estructuras de datos. En algún momento, escribí mi primera línea de código. Siete meses después, los Juegos Olímpicos de programación se vislumbraban en el horizonte. Quería saber qué tan bien funcionaba mi estilo de programación de aprendizaje. Fue una oportunidad ideal.

Después de dos días de competencia, llegaron los resultados: gané una medalla de oro.

Estaba en shock Me adelanté a los competidores con 5 años de experiencia. Sabía que trabajaba duro, pero este logro superó todas mis expectativas. Me di cuenta de que la programación deportiva es mi tema y entré en ello con la cabeza.

Sé lo que me llevó al éxito y quiero compartir esto contigo.

Software EDISON - desarrollo web
Este artículo fue traducido con el apoyo del software EDISON, que se ocupa de la salud de los programadores y su desayuno , y también desarrolla software personalizado .


Qué lenguaje de programación elegir


  • C ++ - ¡Muy recomendable! El es muy rápido. La implementación de los algoritmos lleva poco tiempo debido al STL. C ++ es aceptado en todas las competiciones. Escribí mi primera línea de código en C ++.
  • C - aprende C ++ debido a STL. Si conoce C, también puede programar en C ++.
  • Java es un lenguaje de programación lento. Tiene una clase Big Integer, pero realmente no te ayuda. Si la competencia tiene un límite de tiempo, probablemente lo supere con Java. Java no se acepta en todas las competiciones.


Donde puedes practicar


Recomiendo Sphere Online Judge (SPOJ) . Es un recurso efectivo en términos de cantidad y calidad. Los editores y las soluciones están disponibles en línea si está atrapado en el proceso de resolución de problemas. Además de este sitio, recomiendo el SPOJ Toolkit y el clasificador de problemas para SPOJ.pl.

Primero, necesitas perfeccionar lo básico


Una vez que te acostumbres a la sintaxis del lenguaje, tendrás que resolver algunos problemas. Comience con problemas simples que requieren práctica. En esta etapa, lo principal es determinar su estilo de programación. Tal vez te guste escribir código con muchos espacios, o tal vez no. Quizás coloque los corchetes en la misma línea que el "si", o puede ponerlos en líneas separadas.

Tienes que encontrar tu estilo de programación porque es TU estilo.

Cuando lo busques, no olvides dos principios básicos:

  • Su código debe ser fácil de implementar. Debe sentirse cómodo implementando la solución que se le ocurrió. Por qué Porque durante la competencia, lo último que quieres es perderte en tu código. Siempre es mejor pensar en cómo simplificar la implementación del código, que dedicar 10 minutos a resolverlo.
  • Su código debe ser fácil de leer. Cuando el código es fácil de leer, es fácil de depurar. Seamos realistas: los errores aparecen constantemente. ¿Conoces la sensación misma cuando faltan 10 minutos para el final y no puedes encontrar el maldito error? Por supuesto que lo sabes. Para evitar esta situación, escriba un código legible. Cuando comience a depurarlo, el código parecerá natural y fácil de entender.


Aquí hay un ejemplo de mi estilo de programación.

Cómo mejorar tus habilidades de desarrollo


Practica, practica y practica de nuevo. Le recomiendo que trabaje en las primeras 250 de las tareas más resueltas en SPOJ . Resuélvelas en orden. Tómese al menos una hora para reflexionar sobre las soluciones para cada uno de ellos.

No diga: "Este problema es demasiado complicado para mí, intentaré resolver lo siguiente". Así piensan los perdedores.

Toma un pedazo de papel y un lápiz. Piensa en eso. Tal vez puedas encontrar una solución, o tal vez no. Como mínimo, desarrollará un pensamiento algorítmico. Si no puede encontrar una solución en una hora, busque una solución preparada en el foro o en los artículos.

¿Qué vas a lograr con este enfoque? Aprenda a implementar rápidamente sus ideas con código. Y aprende problemas y algoritmos clásicos.

En segundo lugar, debe dominar los algoritmos y las estructuras de datos.


Sigue un enfoque jerárquico. ¿Empezaste a correr sin caminar? No ¿Se puede construir un rascacielos sin una base sólida? No otra vez

No puede ignorar los pasos en la ruta de aprendizaje. Si los ignora, todavía tendrá lagunas de conocimiento. Con el tiempo, solo empeorarán.

Comience con algoritmos fundamentales y estructuras de datos.


Es difícil comenzar. Quizás porque no sabes qué estudiar primero. Por lo tanto, creé un video curso "Algoritmos y estructuras de datos". Al crear este curso, confié en cómo me gustaría que me enseñaran. ¡La reacción fue increíble! Más de 3.000 estudiantes de más de 100 países se inscribieron en el curso durante el primer mes.

Si trabajas para resolver problemas fáciles, nunca mejorarás.

La forma más efectiva de descubrir lo que no sabes es toparte con esto en la práctica. Entonces estudié. Aprendí muchas técnicas nuevas de las que nunca había oído hablar antes, eligiendo una tarea difícil.

Cada tercer problema en el que esté trabajando debería enseñarle algo nuevo. Tenga cuidado al elegir un problema. ¡Elige los problemas más difíciles!

Después de terminar estas 250 tareas de SPOJ, tendrá una comprensión común de los temas principales de la programación deportiva. Gracias a una comprensión profunda de la lógica subyacente en los algoritmos básicos, los algoritmos de alto nivel parecerán menos complicados. Por lo tanto, puede utilizar su conocimiento al máximo.

Profundiza en cada uno de los temas principales.


Aquí hay un recurso valioso con mucha información. Allí encontrará los 10 mejores algoritmos y estructuras de datos para cada tema. Después de 250 problemas de SPOJ, sabrá mucho de esta lista. Pero también tropezar con un montón que nunca antes se había escuchado. Por lo tanto, comience a explorar estos temas en orden ascendente.

Si no fortalece su conocimiento después de aprender algo nuevo, olvidará todo rápidamente.
Recomiendo que después de aprender el nuevo algoritmo, lo use en la práctica. Trabajar en 2-3 tareas. Busque la etiqueta del algoritmo en SPOJ. Allí encontrará problemas para la solución de los cuales se necesita este algoritmo. Ordene estos problemas primero.

Lidia con la programación dinámica porque te llevará a la victoria
Según mi experiencia, en cada competencia hay al menos un problema de programación dinámica . Muchas personas sienten dolor de cabeza cuando escuchan la frase "programación dinámica" porque no la entienden en absoluto.

Y eso está bien. Porque si entiendes la programación dinámica, entonces ganarás.

Me gusta la programación dinámica, este es mi tema favorito. El secreto de la programación dinámica es tomar decisiones óptimas a nivel mundial, no solo locales. Debe dividir el problema en subtareas más simples. Resuelva cada una de estas subtareas solo una vez. Luego cree una solución que combine las subtareas resueltas. Un algoritmo codicioso es lo opuesto a la programación dinámica. En él, debe hacer una elección local óptima en cada paso. Una elección local óptima puede conducir a una solución global deficiente.

A medida que explora nuevos conceptos, consulte los tutoriales de TopCoder . Son muy detallados y comprensibles. Gracias a ellos, pude entender los árboles indexados binarios .

Trabajar duro


¿Alguna vez has oído hablar de los atletas que ganan los Juegos Olímpicos sin años de práctica? Yo no

Cada año, los preparativos para la olimpiada informática comenzaron en septiembre y finalizaron en abril.

Todos los días durante estos 8 meses practiqué durante 5 horas.

Y sí, pasé estas 5 horas solo para resolver problemas algorítmicos. Recuerdo los días en que practicaba durante 8 e incluso 10 horas. Por qué Porque me gusto Todos los días, al regresar a casa de la escuela, iba directamente a la habitación, me sentaba en la computadora y comenzaba a resolver un nuevo problema. O estudió un nuevo algoritmo que necesitaba saber para resolver este problema.

Si quieres ganar, debes hacer lo mismo. Elija un problema y manténgalo. Piénselo mientras camina por el camino hacia el supermercado o mientras conduce.

imagen

¿Sabes que durante el sueño tu cerebro desfragmenta la información recopilada en este día? Parece estar apilando libros en orden alfabético en una estantería. Esencialmente, su cerebro piensa en los diversos problemas que ha encontrado.

Esto se puede usar hábilmente. Antes de acostarse, lea el problema difícil y recuerde lo que necesita para resolverlo. En este punto, no necesita buscar la solución en sí. Vete a la cama. Su cerebro comenzará a manejar este problema. Cuando se despierte, se sorprenderá al darse cuenta de que ha encontrado una solución mientras duerme.

Pruébalo tú mismo. Parece magia

Creé un video blog


imagen

Este breve párrafo no está relacionado con la programación deportiva. Si tienes más de veinte años y estás interesado en cómo veo el mundo, puedes ver mi video blog en Youtube . Hablo en él sobre el mundo, la vida y la informática.

Trabajar sabiamente


Este es el secreto del éxito. Necesitas objetivos.

Somos personas y nos gusta postergar . Siempre queremos posponer lo que hay que hacer en este momento. Ver Netflix siempre es mejor que lidiar con problemas de programación dinámica. Lo sabes y necesitas arreglarlo.

Cómo vencer la dilación


Establece metas para ti mismo. Siempre encontrará problemas interesantes de los que puede aprender algo nuevo (consulte los recursos que mencioné anteriormente). Pero estos problemas deben resolverse, no solo leer sobre ellos.

Entonces, así es como superé la dilación. Empecé un calendario en papel y llenaba todos los días los problemas que quería resolver. Siempre llené los problemas por adelantado, dos días antes. Por lo tanto, sabía cómo administrar mi tiempo en los días siguientes.

imagen

Por lo tanto, siempre tuve motivación. Necesitaba resolver algunos problemas y encontrar otros nuevos para completar los días siguientes en el calendario. Tachar los problemas resueltos es muy agradable. Sé que a ti también te gusta.

Obtenga su propio calendario de papel. No cree otra lista de tareas pendientes en su teléfono que olvidará mañana.

Cómo debutar efectivamente


¿Quieres convertirte en profesional? Si es así, entonces debes degradar en la mente.
Esta es, con mucho, la técnica de depuración más efectiva que conozco, porque no requiere un depurador en absoluto. Su cerebro examina varias ramas de código al mismo tiempo y le ofrece una visión general mucho más amplia del código en comparación con el depurador clásico .

Puedes compararte con un gran maestro que juega ajedrez y piensa 3 movimientos por delante.

Utilizo esta técnica únicamente como mi línea de defensa inicial. Luego uso un depurador real.

Para aprender a degradar en la mente, uno necesita practicar. Cuando aprueba una solución a un problema y obtiene una "respuesta incorrecta", no vaya directamente al botón del depurador. Vuelva a leer el código y piense: “¿Qué sucede en esta línea?”, “¿Cómo afecta“ si ”al programa?”, “Cuando salimos del ciclo, ¿cuál es el valor del iterador?”.

Entonces estás pensando por tu cuenta. Con el tiempo, aprenderá a escribir código y debutará sobre la marcha.

Sobre el autor

imagen
Andrei Margeloiu es un ávido programador que está interesado en el espíritu empresarial, las nuevas empresas y la naturaleza. Puedes contactarlo en LinkedIn .

Traducción: Diana Sheremyova


Lee también el blog
Empresa EDISON:


20 bibliotecas para
espectacular aplicación para iOS

Source: https://habr.com/ru/post/473590/


All Articles