Всем привет. Совсем недавно я рассуждал о том, как изучить графы. Сегодня я решил поговорить на похожую тему: о том, как можно улучшить свои знания в области алгоритмов и структур данных.
Самое первое, с чего нужно начать изучение какой-то темы — это определение цели изучения данного предмета. Как всем хорошо известно, без стимула что-то изучать крайне трудно. Эта человеческая особенность, которую можно использовать во благо себе. Например, если человек хочет эмигрировать в США, то он крайне заинтересован в изучении английского языка, и процесс изучения проходит довольно быстро. С другой стороны, когда многим школьникам язык практически не нужен, большинство из них так и не начинают говорить на английском языке к концу 11-ого класса.
Зачем можно изучать алгоритмы и структуры данных? Причин несколько. Во-первых, нельзя стать хорошим разработчиком, не зная такие базовые вещи, как основные алгоритмы и структуры.
Во-вторых, в огромном количестве интервью вам будут задавать вопросы по алгоритмам. Не важно, пригодятся вам эти знания во время выполнения работы, или нет. Правильно ли задавать такие вопросы на интервью — дело десятое, нам, разработчикам, просто стоит принять этот факт и изучить алгоритмы.
Кроме того, некоторым из нас действительно знания по алгоритмам и структурам данных пригодятся на работе. Конечно, не все будут писать свои сортировки, но имплементировать какие-то алгоритмы уж точно придётся.
Лично я почувствовал необходимость в изучении алгоритмов и структур данных примерно на 2-м курсе, когда проходил первые несколько интервью на джуниорские позиции. Мне поступало довольно много вопросов по этой теме.
К сожалению, в своём институте я практически не изучал алгоритмы. Формально этот курс у меня был. Однако его вела молодая девушка (23 года, если я правильно помню), которая практически ничего не знала в этой теме. Всё, что мы успели пройти за семестр — это связанный список и бинарный поиск.
Как же я восполнял пробелы в этой теме? Первое, что я сделал — это посмотрел отличную запись лекций по алгоритмам и структурам данных от Лекториум — Первый семестр, Второй семестр. Курс читается Александром Куликовым, а также Михаилом Дворкином. Это два талантливых преподавателя, которые посветили себя алгоритмам.
Данный курс — один из лидеров по теории в сфере алгоритмов и структур данных. Вы последовательно пройдете все основные алгоритмы и структуры данных. Всё начнётся с классических вещей (вычисление числе Фибоначчи), а закончится вполне себе интересными темами.
Честно сказать, я осилил только первый семестр, а также несколько лекций второго. Дальше без первичной подготовки мне было уже сложно.
Чем хорош этот курс? Во-первых, это гениальные преподаватели. Они действительно рассказывают очень интересно (правда, надо признаться, во всех видео курсах по алгоритмам, которые я видел, были замечательные преподаватели). Во-вторых, это отличная структура курса: от простого к сложному. Можно начать изучать алгоритмы практически без подготовки.
Чем плох этот курс? Данные видео — это запись реальных лекций, а не специально создававшийся видео курс. Поэтому, тут нет ни тестов, ни программирования. Есть только голая теория.
Кстати, этот курс представляет собой некоторую выжимку книги Кормен, Риверст, Лейзерсон. Алгоритмы: построение и анализ.
Данный курс — альтернатива первому. Он тоже представляет собой запись реальных лекций, которые проходят в школе анализа данных Яндекса. Плюсы и минусы у курсов опять-таки схожи.
Ведет курс Максим Александрович Бабенко — невероятно крутой специалист в области CS. Этого преподавателя действительно приятно слушать: рассказывает весьма живо и интересно.
Как мне показалось, этот курс немного сложнее, чем курс от Лекториум.
Когда мы говорим про алгоритмы, я просто не имею права ничего не сказать про книгу Кормена — Кормен, Риверст, Лейзерсон. Алгоритмы: построение и анализ. Это действительно кладезь знаний по теме алгоритмов и структур. Книга позволит вам с нуля прокачаться до вполне серьезного уровня.
Какие плюсы книги? Есть всё: человеческое объяснение, псевдокод, оценка сложности, обоснование корректности.
Какие минусы книги? Книга совершенно точно не подойдёт для новичков в области алгоритмов. Она описывает буквально каждую мелочь в этой теме, и это может быть весьма непонятным для новичков.
Думаю, все из вас знают, что такое Coursera. Если вы не слышали про это, то это онлайн платформа для обучения. Причём, одна из самых крупных.
В Coursera есть несколько курсов, посвящённых алгоритмам и структурам данных. Я сам их не изучал, но, говорят, что курсы очень крутые. Курс 1. Курс 2.
Как говорится, читать книги можно бесконечно много, но без выполнения задач и программирования алгоритмов нельзя качественно изучить данную тему. Существует несколько вариантов, как вы можете попрактиковаться в алгоритмах. Это и интерактивные курсы (большинство из них проходит на английском языке). Это и олимпиадные задачки.
Лично я выбрал для себя сайт http://codeforces.com/. В нём все задачи разбиты по тегам (например, можно выбрать задачи, которые должны решаться динамическим программированием). Также есть и разграничение по уровню сложности. Всё это позволяет найти подходящие задачи для своего уровня.
Надеюсь, эти материалы помогут вам повысить свой уровень в сфере алгоритмов и структур данных. Если я упустил какой-то хороший ресурс по изучению данной теме, напишите, пожалуйста, о нём в комментариях.
Категории: Программирование