Какие алгоритмы и структуры данных должен знать разработчик? [закрыто]

24

Я хочу быть успешным корпоративным Java-разработчиком. С какими алгоритмами и структурами данных я должен хорошо разбираться? Какие книги вы бы порекомендовали мне?

Чтобы быть успешным Java-разработчиком, мне нужно знать все продвинутые алгоритмы, такие как приведенные в CLRS ?

Можете ли вы предложить список тем, которые я должен изучить в порядке убывания их приоритета?

Должен ли я знать:

  • Поиск?
  • Сортировка?
  • Графики / деревья?

так далее?

Чанки патхак
источник
1
@ Jonsca: Партнерский маркетинг а? ;)
Chankey Pathak
Нет, ну, SE меняет ссылку как таковую, но я просто подумал, что не все знают эти инициалы :)
jonsca

Ответы:

17

«Введение в алгоритмы» Кормена - хорошая книга для некоторых базовых теоретических основ.

Тем не менее, большинство алгоритмов и структур данных уже были закодированы, протестированы и оптимизированы другими, и нет никаких оснований для их повторной реализации еще раз. Чтобы быть успешным Java- разработчиком, вы должны знать The Collections Framework наизнанку.

Joonas Pulakka
источник
3
Тем не менее, вам необходимо знать стоимость алгоритмов: этот поиск в ширину найдет кратчайший путь, например, при использовании потенциально большого пространства.
Фрэнк Шиарар
Договорились, хотя просто получить дух больших обозначений O имеет большое значение.
Joonas Pulakka
8

Если вы хотите быть программистом любого рода, вам необходимо понять все основные структуры данных (стеки, очереди, массивы, связанные списки, хеш-таблицы, деревья и т. Д.). Достаточно, по крайней мере, чтобы вы могли реализовать любой из них для себя, если оказались в мире без рамок коллекций, чтобы выполнить работу за вас.

Что касается алгоритмов, мне кажется, что они являются более инструментами для работы, тогда как ваши структуры данных являются фундаментальными строительными блоками. Я не думаю, что так важно знать детали того, как реализовать каждый алгоритм, с которым вы можете столкнуться. Вам нужно уметь оценивать, насколько хорошо алгоритм будет работать для данной цели. Иногда разница между поиском по глубине и поиском по ширине или типом сортировки, которую вы выполняете над вашими данными, может очень сильно повлиять на производительность или общий успех вашего кода, поэтому очень важно знать, как судить об этом.

glenatron
источник
0

В дополнение к другим ответам я хотел бы просто добавить, что изучение алгоритмов предназначено не только для того, чтобы узнать об известных методиках (что все еще важно), но и для того, чтобы понять процесс мышления, который входит в разработку решение проблемы, с которой вы сталкиваетесь в реальной жизни, не обязательно хорошо известно.

MAK
источник
0

Я изучаю Java сейчас несколько дней.

Я хочу быть успешным корпоративным разработчиком. Тогда с какими алгоритмами и структурами данных я должен хорошо разбираться? Какие книги ты бы мне порекомендовал?

Чтобы быть успешным Java-разработчиком, мне нужно знать все продвинутые алгоритмы, такие как приведенные в CLRS?

Можете ли вы предложить мне список тем, которые я должен изучать в порядке убывания их приоритета?

Скажите мне названия некоторых тем, которые я должен знать. Как поиск, сортировка, графики, деревья и т. Д.?

Хорошо, что вы стремитесь расширить и улучшить свои навыки программирования. Однако важно не рассматривать алгоритмы как каталог вещей для запоминания. То, что вам нужно знать, чтобы стать хорошим разработчиком (на Java или что-либо еще в этом отношении), это понимать алгоритмический анализ.

Вы узнаете об этом, изучив несколько избранных структур данных и алгоритмов и научившись анализировать их производительность с точки зрения времени и пространства (памяти). Поиск, сортировка, графики, деревья, кучи, стеки и все такое хорошее. Это также должно следовать некоторым основам теории вычислений и дискретной математики (даже если в области Java нам никогда не удастся использовать эти две темы напрямую - их преимущества косвенные).

Разделите изучение языка программирования (в вашем случае Java) с изучением алгоритмического анализа (который отличается от «запоминания» алгоритмов и структур данных.)

«Алгоритмы в двух словах» Джорджа Т. Хейнемана, Гэри Поллиса и Стэнли Селкова - хорошее начало. «Алгоритмы» Санджоя Дасгупты, Христоса Пападимитриу и Умеша Вазирани - еще один хороший учебник для студентов.

Лучше всего взять 9-12 кредитных курсов по программированию, а затем пройти курс обучения 3000-уровневому алгоритму. Если исключить это, самостоятельная работа с двумя упомянутыми мною книгами может быть хорошей альтернативой (однако самостоятельная работа может быть не для всех)

Удачи!

luis.espinal
источник