Алгоритмы и структуры данных

Выбор алгоритмов и структур данных для решения той или иной задачи ложится на плечи программиста, и от этого выбора зависит быстродействие, скорость отклика, объем потребляемых ресурсов и другие характеристики системы. Конечно, для некоторых задач у разработчика руки связаны, или решения лежат на поверхности, а для некоторых — наоборот: приходится делать исследования, и высчитывать сложность того или иного алгоритма.

Алгоритмы, которые приходится мне использовать, иногда тривиальны, иногда они не входят в когорту «классических» алгоритмов/структур, т.к. используют архитектурные особенности FPGA. В рамках университетского курса моей специальности («Защищенные системы связи») не предполагалось какой-то серьезной подготовки со стороны математики и алгоритмистики (по сравнению с матмехом, конечно), и так получалось, что особого внимания этому пункту я не уделял.

В середине сентября наткнулся на сообщение о том, что Computer Science Center запускает онлайн курсы по Алгоритмам, Архитектуре ЭВМ и С++. Курс «Архитектура ЭВМ» я уже прослушал на лекториуме (кстати, рекомендую), C++ мне был не так интересен, а вот «Алгоритмы» привлекли свое внимание: в качестве аудитории были указаны студенты младших курсов, и был заявлен такой набор языков как C++, Java, Python, Octave, Haskell. Удобная возможность восполнить пробелы в алгоритмах и попрактиковаться в программировании!

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

Задачи трех типов:

  • Тесты (на один или несколько правильных вариантов). Самые простые и «дешевые».
  • Программирование. Для решения необходимо написать программу: затем она тестируется на различных входных данных, и выводится один из результатов: «верно», «неправильный ответ», «не уложилось по времени». Были и простые, и сложные задания.
  • Развернутый ответ. Предлагается задача, которую надо решить «словесно», чаще всего надо было придумать какой-то алгоритм, доказать его корректность и оценить время работы. После дедлайна публикуется ответ от лектора, и такие же слушатели как ты выставляют тебе оценки за работу (и ты так же принимаешь участие в оценке других).

heap_task

Несмотря на то, что на просмотр курса и решение задач уходило значительное время выходных (в будни по вечерам банально было не до этого), я получил громадное удовольствие и узнал кое-что новое, конечно. Я решал задания на языке Python, и пожалел только один раз о своем выборе: одно и из заданий было запрещено сдавать на Python и Haskell, т.к. у них из коробки работает длинная арифметика (увы, как потом оказалось, это было самое «дорогое» задание за весь курс). Еще раз убедился, что Python очень хорош при быстрой разработке.

Как я понял из комментариев, курс будет доступен в онлайне до Нового Года: можете попытать свои силы в решении задач, правда баллов за это вы не получите. Надеюсь, что выйдет вторая часть этого курса в таком же формате. Благодарю Александра Куликова и всю команду, которая помогала ему делать этот курс: ребята делают хорошее и правильное дело. С очень большим уважением отношусь к Александру и его работе со студентами. Нельзя не отметить и команду stepic.org, которая смогла обеспечить постоянный онлайн курсов: да, были шероховатости, где-то подвисало, но это дело наживное.

А проходили ли вы какие-то видеокурсы?