Я хочу быть успешным корпоративным Java-разработчиком. С какими алгоритмами и структурами данных я должен хорошо разбираться? Какие книги вы бы порекомендовали мне?
Чтобы быть успешным Java-разработчиком, мне нужно знать все продвинутые алгоритмы, такие как приведенные в CLRS ?
Можете ли вы предложить список тем, которые я должен изучить в порядке убывания их приоритета?
Должен ли я знать:
- Поиск?
- Сортировка?
- Графики / деревья?
так далее?
java
learning
algorithms
data-structures
Чанки патхак
источник
источник
Ответы:
«Введение в алгоритмы» Кормена - хорошая книга для некоторых базовых теоретических основ.
Тем не менее, большинство алгоритмов и структур данных уже были закодированы, протестированы и оптимизированы другими, и нет никаких оснований для их повторной реализации еще раз. Чтобы быть успешным Java- разработчиком, вы должны знать The Collections Framework наизнанку.
источник
Если вы хотите быть программистом любого рода, вам необходимо понять все основные структуры данных (стеки, очереди, массивы, связанные списки, хеш-таблицы, деревья и т. Д.). Достаточно, по крайней мере, чтобы вы могли реализовать любой из них для себя, если оказались в мире без рамок коллекций, чтобы выполнить работу за вас.
Что касается алгоритмов, мне кажется, что они являются более инструментами для работы, тогда как ваши структуры данных являются фундаментальными строительными блоками. Я не думаю, что так важно знать детали того, как реализовать каждый алгоритм, с которым вы можете столкнуться. Вам нужно уметь оценивать, насколько хорошо алгоритм будет работать для данной цели. Иногда разница между поиском по глубине и поиском по ширине или типом сортировки, которую вы выполняете над вашими данными, может очень сильно повлиять на производительность или общий успех вашего кода, поэтому очень важно знать, как судить об этом.
источник
В дополнение к другим ответам я хотел бы просто добавить, что изучение алгоритмов предназначено не только для того, чтобы узнать об известных методиках (что все еще важно), но и для того, чтобы понять процесс мышления, который входит в разработку решение проблемы, с которой вы сталкиваетесь в реальной жизни, не обязательно хорошо известно.
источник
Хорошо, что вы стремитесь расширить и улучшить свои навыки программирования. Однако важно не рассматривать алгоритмы как каталог вещей для запоминания. То, что вам нужно знать, чтобы стать хорошим разработчиком (на Java или что-либо еще в этом отношении), это понимать алгоритмический анализ.
Вы узнаете об этом, изучив несколько избранных структур данных и алгоритмов и научившись анализировать их производительность с точки зрения времени и пространства (памяти). Поиск, сортировка, графики, деревья, кучи, стеки и все такое хорошее. Это также должно следовать некоторым основам теории вычислений и дискретной математики (даже если в области Java нам никогда не удастся использовать эти две темы напрямую - их преимущества косвенные).
Разделите изучение языка программирования (в вашем случае Java) с изучением алгоритмического анализа (который отличается от «запоминания» алгоритмов и структур данных.)
«Алгоритмы в двух словах» Джорджа Т. Хейнемана, Гэри Поллиса и Стэнли Селкова - хорошее начало. «Алгоритмы» Санджоя Дасгупты, Христоса Пападимитриу и Умеша Вазирани - еще один хороший учебник для студентов.
Лучше всего взять 9-12 кредитных курсов по программированию, а затем пройти курс обучения 3000-уровневому алгоритму. Если исключить это, самостоятельная работа с двумя упомянутыми мною книгами может быть хорошей альтернативой (однако самостоятельная работа может быть не для всех)
Удачи!
источник