Как я изучаю алгоритмы и структуры данных? [закрыто]


38

Это продолжение моего предыдущего вопроса, где я спросил, нужно ли изучать алгоритмы и структуры данных. Я чувствую, что да, это так.

Сейчас я работаю в среде, где у меня никогда не будет возможности научиться этому, экспериментируя или практически, или на любом задании. Какой правильный подход, например, правильные книги, правильные проблемы, правильные ресурсы, которые я могу использовать, чтобы дать шесть месяцев или год или два для изучения алгоритмов и структур данных? А также сформировать мой разум таким образом, чтобы он мог связать проблемы со структурами данных и алгоритмами.


3
Кормен твой друг :)
Лукаш Мадон

1
@lukas: Все еще не закончил, хотя, там довольно много математики там, с которой я не настолько удобен. Насколько я знаю об алгоритмах, структурах данных и их анализе, это сделало гораздо больше, чем любой другой источник :)
Matthieu M.

Вы также можете попробовать мой проект, который описывает популярные алгоритмы и структуры данных более просто, чем википедия, и содержит исходные коды почти для каждой статьи (структура, подход, алгоритм) ... en.algoritmy.net
malejpavouk

Ответы:


40

Читать.

Нет, правда, читай.

Прочитайте все об алгоритме и дизайне, которые вы можете найти. Там есть феноменальные книги. Книги по алгоритму Седжвика хороши. Руководство по разработке алгоритмов от Skiena также хорошо. Вместе эти книги следуют за мной на каждой книжной полке на каждой работе, на которую я иду, наряду с Мифическим Человеком-Месяцем.

Затем спроси.

Поговорите с людьми, которых вы уважаете. Спросите их, какие точки принятия решений они имели и почему они приняли решения, которые они сделали. Хорошие всегда будут в состоянии сказать вам: «Я решил сделать X, потому что это лучше, чем A, B в этих отношениях. Я мог бы пойти с C, но я чувствовал, что это был лучший выбор из-за этого».

Далее делай.

Сборка вещей. Создавайте вещи, которые вы никогда не будете использовать. Создавайте вещи, которые вам никогда не понадобятся. Иди напиши программу, которая решает головоломку судоку. Теперь иди, сделай это снова. И снова. Постройте его 5 совершенно разными способами. Создайте программу, которая генерирует головоломки Судоку и подайте ее в решатели. Найти, какой решатель является самым быстрым. А потом...

Узнайте почему.

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

И для протокола судоку был примером. Я провел много свободного времени, выполняя это упражнение с кучей логических головоломок в Kongregate, и многому научился на этом пути.

http://www.amazon.com/Bundle-Algorithms-Parts-1-5-Fundamentals/dp/020172684X/ http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1848000693/ http://www.amazon.com/Mythical-Man-Month-Software-Engineering-Anniversary/dp/0201835959/


действительно очень хороший ответ! Мне нравится, как вы сформулировали свой совет!
paxRoman

Я также везде беру с собой книги Седжвика и Скиенны! это, вероятно, еще одна причина, почему я любил ваш ответ!
paxRoman

и кормен в микс пожалуйста.
AruniRC

1
В эпоху постоянно растущего интереса к информации в Интернете важно добавить: читать книги (не только, конечно). A Good Thing ™ - это последовательное, последовательное введение в тему, которая длиннее 2-3 страниц HTML, разделенных рекламой ! Не стоит недооценивать это (и да, конечно, электронные книги в порядке).
Иоахим Зауэр

1
Согласовано. Согласованность является ключевым. Трудно получить структуры данных, когда вы получаете один или два из десятка различных источников. Книги также, как правило, имеют лучшие диаграммы (некоторые блоги / онлайн-источники делают, но в качестве обобщающих книг лучше). В книгах Седжвика особенно удачное сочетание диаграмм, простого кода и описания.
Hounshell

10

Алгоритмы

Я брал уроки магии в группе, когда мне было двенадцать лет. Мага звали Джо Карота. Он сделал трюк один раз, и я выпалил: "Как ты это сделал?" В тот день он сказал что-то, что застряло со мной с тех пор.

Ответ Джо: «Майкл, если ты действительно хочешь знать, как делается этот трюк, ты должен понять, как ты это сделаешь сам».

Ну, конечно, это не то, что я хотел услышать, но все же я сосредоточился на решении проблем. Это было решение проблем с моей точки зрения. Если моя первая попытка решить проблему состояла из семнадцати шагов и была действительно хитрой, хорошей новостью было то, что я решил проблему.

Затем, взглянув на разработанное мной решение и выяснив способы его усовершенствования, я узнаю, как упростить конечный результат. Позже в своей жизни в области компьютерного программирования я узнал, что этот процесс называется «пошаговое уточнение». Я думаю, что сегодня они называют это рефакторингом.

Это работало тогда, это все еще работает сейчас.



2

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


2

Если вы не можете пройти курс по этому вопросу, я бы порекомендовал Руководство по разработке алгоритмов. Там это бесплатный PDF здесь , но это стоит того , чтобы настоящую книгу , если вы планируете программировать профессионально.


Решения здесь. Я считаю, что это здорово, когда они учатся самостоятельно: www2.algorithm.cs.sunysb.edu:8080/mediawiki/index.php/…
Дэвид Ринк,

1

Попробуйте записаться на курс бакалавриата по структурам данных и алгоритмам, всегда полезно изучать эти концепции вместе с другими.


Я выпускник информатики, и с тех пор прошло шесть лет. Я никогда не концентрировался на этих темах: меня привлекали веб, юзабилити, клиент-сервер, и я работаю только над этими областями, но теперь я чувствую, что должен изучить их. О чем ты думаешь.
Сушил Бхарвани

Вернитесь и возьмите курс повышения квалификации :-)
Martijn Verburg

1

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

Решения могут быть представлены на разных языках программирования: от C / C ++ до JavaScript, Lisp, Smalltalk, ассемблер + еще около 40. Таким образом, вы можете полностью сосредоточиться на решении проблемы с любым языком программирования, который вам удобнее.


1

CLRS

Это, безусловно, мой любимый ресурс. Я использовал его в своем курсе по компьютерным алгоритмам для студентов и закончил тем, что купил 4 года спустя книгу для самостоятельного чтения, чтобы подготовиться к моим курсам MS Comp Sci. Это нелегко читать любым способом, но если вы работаете, чтобы понять некоторые из представленных математических / корректурных данных, а затем внедрите псевдокод на своем любимом языке (языках), это будет стоить довольно дорогого ценника. Руководство по разработке алгоритмов, о котором упоминали другие, также является отличным ресурсом для выявления проблем с обучением, но я обнаружил, что CLRS лучше для чистых деталей.


0

Вы всегда можете попробовать что-то вроде этого: http://codekata.pragprog.com/

Я всегда учился лучше, думая об этом, а не читая. Тем не менее, вы должны иметь документацию / материалы для чтения, чтобы искать ответы.


0

Купи эту книгу , займись этим или укради это! Отдых последует :)

Введение в алгоритмы Ривеста и Кормена. Первоначально будет очень трудно следовать, как только вы ознакомитесь с объяснением Mergesort во введении. Все разворачивается к вам красиво.

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.