Como gañei 3 de cada 4 medallas de ouro na Olimpíada de Computación

Como gañei 3 de cada 4 medallas de ouro na Olimpíada de Computación

Estaba preparándome para o Google HashCode World Championship Finals 2017. Esta é a maior competición con problemas algorítmicos organizada por Google.

Comecei a aprender C++ dende cero en noveno curso. Non sabía nada de programación, algoritmos ou estruturas de datos. Nalgún momento escribín a miña primeira liña de código. Sete meses despois, o concurso de programación asomaba no horizonte. Quería ver o ben que funcionaba o meu estilo de aprendizaxe da programación. Foi a oportunidade perfecta.

Despois de dous días de competición, chegaron os resultados: gañei a medalla de ouro.

Quedei impresionado. Estaba por diante dos competidores con 5 anos de experiencia. Sabía que traballara duro, pero este logro superou todas as miñas expectativas. Decateime de que a programación deportiva era o meu tema e mergullo de cabeza.

Sei o que me levou ao éxito e quero compartilo contigo.

Como gañei 3 de cada 4 medallas de ouro na Olimpíada de Computación

O artigo foi traducido co apoio de EDISON Software, que coida da saúde dos programadores e do seu almorzoE desenvolve software personalizado.

Que linguaxe de programación escoller

  • C++ - Altamente recomendable! É moi rápido. A implementación de algoritmos leva pouco tempo debido ao STL. C++ é aceptado en todas as competicións. Escribín a miña primeira liña de código en C++.
  • C - Aprende C++ grazas ao STL. Se coñeces C, tamén podes programar en C++.
  • Java é unha linguaxe de programación lenta. Ten unha clase Big Integer, pero non che axudará moito. Se unha competición ten límite de tempo, con Java seguramente o superarás. Java non se acepta en todas as competicións.

Onde podes practicar

eu recomendo Xuíz en liña de Esfera (SPOJ). É un recurso eficaz en cantidade e calidade. Os editores e as solucións están dispoñibles en liña se te quedas atrapado no proceso de resolución de problemas. Ademais deste sitio recomendo Kit de ferramentas de SPOJ и clasificador de problemas para SPOJ.pl.

En primeiro lugar, cómpre mellorar os seus coñecementos básicos

Unha vez que te acostumes á sintaxe da linguaxe, hai algúns problemas que superar. Comeza con problemas sinxelos que requiren práctica. Nesta fase, o principal é determinar o seu estilo de programación. Quizais che guste escribir código con moitos espazos en branco, quizais non. Pode que estea poñendo os parénteses na mesma liña que o "se" ou pode que os estea colocando en liñas separadas.

Tes que atopar o teu estilo de programación porque é o TEU estilo.

Cando o busques, lembra dous principios básicos:

  • O teu código debería ser fácil de implementar. Debe sentirse cómodo implementando a solución que se lle ocorre. Por que? Porque durante unha competición, o último que queres é perderte no teu código. Sempre é mellor dedicar 5 minutos extra a pensar en como simplificar a implementación do código que pasar 10 minutos intentando descubrilo.
  • O teu código debe ser fácil de ler. Cando o código é fácil de ler, é fácil depurar. Aceptémolo: os erros ocorren todo o tempo. Coñeces esa sensación cando che quedan 10 minutos e non atopas o maldito erro? Por suposto que si. Para evitar esta situación, escriba código lexible. Unha vez que comeces a depuralo, o código parecerá natural e fácil de entender.

Aquí tes un exemplo meu estilo de programación.

Como mellorar as túas habilidades de desenvolvemento

Práctica, práctica e máis práctica. Recomendo que traballes cos primeiros 250 problemas máis resolubles SPOJ. Resolvelos en orde. Dedica polo menos unha hora a pensar na solución de cada un deles.

Non digas: "Este problema é moi difícil para min, intentarei resolver o seguinte". Así pensan os perdedores.

Colle un anaco de papel e un lapis. Pénsao. Quizais poidas atopar unha solución, quizais non. Como mínimo, desenvolverá o pensamento algorítmico. Se non podes atopar unha solución nunha hora, busca unha solución preparada no foro ou nos artigos.

Que conseguirás con este enfoque? Aprende a implementar rapidamente as túas ideas usando código. E estuda problemas e algoritmos clásicos.

En segundo lugar, debe dominar algoritmos e estruturas de datos

Siga un enfoque xerárquico. Comezaches a correr sen saber andar? Non. Podes construír un rañaceos sen unha base sólida? Non outra vez.

Non podes ignorar os pasos do camiño de aprendizaxe. Se os ignoras, quedarás con lagoas de coñecemento. Co paso do tempo só empeorarán.

Comeza con algoritmos fundamentais e estruturas de datos

É difícil comezar. Quizais porque non sabes que estudar primeiro. Por iso Creei un curso de vídeo "Algoritmos e estruturas de datos". Ao crear este curso, baseei en como me gustaría que me ensinasen. A reacción foi incrible! Máis de 3000 estudantes de máis de 100 países rexistráronse no curso no primeiro mes.

Se traballas para resolver problemas sinxelos, nunca mellorarás.

A forma máis eficaz de entender o que non sabes é experimentalo na práctica. Así aprendín. Aprendín moitas técnicas novas das que nunca oín falar antes escollendo unha tarefa desafiante.

Cada terceiro problema no que traballes debería ensinarche algo novo. Teña máis coidado ao elixir os problemas. Escolle problemas máis difíciles!

Unha vez que completes estes 250 problemas de SPOJ, terás unha comprensión básica dos temas fundamentais da programación deportiva. Cunha comprensión profunda da lóxica detrás dos algoritmos básicos, os algoritmos de alto nivel parecerán menos complexos. Deste xeito podes aproveitar ao máximo os teus coñecementos.

Profundiza en cada un dos temas principais

Aquí tes un recurso valioso con moita información. Alí atoparás os 10 principais algoritmos e estruturas de datos para cada tema. Despois de 250 problemas de SPOJ, saberás moito desta lista. Pero tamén tropezarás con moitas cousas das que nunca escoitaches falar. Entón comeza a estudar estes temas en orde ascendente.

Se non reforzas os teus coñecementos despois de aprender algo novo, esquecerás todo rapidamente.
Recomendo que despois de aprender un novo algoritmo, utilízao na práctica. Traballa en 2-3 tarefas. Busca a etiqueta do algoritmo en SPOJ. Alí atoparás problemas que precisan deste algoritmo para resolver. Aborda estes problemas primeiro.

Domina a programación dinámica porque che levará á vitoria
Segundo a miña experiencia, cada competición ten polo menos un problema programación dinámica. Moitas persoas teñen dor de cabeza cando escoitan a frase "programación dinámica" porque non a entenden en absoluto.

E isto é bo. Porque se entendes a programación dinámica, gañarás.

Gústame a programación dinámica, é o meu tema favorito. O segredo da programación dinámica é tomar opcións óptimas a nivel mundial, non só locais. Debes dividir o problema en subproblemas máis sinxelos. Resolve cada un destes subproblemas só unha vez. Despois crea unha solución que combine os subproblemas resoltos. Algoritmo cobizoso - o contrario da programación dinámica. Require facer eleccións óptimas localmente en cada paso. E unha elección óptima localmente pode levar a unha mala solución global.

Mentres aprendes novos conceptos, consulta Tutoriais de TopCoder. Son moi detallados e comprensibles. Grazas a eles puiden entender árbores indexadas binarias.

Traballar duro

Xa escoitaches falar de atletas que gañan os Xogos Olímpicos sen anos de práctica? Eu non.

Cada ano, os preparativos para a Olimpíada de Informática comezaban en setembro e remataban en abril.

Todos os días durante estes 8 meses practicei 5 horas.

E si, pasei estas 5 horas só resolvendo problemas algorítmicos. Lembro os días nos que practicaba 8 e ata 10 horas. Por que? Porque me gustou. Todos os días, cando volvía da escola á casa, ía directamente ao cuarto, sentaba ao ordenador e comezaba a analizar un novo problema. Ou estaba aprendendo un novo algoritmo que necesitaba coñecer para resolver este problema.

Se queres gañar, tes que facer o mesmo. Escolle un problema e quédate con el. Pénsao mentres camiñas ao supermercado ou mentres conduces.

Como gañei 3 de cada 4 medallas de ouro na Olimpíada de Computación

Sabías que cando dormes, o teu cerebro desfragmenta a información recollida ese día? Parece estar apilando libros por orde alfabética nunha estantería. Esencialmente, o teu cerebro pensa nos diversos problemas aos que te enfrontas.

Isto pódese usar con habilidade. Antes de durmir, le un problema difícil e recorda o que fai falta para resolvelo. Nesta fase, non é necesario buscar a solución en si. Vaite á cama. O teu cerebro comezará a procesar este problema. Cando espertas, sorprenderásche ao decatarte de que atopaches a solución mentres estabas durmido.

Probao vostede mesmo. É como maxia.

Creei un blog de vídeo

Como gañei 3 de cada 4 medallas de ouro na Olimpíada de Computación

Este breve parágrafo non está relacionado coa programación deportiva. Se tes vinte anos e te preguntas como vexo o mundo, quizais queiras botar unha ollada o meu blog de vídeo en Youtube. Falo do mundo, da vida e da informática nel.

Traballa intelixente

Este é o segredo do éxito. Necesitas goles.

Somos persoas e gústanos procrastinar. Sempre queremos adiar o que hai que facer agora mesmo. Ver Netflix sempre é máis agradable que tratar con problemas de programación dinámica. Sabes isto e tes que solucionalo.

Como vencer a procrastinación

Establecete metas. Sempre atoparás problemas interesantes dos que podes aprender algo novo (consulta os recursos que mencionei anteriormente). Pero hai que resolver estes problemas, non só ler.

Entón, aquí é como superei a procrastinación. Comecei un calendario en papel e enchei cada día de problemas que quería resolver. Sempre cubrín os problemas con dous días de antelación. Así que souben xestionar o meu tempo nos días seguintes.

Como gañei 3 de cada 4 medallas de ouro na Olimpíada de Computación

Así que sempre estiven motivado. Necesitaba resolver algúns problemas e buscar outros novos para cubrir os próximos días no calendario. Tachar problemas resoltos é xenial. Sei que a ti tamén che gusta.

Obtén o teu propio calendario en papel. Non crees outra lista de tarefas no teu teléfono que che esquezas mañá.

Como depurar de forma eficaz

Queres ser profesional? Se si, entón tes que "depuralo na túa mente".
Esta é, con diferenza, a técnica de depuración máis eficiente que coñezo porque non require ningún depurador. O teu cerebro examina varias ramas de código á vez e dáche unha visión xeral moito máis ampla do código en comparación con depurador clásico.

Podes compararte cun gran mestre que xoga ao xadrez e pensa 3 movementos por diante.

Eu uso esta técnica só como a miña liña inicial de defensa. Despois uso un depurador real.

Para aprender a depurar a túa cabeza, cómpre practicar. Cando validas unha solución a un problema e obtén unha "resposta incorrecta", non vaias directamente ao botón do depurador. Volve ler o código e pensa: "Que está a pasar nesta liña?", "Como afecta o "se" aquí ao programa?", "Cando saímos do bucle, cal é o valor do iterador?"

Deste xeito pensas por ti mesmo. Co paso do tempo, aprenderás a escribir código e depuralo sobre a marcha.

Sobre o autor

Como gañei 3 de cada 4 medallas de ouro na Olimpíada de Computación
Andrei Margeloiu é un ávido programador con interese no emprendemento, as startups e o aire libre. Podes contactar con el en LinkedIn.

Tradución: Diana Sheremyeva

Fonte: www.habr.com

Engadir un comentario