Quais seriam as Técnicas PRECIOSAS em programação/algoritmos?
Eae, pessoal. Como estão? Tudo 100%? Hoje eu estava fazendo um desafio no Leetcode e, apesar dos meus esforços, o meu código não passava em todos os testes (faltavam só 2 -_-). Após queimar alguns neurônios, tentando assimilar outra forma de resolver o problema, decidi consultar as submissões feitas por outros usuários.
Encontrei, portanto, um sujeito indiano que fez uma solução em Java, superando 100% dos usuários naquele desafio 0_0. Ele fez um vídeo explicando o seu algoritmo e notei uma técnica diferente, que talvez possa ser utilizada com eficácia em outras questões. Ele usou uma Iteração Reversa (backward iteration) - ou algo do tipo. Pode ser que essa não seja uma tééécnica super relevante, mas achei interessante o conceito e como a aplicação dele ajudou a resolver o problema.
Porém, para saber onde aplicar uma determinada técnica também é necessária uma percepção aguçada em relação à lógica do problema, concordam? Admito que ainda não entendi o raciocínio do cara pelo vídeokkkkkkk. Mas gostei de descobrir que há técnicas, truques ou até feitiços (para quem também gosta de imaginar e curte jogos ou fantasia).
Então, gostaria de ouvir de vocês. Quais técnicas de programação marcantes ou pertinentes que vocês já descobriram e para qual problema elas funcionam?
A melhor técnica é colocar a cara no computador e programar. Só com muita prática e resolução de problemas você irá desenvolver essa visão aguçada. Para quem faz faculdade é mais simples, pois podemos utilizar exemplos de livros ou de listas de disciplinas.
Outra dica é tentar sempre encontrar a complexidade de cada algoritmo que você faz, depois de um tempo isso será automático e você conseguirá avaliar se é possível fazer melhor e como fazer.
Algoritmos de grafos: Os grafos são uma ferramenta poderosa que podem ser usados para resolver uma ampla gama de problemas. Quase tudo pode ser modelado como um grafo, e aí diversos algoritmos podem ser aplicados para encontrar diversas soluções de forma eficiente. Os algoritmos de grafos mais comuns (e que todo programador deve conhecer) incluem busca em largura (BFS), busca em profundidade (DFS), árvore geradora mínima (MST) e caminho mais curto.
Cara, esses problemas de leet code, beecrowd, maratona e etc, sempre já são manjandos, igual 98% dos problemas da programação, você tem que saber que existe, por que algum fdp no quarto escuro da sua casa já pensou em uma solução 100x melhor que a sua. Exige bastante estudo e a maior parte desses estudos que vejo são, ou vieram, de livros e/ou artigos acadêmicos, livros como Algoritmos vão te apresentar 80% dos algoritmos e estrutura de dados, além de uma base matemática (pode ter outros livros só com foco em problemas como do leet code, mas desconheço). Os outros 20% você vai aprender da forma que fez mesmo, tentando resolver, gastando neurônio, se fudendo e no final vendo a solução de um indiano, e tendo aquele Insight Ahhhh! Já existe um técnica pra resolver exatamente problemas como esse
, igual design patterns no âmbito da arch
.
Deixando minha contribuição, as técnicas mais famosas que conheço são essas.
- Todos algoritmos envolvendo arvores (bfs, dfs, balance tree...)
- Todos algoritmos envolvendo grafos
- Dynamic programming (bottom-up e top-down)
- Entender que alguns algoritmos são NP e vão ter uma solução ideal, e não a melhor
- greedy algorithms
- backtracking
- dividir pra conquistar
- sliding window
Sei la eu sou meio estranho kk sempre invento um algoritimo na hora segundo ao meu raciocinio mas não fico buscando por termos.