Quels algorithmes et structures de données un développeur doit-il absolument connaître? [fermé]

24

Je veux être un développeur Java d'entreprise performant. Avec quels algorithmes et structures de données dois-je bien connaître? Quels livres me recommanderiez-vous?

Pour être un développeur Java performant, dois-je connaître tous les algorithmes avancés tels que ceux fournis dans CLRS ?

Pouvez-vous suggérer une liste des sujets que je devrais apprendre dans l'ordre décroissant de leur priorité?

Dois-je savoir:

  • Recherche?
  • Tri?
  • Graphiques / arbres?

etc?

Chankey Pathak
la source
1
@jonsca: Ah marketing d'affiliation? ;)
Chankey Pathak
Non, eh bien, SE change le lien en tant que tel, mais je viens de penser que tout le monde ne connaît pas ces initiales :)
jonsca

Réponses:

17

L'introduction aux algorithmes de Cormen est un bon livre pour quelques fondements théoriques de base.

Cela dit, la plupart des algorithmes et des structures de données ont déjà été codés, testés et optimisés par d'autres, et il n'y a aucune raison de les réimplémenter une fois de plus. Pour être un développeur Java performant, vous devez connaître le cadre des collections à fond.

Joonas Pulakka
la source
3
Cependant, vous devez connaître les coûts impliqués par les algorithmes: cette recherche en premier trouvera le chemin le plus court tout en utilisant potentiellement beaucoup d'espace, par exemple.
Frank Shearar du
D'accord, même si le simple fait d'esprit de notation O grand va très loin.
Joonas Pulakka
8

Si vous voulez être un programmeur de quelque sorte que ce soit, vous devez comprendre en détail toutes les structures de données de base (piles, files d'attente, tableaux, listes liées, tables de hachage, arbres, etc.). Assez au moins que vous puissiez implémenter l'un d'eux pour vous-même si vous vous trouviez dans un monde sans cadres de collections pour faire le travail pour vous.

En ce qui concerne les algorithmes, il me semble qu'ils sont davantage des outils de travail, alors que vos structures de données sont des briques fondamentales. Je ne pense pas qu'il soit aussi important de connaître les détails de la façon d'implémenter tous les algorithmes que vous pourriez rencontrer. Ce que vous devez faire, c'est évaluer dans quelle mesure un algorithme fonctionnera dans un but donné. Parfois, la différence entre la recherche en profondeur en premier et en largeur ou le type de tri que vous effectuez sur vos données peut faire une très grande différence dans les performances ou le succès général de votre code, il est donc très important de savoir comment juger cela.

glénatron
la source
0

En plus des autres réponses, je voudrais juste ajouter que l'étude des algorithmes n'est pas seulement pour connaître des techniques bien connues (ce qui est toujours important), mais aussi pour être en mesure de comprendre le processus de réflexion qui va dans l'élaboration une solution à un problème que vous rencontrez dans la vraie vie, pas nécessairement bien connu.

MAK
la source
0

J'apprends Java maintenant depuis quelques jours.

Je veux être un développeur d'entreprise prospère. Alors, avec quels algorithmes et structures de données dois-je bien connaître? Quels livres me recommanderiez-vous?

Pour être un développeur Java performant, dois-je connaître tous les algorithmes avancés tels que ceux fournis dans CLRS?

Pouvez-vous me suggérer une liste des sujets que je devrais apprendre dans l'ordre décroissant de leur priorité?

Dites-moi le nom de certains sujets que je dois connaître. Comme la recherche, le tri, les graphiques, les arbres, etc.?

Il est bon que vous souhaitiez étendre et améliorer vos compétences en programmation. Il est cependant important de ne pas traiter les algorithmes comme un catalogue de choses à mémoriser. Ce que vous devez savoir pour devenir un bon développeur (en Java ou ailleurs) est de comprendre l'analyse algorithmique.

Vous apprenez cela en apprenant quelques structures de données et algorithmes sélectionnés, et en apprenant à analyser leurs performances en termes de temps et d'espace (mémoire). Recherche, tri, graphiques, arbres, tas, piles et toutes ces bonnes choses. Cela devrait également suivre certaines bases de la théorie du calcul et des mathématiques discrètes (même si dans le domaine de Java, nous ne pouvons jamais utiliser ces deux sujets directement - leurs avantages sont indirects.)

Séparez l'apprentissage d'un langage de programmation (dans votre cas Java) avec l'apprentissage de l'analyse algorithmique (qui est différente de la "mémorisation" des algorithmes et des structures de données.)

George T. Heineman, Gary Pollice et Stanley Selkow "Algorithms in a Nutshell" est un bon début. "Algorithms" de Sanjoy Dasgupta, Christos Papadimitriou et Umesh Vazirani est un autre bon manuel de premier cycle.

Le mieux est de suivre des cours de 9 à 12 crédits en programmation avant de suivre un cours de premier cycle de 3000 niveaux en algorithmes. Sauf cela, l'auto-apprentissage avec les deux livres que j'ai mentionnés pourrait être une bonne alternative (l'auto-apprentissage pourrait ne pas être pour tout le monde, cependant.)

Bonne chance!

luis.espinal
la source