O objetivo deste curso é dar-te uma introdução ao mundo dos algoritmos, através dos básicos da programação competitiva. Em especial, as técnicas e os conceitos algorítmicos aprendidos - e praticados! - neste curso serão uma excelente base para teres um bom desempenho em competições como as Olimpíadas Nacionais de Informática (ONI), e para aprenderes tópicos como Inteligência Artificial, Bioinformática e Criptografia.
Alguns dos tópicos do curso de Algoritmos I são:
- Variáveis, condicionais, vetores, ciclos e funções em C++
- Pensamento algorítmico e algoritmos de pesquisa completa (força bruta)
- Eficiência e complexidade algorítmica de tempo e memória
- Pesquisa binária (e introdução aos logaritmos)
- Algoritmos de ordenação
- Prática de resolução de problemas de ordenação e pesquisa binária
- Escrever e submeter algoritmos em plataformas de avaliação automática como o Codeforces
Poucas ideias são tão centrais em computação e informática - e têm tantas aplicações! - como o conceito de algoritmo. Este curso proporciona-te uma introdução aos algoritmos e à programação competitiva. Um algoritmo é uma sequência de instruções bem definidas que serve para resolver uma certa classe de problemas ou levar a cabo um certo cálculo, incluindo como encontrar o caminho mais curto em duas localizações, como calcular a integridade estrutural de uma ponte, como comparar sequências de DNA, ou como "treinar" uma rede neuronal. Existem vários algoritmos para resolver cada um destes e outros problemas, mas nem todos os algoritmos têm a mesma utilidade. Por exemplo, alguns algoritmos são mais rápidos ou requerem menos memória. Problemas que com um certo algoritmo demorariam anos a ser resolvidos com o mais poderoso computador do mundo podem ser resolvidos em menos de um segundo pelo processador do teu telemóvel se for usado um algoritmo mais eficiente.
Mas como se avalia e, sobretudo, como se descobrem ou inventam algoritmos eficientes? Uma das melhores (e mais divertidas) formas de desenvolver estas competências algorítmicas é através da programação competitiva, que procura resolver problemas computacionais de forma eficiente. Deste modo, quem se dedica à programação competitiva, desenvolve a sua capacidade de analisar problemas complexos e de criar soluções ótimas para os mesmos. Para além disso, a programação competitiva é bem vista por diversas empresas (e.g., Google, Amazon, Facebook) e pode contribuir para um futuro profissional de sucesso.
Se isto te parece interessante, mas talvez um pouco complicado, não te preocupes. O curso está desenhado para alunos com apenas os conhecimentos básicos de programação, e todos os conceitos são ensinados em detalhe com tempo para compreender e praticar. Para além disso, terás colegas com os quais aprender e uma equipa de instrutores para te esclarecer quaisquer dúvidas.
Se estiveres disposto a trabalhar umas horas por semana para aprender técnicas de programação, desenvolver o teu conhecimento de linguagens de programação e ganhar proficiência em algoritmos e estruturas de dados, candidata-te!
Para conseguir acompanhar o curso no tempo esperado, é essencial que já tenhas alguma experiência em programação, mas não necessariamente na linguagem que usaremos, C++. Essencialmente, terás de estar à vontade com os conceitos e manipulações básicas de variáveis, ciclos, condicionais, funções e listas. Caso ainda não tenhas esses conhecimentos, poderás adquiri-los no nosso curso de Informática I.