Como Aprender Melhor Sobre Algoritmos em Profundidade

8

Eu tenho lido este site com muito interesse, mas acho que muito disso passa pela minha cabeça. Isso me fez querer aprender muito mais sobre algoritmos e CS em geral. Tanto quanto eu posso dizer da minha pesquisa, existem 2 maneiras principais de fazer isso.

  1. Eu posso por um bom livro grosso e pesado e percorrê-lo lenta mas seguramente.

  2. Eu posso "aprender fazendo" e com um bom livro, mas, em vez de lê-lo de capa a capa, passe para as partes que me interessam e trabalhe na implementação e aplicação de algoritmos de que gosto.

  3. ?

Minha pergunta é: qual das opções acima você usou e recomendaria a mesma abordagem a outra pessoa?

Daniel Gratzer
fonte
1
Você pode achar útil minha resposta em cstheory .
Dai

Respostas:

15

Eu aprendi sobre algoritmos em um curso universitário anos atrás. Mas se você quiser criar algoritmos usando um livro, precisará de um bom. Dois livros se destacam para mim como a maneira de entrar em algoritmos:

  • O algoritmo Design Manual por Steven S. Skiena
  • Introdução aos algoritmos de T Cormen, C Leiserson, R Rivest e C Stein

O primeiro talvez seja mais um manual prático, enquanto o último é mais parecido com a Bíblia, mas com provas.

A estratégia que você poderia seguir consistiria em ler, fazer os exercícios teóricos e, em seguida, implementar o máximo possível, concentrando-se em algoritmos / problemas que você achar interessante ou desafiador ou ambos. Portanto, tente abranger todos os aspectos dos algoritmos, não apenas implementá-los. Isso incluirá o estudo da complexidade do tempo e do espaço e a comprovação da correção. O estudo de algoritmos é mais do que apenas implementar algoritmos.

Depois de ganhar experiência suficiente, comece a se especializar. Se você se interessar por Geometria Computacional ou algoritmos não-bloqueadores, por exemplo, comece a explorar livros e trabalhos de pesquisa nesta área.

A especialização é boa, mas também é bom amostrar técnicas de outras áreas; portanto, ler amplamente sobre algoritmos (e implementar tais algoritmos) é uma boa maneira de manter um amplo conjunto de habilidades.

EDIT: Após analisar os algoritmos introdutórios, você pode consultar livros como Algoritmos Aleatórios de Motwani & Raghavan ou Algoritmos de Aproximação de Vazirani . Esses livros são uma pesquisa (e até certo ponto, um bom exercício de aprendizado em técnicas matemáticas) em técnicas mais avançadas de design de algoritmos. Eles também ampliam sua visão sobre muitos outros campos do CS, como Gráficos e Redes, Design de estrutura de dados e Otimização.

Dave Clarke
fonte
Começou a ler uma cópia do Manual de design do algoritmo on-line e eu adoro até agora! Obrigado!
precisa
3
Eu reformularia ligeiramente uma frase: o estudo de algoritmos é apenas incidentalmente sobre a implementação de algoritmos.
Jeffe
13

Ensine uma classe de algoritmos.

Ou talvez até melhor:

escreva um livro de algoritmos.

JeffE
fonte
3
+1. Eu considerei isso uma piada inicialmente, mas reconsiderei e percebi que nada permite que você entenda profundamente algo como quando você é forçado a ajudar alguém a aprender os mesmos conceitos. Um curso claro inclui, para um professor, as duas aulas, a preparação de anotações de palestras, anotações e, claro, a escrita de livros didáticos ;-) Meus dois centavos: preparar exercícios também ajuda bastante. Para um aluno, concordo com a estratégia proposta por @Dave Clarke.
Massimo Cafaro
Não, @vzn, esta resposta é completamente séria.
JeffE 6/09/12
ah, bem, tinha medo disso - então uma resposta apropriada / adaptada a quem não é professor ou professor (que é um subconjunto muito restrito da população) pode ser "ensinar o algoritmo ao seu amigo" ou "escrever uma descrição do algoritmo da memória e alguém tentar ler e segui-lo "
vzn 6/09/12
5
Não seja tão rígido. Por que você precisa ser pago para ensinar (ou escrever) para ensinar (ou escrever)? Ensine seus colegas. Ensine seus filhos. Voluntário em uma escola local ou faculdade comunitária. Faça vídeos do YouTube nos seus dias de folga. Inicie um algoritmo Pechakucha Night.
jeffe
touche. acho que as obras se "livro" também é vagamente tomado como "escrita em um caderno espiral, inédito"
vzn
2

Tente resolver problemas com base em um algoritmo assim que ler um. Além disso, para entender os algoritmos e implementá-los melhor, você precisa entender melhor as estruturas de dados. Há um livro muito bom de estruturas de dados escrito por Sahni. Você pode usar isso e, para algoritmos, pode resolver problemas do livro de desafios de programação. As perguntas são bem legais lá.

Lina Clark
fonte
1

Se você não aprendeu sobre algoritmos na universidade, recomendo participar de uma das aulas on-line, considere se inscrever em um dos cursos em coursera.org ou seguir vídeos publicados pela Universidade de Stanford.

Marca
fonte
O Udacity também oferece um curso em udacity.com/overview/Course/cs215 .
Jsca # 26/12