Які алгоритми та структури даних абсолютно повинен знати розробник? [зачинено]


24

Я хочу бути успішним розробником Java Java. З якими алгоритмами та структурами даних мені слід добре розбиратися? Які книги ви б мені рекомендували?

Щоб бути успішним розробником Java, чи потрібно мені знати всі вдосконалені алгоритми, такі, як наведені в CLRS ?

Чи можете ви запропонувати перелік тем, які я повинен вивчити у порядку зменшення їх пріоритетності?

Повинен я знати:

  • Шукаєте?
  • Сортування?
  • Графіки / дерева?

тощо?


1
@jonsca: Партнерський маркетинг, а? ;)
Чанкі Патхак

Ні, ну, SE міняє посилання як таке, але я просто зрозумів, що не всі знають ці ініціали :)
jonsca

Відповіді:


17

Вступ Кормена до алгоритмів - це хороша книга для деяких основних теоретичних основ.

Зважаючи на це, більшість алгоритмів та структур даних вже були закодовані, протестовані та оптимізовані іншими, і немає причин повторно реалізовувати їх. Щоб бути успішним розробником Java, вам потрібно знати, що колекція «Збірки зсередини».


3
Вам потрібно знати витрати, пов'язані з алгоритмами: цей пошук в першу чергу знайде найкоротший шлях, наприклад, використовуючи потенційно багато місця.
Френк Ширар

Домовились, хоча просто отримання духу великої нотації O проходить довгий шлях.
Joonas Pulakaka

8

Якщо ви хочете бути програмістом будь-якого виду, вам потрібно детально розібратися в усіх основних структурах даних (стеки, черги, масиви, пов'язані списки, хештелі, дерева тощо). Достатньо хоча б того, що ви могли б реалізувати будь-який із них для себе, якби опинилися у світі, де немає колекційних колекцій, які могли б виконати роботу за вас.

Що стосується алгоритмів, то мені здається, що вони більше інструментів для роботи, тоді як ваші структури даних є основними складовими. Я не думаю, що важливо знати подробиці, як реалізувати кожен алгоритм, на який ви можете зіткнутися. Те, що вам потрібно зробити, - це оцінити, наскільки добре алгоритм буде працювати для певної мети. Іноді різниця між глибиною першої та глибинної пошуку або типом сортування, який ви виконуєте за вашими даними, може мати дуже велике значення для продуктивності чи загального успіху вашого коду, тому знаючи, як судити, це дуже важливо.


0

На додаток до інших відповідей, я хотів би лише додати, що вивчення алгоритмів - це не лише для того, щоб знати про відомі методики (що все ще важливо), але й щоб мати можливість зрозуміти про процес мислення, який перетворюється на розробку. рішення проблеми, з якою ви стикаєтеся в реальному житті, не обов'язково добре відоме.


0

Я зараз навчаюсь Java.

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

Щоб бути успішним розробником Java, чи потрібно мені знати всі вдосконалені алгоритми, такі, як наведені в CLRS?

Чи можете ви запропонувати мені список тем, які я повинен вивчити у порядку зменшення їх пріоритетності?

Скажіть мені назву деяких тем, які я повинен знати. Як пошук, сортування, графіки, дерева тощо?

Добре, що ви прагнете розширити та вдосконалити свої навички програмування. Однак важливо не трактувати алгоритми як каталог речей, що запам'ятовуються. Що потрібно знати, щоб стати хорошим розробником (на Java або що-небудь ще з цього питання) - це зрозуміти алгоритмічний аналіз.

Ви дізнаєтесь це, вивчивши декілька структур даних та алгоритмів та навчившись аналізувати їхню ефективність у часі та просторі (пам'яті). Пошук, сортування, графіки, дерева, купи, усі ці добрі речі. Слід також слідувати деяким основам теорії обчислень та дискретної математики (навіть якщо в царині Ява нам ніколи не вдасться безпосередньо використовувати ці дві теми - їх переваги непрямі.)

Відокремте вивчення мови програмування (у вашому випадку Java) з вивченням алгоритмічного аналізу (що відрізняється від "запам'ятовування" алгоритмів та структур даних.)

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

Найкраще подумати - пройти 9-12 кредитних курсів програмування перед тим, як взяти нижчий, 3000-рівень рівня алгоритмів. Заперечуючи це, самонавчання з двома згаданими мною книгами може бути хорошою альтернативою (хоча самонавчання може бути не для всіх.)

Удачі!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.