Como aprendo algoritmos e estruturas de dados? [fechadas]

38

Isso continua na minha pergunta anterior, na qual perguntei se é necessário aprender algoritmos e estruturas de dados. Eu sinto que sim.

Agora, trabalho em um ambiente em que nunca terei a chance de aprendê-lo experimentando, praticamente ou em qualquer tarefa. Qual é a abordagem correta, como os livros certos, o tipo certo de problemas, o tipo certo de recursos pelos quais posso passar seis meses ou um ano ou dois para aprender algoritmos e estruturas de dados? E também moldo minha mente de uma maneira que possa relacionar problemas com estruturas e algoritmos de dados.

sushil bharwani
fonte
3
Cormen é seu amigo :)
Lukasz Madon
1
@ukas: Ainda não terminei, porém, existem algumas matemáticas por lá que eu não me sinto tão confortável. Ele fez muito mais para o meu conhecimento de algoritmos, estruturas de dados e sua análise, que qualquer outra fonte única embora :)
Matthieu M.
Você também pode tentar o meu projeto, que descreve algoritmos e estruturas de dados populares de maneira mais direta do que a Wikipedia e contém códigos de fonte quase para todos os artigos (estrutura, abordagem, algoritmo) ... en.algoritmy.net
malejpavouk

Respostas:

40

Ler.

Não, realmente, leia.

Leia tudo sobre algoritmo e design que você pode encontrar. Existem livros fenomenais por aí. Os livros do algoritmo de Sedgewick são bons. O Manual de Design de Algoritmos da Skiena também é bom. Juntos, esses livros me acompanham em todas as estantes de livros, em todos os empregos em que vou, junto com The Mythical Man-Month.

Então pergunte.

Converse com pessoas que você respeita. Pergunte a eles que pontos de decisão eles tinham e por que eles tomaram as decisões que tomaram. Os bons sempre serão capazes de lhe dizer "Eu escolhi fazer o X porque é melhor que A, B dessa maneira. Eu poderia ter ido com C, mas achei que essa era uma escolha melhor por causa disso".

Em seguida, faça.

Construa coisas. Crie coisas que você nunca usará. Crie coisas que você nunca precisará. Vá escrever um programa que resolva um quebra-cabeça Sudoku. Agora vá fazê-lo novamente. E de novo. Construa 5 maneiras completamente diferentes. Crie um programa que gere quebra-cabeças de Sudoku e alimente-o nos solucionadores. Encontre qual solver é o mais rápido. E depois...

Descubra o porquê.

O "o quê" quase nunca é importante. Quero dizer, sim, é fundamental finalizar o projeto em questão, mas no final, se você souber o "o quê" sem saber o "porquê", poderá não ter feito isso em primeiro lugar. Você tem um ponto de bala no seu currículo. Vá pegar um biscoito e parabenize-se. O "porquê" é muito mais importante que o "o quê".

E para o registro Sudoku foi um exemplo. Passei muito tempo livre fazendo esse exercício com uma tonelada de quebra-cabeças lógicos no Kongregate e aprendi muito no caminho.

http://www.amazon.com/Bundle-Algorithms-Parts-1-5-Fundamentals/dp/020172684X/ http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1848000693/ http://www.amazon.com/Mythical-Man-Month-Software-Engineering-Anniversary/dp/0201835959/

Hounshell
fonte
resposta realmente muito boa! Gosto da maneira como formulou seu conselho!
precisa saber é o seguinte
Eu também levo livros de Sedgewick e Skienna comigo em todos os lugares! essa é provavelmente outra razão pela qual eu amei sua resposta!
precisa saber é o seguinte
e Cormen à mistura, por favor.
AruniRC
1
Na era de uma crescente busca por informações na internet, é importante acrescentar: leia livros (não exclusivamente, é claro). Uma introdução consistente e coerente de um assunto com mais de 2-3 páginas HTML separadas por anúncio é A Good Thing ™ ! Não o subestime (e sim, é claro que os e-books são bons).
Joachim Sauer
1
Acordado. Consistência é a chave. É difícil criar estruturas de dados quando você recebe um ou dois de uma dúzia de fontes diferentes. Os livros também tendem a ter melhores diagramas (alguns blogs / fontes online têm, mas, como livros de generalização, são melhores). Os livros de Sedgewick têm uma mistura particularmente boa de diagramas, simples de seguir código e descrição.
Hounshell
10

Algoritmos

Tive aulas de mágica em grupo quando tinha doze anos. O nome do mago era Joe Carota. Ele fez um truque uma vez e eu soltei: "Como você fez isso?" Ele disse algo naquele dia que ficou comigo desde então.

A resposta de Joe: "Michael, se você realmente quer saber como esse truque é feito, deve descobrir como faria você mesmo".

Bem, é claro que não era isso que eu queria ouvir, mas isso focou minha mente na solução de problemas. Isso foi a solução de problemas da minha perspectiva. Se minha primeira tentativa de resolver o problema deu dezessete etapas e foi realmente desajeitada, a boa notícia foi que eu resolvi o problema.

Então, olhando a solução que eu havia desenvolvido e procurando maneiras de refinar essa solução, aprenderia a otimizar o resultado final. Mais tarde, na minha vida de programação de computadores, descobri que esse processo se chamava "Stepwise Refinement". Eu acho que hoje eles chamam de refatoração.

Funcionou, então ainda funciona agora.

Michael Riley - também conhecido por Gunny
fonte
2

Veja se você pode fazer um curso on-line ou seja orientado. Na falta disso, isso apareceu em uma rápida pesquisa no Google. Eu apenas participei de uma aula sobre isso na primavera passada (primeiro, mudei do EE para o software) e não foi tão difícil de entender se você entendeu bem os indicadores .

Stephen Furlani
fonte
2

Se você não conseguir fazer um curso sobre isso, recomendo o Manual de design do algoritmo. Há um PDF gratuito aqui , mas vale a pena obter o livro real se você planeja programar profissionalmente.

Jason Baker
fonte
As soluções estão aqui. Acho que é ótimo tê-los quando estiver aprendendo por conta própria: www2.algorithm.cs.sunysb.edu:8080/mediawiki/index.php/…
David Rinck
1

Tente se inscrever em um curso de graduação em estruturas de dados e algoritmos; é sempre bom aprender esses conceitos ao lado de outros.

Martijn Verburg
fonte
Sou formado em ciências da computação e faz seis anos desde então. Eu nunca me concentrei nesses assuntos, pois foram a web, a usabilidade, o servidor do cliente, que me atraíram e estou trabalhando apenas nesses campos, mas agora sinto que devo aprendê-los também. Quais são seus pensamentos.
Sushil bharwani
Volte e faça um curso de reciclagem :-)
Martijn Verburg
1

Comece a trabalhar na solução de problemas clássicos na esfera online , por exemplo , o site pode não parecer tão chique, mas garoto, esses são problemas de programação clássicos que exigem muitas das importantes estruturas de dados e algoritmos em uso atualmente.

As soluções podem ser enviadas em uma variedade de linguagens de programação, de C / C ++ a JavaScript, Lisp, Smalltalk, assembler e mais 40. Assim, você pode se concentrar inteiramente na solução do problema com qualquer linguagem de programação com a qual se sinta confortável.

Ernelli
fonte
1

CLRS

Este é de longe o meu recurso favorito. Usei-o no meu curso de graduação em algoritmos de ciência da computação e acabei comprando o livro 4 anos depois para ler sozinho para me preparar para meus cursos de MS Comp Sci. Não é uma leitura fácil, por qualquer meio, mas se você trabalhar para entender algumas das provas / matemática apresentadas e depois implementar o pseudo-código em seu (s) idioma (s) favorito (s), valerá a pena o preço um tanto alto. O Manual de Projeto de Algoritmo que outros mencionaram também é um ótimo recurso para a identificação de problemas de aprendizagem, mas eu achei o CLRS melhor para detalhes puros.

Kurtis
fonte
0

Você sempre pode tentar algo como isto: http://codekata.pragprog.com/

Eu sempre aprendi melhor pensando nisso, em vez de ler. No entanto, você deve ter documentação / material de leitura disponível para procurar respostas.

RobotHumans
fonte
0

Compre este livro , Empreste isto ou Roube isto! Resto seguirá :)

Introdução aos Algoritmos por Rivest e Cormen. Será muito difícil seguir inicialmente assim que você passar pela explicação do Mergesort na introdução. Tudo se desenrola para você lindamente.

Além disso, você ficará melhor se resolver os problemas apresentados no livro. Eu realmente nunca quis me separar do livro, mesmo depois de me formar na faculdade. Isso é bom.

Venki
fonte