Quais algoritmos e estruturas de dados um desenvolvedor deve saber absolutamente? [fechadas]

24

Quero ser um desenvolvedor Java corporativo de sucesso. Com quais algoritmos e estruturas de dados devo ser bem versado? Quais livros você recomendaria para mim?

Para ser um desenvolvedor Java de sucesso, preciso conhecer todos os algoritmos avançados, como os fornecidos no CLRS ?

Você pode sugerir uma lista dos tópicos que devo aprender na ordem decrescente de sua prioridade?

Devo saber:

  • Procurando?
  • Classificação?
  • Gráficos / Árvores?

etc?

Chankey Pathak
fonte
11
@jonsca: Marketing de afiliados ah? ;)
Chankey Pathak
Nah, bem, SE muda o destino como tal, mas eu só percebi que nem todos sabem essas iniciais :)
jonsca

Respostas:

17

Introdução aos algoritmos de Cormen é um bom livro para alguns fundamentos teóricos básicos.

Dito isto, a maioria dos algoritmos e estruturas de dados já foram codificados, testados e otimizados por outros, e não há razão para reimplementá-los mais uma vez. Para ser um desenvolvedor Java de sucesso, é necessário conhecer o The Collections Framework de dentro para fora.

Joonas Pulakka
fonte
3
Porém, você precisa conhecer os custos envolvidos nos algoritmos: essa busca pela primeira vez encontrará o caminho mais curto ao usar potencialmente muito espaço, por exemplo.
Frank Shearar
Concordo, embora apenas obter o espírito da grande notação O seja um longo caminho.
Joonas Pulakka
8

Se você deseja ser um programador de qualquer tipo, precisa entender todas as estruturas básicas de dados (pilhas, filas, matrizes, listas vinculadas, hashtables, árvores etc.) com mais detalhes. O suficiente para que você possa implementar qualquer um deles por si mesmo, se você se encontrar em um mundo sem estruturas de coleções para fazer o trabalho por você.

No que diz respeito aos algoritmos, parece-me que eles são mais ferramentas para trabalhos, enquanto suas estruturas de dados são blocos de construção fundamentais. Não acho que seja tão importante conhecer os detalhes de como implementar todos os algoritmos nos quais você pode se deparar. O que você precisa ser capaz de avaliar é avaliar o desempenho de um algoritmo para um determinado objetivo. Às vezes, a diferença entre a pesquisa em profundidade e a largura em primeiro lugar ou o tipo de classificação que você realiza nos seus dados pode fazer uma diferença muito grande no desempenho ou no sucesso geral do seu código, portanto, saber como julgar isso é muito importante.

glenatron
fonte
0

Além das outras respostas, gostaria apenas de acrescentar que o estudo de algoritmos não é apenas para conhecer técnicas conhecidas (que ainda são importantes), mas também para entender o processo de pensamento que é criado uma solução para um problema que você encontra na vida real, não necessariamente bem conhecido.

MAK
fonte
0

Estou aprendendo Java hoje em dia.

Eu quero ser um desenvolvedor corporativo de sucesso. Então, com quais algoritmos e estruturas de dados eu deveria ser bem versado? Quais livros você me recomendaria?

Para ser um desenvolvedor Java de sucesso, preciso conhecer todos os algoritmos avançados, como os fornecidos no CLRS?

Você pode me sugerir uma lista dos tópicos que devo aprender na ordem decrescente de sua prioridade?

Diga-me o nome de alguns tópicos que devo saber. Como pesquisar, classificar, gráficos, árvores etc?

É bom que você esteja ansioso para estender e melhorar suas habilidades de programação. É importante, no entanto, não tratar os algoritmos como um catálogo de itens a serem memorizados. O que você precisa saber para se tornar um bom desenvolvedor (em Java ou qualquer outra coisa) é entender a análise algorítmica.

Você aprende isso aprendendo algumas estruturas e algoritmos de dados selecionados e aprendendo a analisar seu desempenho em termos de tempo e espaço (memória). Pesquisando, classificando, gráficos, árvores, montões, pilhas e todas essas coisas boas. Isso também deve seguir alguns princípios básicos da teoria da computação e da matemática discreta (mesmo que no reino de Java nunca possamos realmente usar esses dois tópicos diretamente - seus benefícios são indiretos).

Separe o aprendizado de uma linguagem de programação (no seu caso, Java) com o aprendizado de análise algorítmica (que é diferente da "memorização" de algoritmos e estruturas de dados).

George T. Heineman, Gary Pollice e Stanley Selkow "Algorithms in a Nutshell" é um bom começo. "Algoritmos", de Sanjoy Dasgupta, Christos Papadimitriou e Umesh Vazirani, é outro bom livro de graduação.

O melhor é fazer cursos de 9 a 12 créditos em programação antes de fazer um curso de graduação em algoritmos de nível 3000. Salvo isso, o estudo individual com os dois livros que mencionei pode ser uma boa alternativa (o estudo individual pode não ser para todos).

Boa sorte!

luis.espinal
fonte