Рубрика «Блог компании СПБАУ» - 4

Часто на собеседованиях в магистратуру АУ или CS центр ребята затрудняются ответить на вопросы об элементарных понятиях как из классической, так и из дискретной математики. А эти знания требуются для освоения курсов алгоритмов, машинного обучения и прочих Computer Science дисциплин. Чтобы облегчить подготовку, Академический университет совместно с Computer Science Center этой весной запускают два онлайн-курса:
Обзорные онлайн-курсы по математике - 1

  1. Ликбез по дискретной математике. Преподаватель — А.В. Омельченко (СПбАУ РАН).
  2. Введение в математический анализ. Преподаватель — А.И. Храбров (СПбГУ, СПбАУ РАН, CS центр).

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

Курсы размещены на дружественной платформе Stepic.
Читать полностью »

Бакалавриат СПбАУ. Начало - 1Магистратура Академического университета готовит специалистов в сфере IT уже 7 лет. И из года в год мы сталкиваемся с недостаточной подготовленностью поступивших по профильным для нас курсам. Как следствие, нам приходится преподавать в магистратуре базовые (бакалаврские) курсы. Поэтому вполне закономерно, что мы пришли к идее открыть свой собственный бакалавриат.

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

Академический университет поощряет и спонсирует участие студентов в мероприятиях научно-образовательного характера. В частности, довольно часто наши студенты участвуют в международных студенческих школах. Участие в студенческой школе позволяет не только узнать об актуальном состоянии науки и технологий, но и вживую пообщаться с ведущими исследователями и завести связи в сообществе. Кроме того, на некоторых школах студентам предоставляется возможность сделать доклад (на т.н. student session) о том, чем он в данный момент занимается (например, о своей магистерской работе). Это очень полезно, особенно, если студент хочет в дальшейшем заниматься исследованиями. Вполне возможно, что на такой школе студент определится с дальнейшими направлениями исследований или даже найдёт научного руководителя.

Студенческие школы в образовании - 1

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

В качестве примера, публикуем отчёт нашего студента Кирилла Елагина о поездке на Estonian Winter School in Computer Science в 2014 г. Эта школа проходит в Эстонии каждый год и наши студенты регулярно её посещают.

Читать полностью »

Идея вводного курса по работе с Linux возникла у нас с коллегами довольно давно. Я с 2011 года занимаюсь биоинформатикой в Лаборатории алгоритмической биологии СПбАУ РАН (тут и тут мой напарник писал про то, чем мы занимаемся). Сразу нужно сказать, что работа биоинформатика без Linux практически невозможна, поскольку большинство биоинформатических программ созданы именно под эту операционную систему и работают только на ней.

xkcd.com/456/

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

На основе нашего опыта я и мой коллега Андрей Пржибельский (andrewprzh) изначально собирались провести несколько занятий для биологов по компьютерной грамотности. А потом эта идея выросла в трехнедельный открытый онлайн-курс (MOOC) Института биоинформатики на русском языке, который позже был сужен до именно введения в Linux, как отправной точки, — поскольку вместить все в три недели оказалось очень и очень трудно. Курс уже начался и оказался достаточно популярен (на данный момент на него записалось более пяти тысяч человек), но первый дедлайн по заданиям — 24 ноября, поэтому еще можно присоединиться без потери баллов или просто изучать курс в свободном режиме (все материалы останутся открытыми).
Читать полностью »

Думаю, что многие читатели Хабра уже слышали о биоинформатике, возможно даже непосредственно о задаче сборки генома. Множество людей по всем миру занято написанием геномных ассемблеров — программ, интерпретирующих сырые данные машин для секвенирования и выдающих в результате последовательность ДНК изучаемого организма. Однако, в большинстве случаев, геном целиком «из коробки» получить не удается. В этой статье я постараюсь объяснить, почему же геном нельзя собрать одним щелчком мыши и опишу процесс его «финиширования» — пожалуй, самый трудоемкий этап во всей сборке, порой длящийся несколько лет.

Также, я расскажу, как мы иногда можем существенно облегчить этот процесс, используя уже собранные геномы близкородственных организмов. Этой задачей я занимался в рамках написания своей магистерской диссертации в Санкт-Петербургском Академическом Университете, а обучение проходило совместно с Институтом Биоинформатики. Поскольку получившийся алгоритм достаточно специфичен, я начну с описания проблемы в целом, дам обзор некоторых «хардварных» методов ее решения, а затем немного расскажу о том, что же получилось у меня.

Читать полностью »

На этой неделе я начал читать бакалаврам Академического университета базовый курс по алгоритмам. Начинал я совсем с основ, и чтобы тем, кто с базовыми алгоритмами уже знаком, было чем заняться, я в начале пары сформулировал две, наверное, самые свои любимые задачки по алгоритмам. Давайте и с вами ими поделюсь. Решение одной из них даже под катом подробно расскажу. Но не отказывайте себе в удовольствии и не заглядывайте сразу под кат, а попытайтесь решить задачи самостоятельно. Обещаю, что у обеих задач есть достаточно простые решения, не подразумевающие никаких специальных знаний по алгоритмам. Это, конечно, не означает, что эти решения просто найти, но после пары один из студентов подошёл и рассказал правильное решение первой задачи. =) Если же вам интересно посмотреть на начало курса или порешать больше разных задач — приходите к нам на (бесплатный) онлайн-курс, который начнётся 15 сентября.

Задача 1. Дан массив A длины (n+1), содержащий натуральные числа от 1 до n. Найти любой повторяющийся элемент за время O(n), не изменяя массив и не используя дополнительной памяти.

Сразу поясню. В условии не говорится, что каждое число от 1 до n встречается в массиве, поэтому повторяющихся элементов там может быть сколько угодно (если бы все числа входили по разу, а одно — дважды, то задача была бы гораздо проще). Ограничение на использование дополнительной памяти означает, что нельзя заводить дополнительный массив линейной длины, но можно заводить переменные.

Задача 2. Дана матрица nxn, содержащая попарно различные натуральные числа. Требуется найти в ней локальный минимум за время O(n).

Локальным минимумом матрицы называется элемент, который меньше всех своих четырёх соседей (или трёх, если этот элемент лежит на границе; или двух, если это угловой элемент). Обратите внимание, что от нас требуется линейное по n время, хотя в матрице квадратичное по n число элементов. Поэтому мы предполагаем, что матрица уже считана в память. И нам нужно найти в ней локальный минимум, обратившись лишь к линейному количеству её ячеек.

Под катом — решение первой задачи. Ещё раз призываю вас заглядывать под кат только после того, как порешаете задачу. По второй задаче могу какую-нибудь подсказку сказать.
Читать полностью »

Computer Science Center (образовательный проект ШАД Яндекса, компании JetBrains и Сomputer Science клуба при ПОМИ РАН) продолжает регистрацию на бесплатные массовые открытые онлайн-курсы (MOOC) по основам программирования.
Опыт применения онлайн курсов в Computer Science Center
Как мы уже писали, с 15 сентября 2014 года можно будет пройти следующие онлайн-курсы:
1. Алгоритмы и структуры данных (А.С. Куликов)
2. Введение в архитектуру ЭВМ. Элементы операционных систем (К.В. Кринкин)
3. Программирование на языке C++ (А.В. Смаль)

В данном посте пойдёт речь о том, как CS центр использовал онлайн-курс по Алгоритмам и структурам данных в качестве одного из этапов приёмной кампании в 2014 году.
Читать полностью »

Дорогие читатели,

так как онлайн-курсы продолжают захватывать планету, а в России этот процесс идет весьма медленно, то мы решили внести свой вклад в популяризацию онлайн-образования среди русскоязычных преподавателей и провести конкурс на создание открытых курсов с использованием некоммерческой платформы Stepic.
Конкурс проектов открытых онлайн курсов Stepic Challenge
Мы сделали небольшой анализ существующих возможностей получить поддержку для создания открытого интернет-курса на русском языке и пришли к выводу, что вариантов совсем немного. Получить грант на эти цели можно от Благотворительного фонда В. Потанина (но только при условии, что вы – преподаватель магистратуры), свои внутренние бюджеты на развитие дистанционного обучения есть у ряда университетов (например, у НИУ ИТМО, СПбГПУ, НИУ ВШЭ, СПбГУ, МФТИ), некоторые платформы покрывают часть расходов на создание курсов (например, «Лекториум»). Возможно, есть и другие варианты, добавляйте в комментариях, если знаете.
Читать полностью »

Комбинаторика в старших классах школы, как правило, ограничивается текстовыми задачами, в которых нужно применить одну из трёх известных формул — для числа сочетаний, перестановок или размещений. В институтских курсах по дискретной математике рассказывают и о более сложных комбинаторных объектах — скобочных последовательностях, деревьях, графах… При этом, как правило, ставят задачу вычислить количество объектов данного типа для некоторого параметра n, например количество деревьев на n вершинах. Узнав количество объектов для фиксированного n, можно задаться и более сложным вопросом: как все эти объекты за разумное время предъявить? Алгоритмы, решающие подобного рода задачи, называются алгоритмами комбинаторной генерации. Таким алгоритмам, например, посвящена первая глава четвёртого тома «Искусства Программирования» Дональда Кнута. Кнут очень подробно рассматривает алгоритмы генерации всех кортежей, разбиений числа, деревьев и других структур. Придумать какой-нибудь алгоритм, работающий умеренно быстро, для каждой из этих задач несложно, но с дальнейшей оптимизацией могут возникнуть серьёзные проблемы.

В процессе написания магистерской диссертации, защищённой в Академическом Университете, мне потребовалось изучить и применить один из алгоритмов комбинаторной генерации, подходящий для особого класса задач. Это генерация структур, на которых дополнительно введено некоторое отношение эквивалентности. Чтобы было понятно, о чём идёт речь, я приведу простой пример. Давайте попробуем сгенерировать все триангуляции шестиугольника. Получится что-нибудь такое:

Один алгоритм комбинаторной генерации

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

Один алгоритм комбинаторной генерации

Читать полностью »

В этом году в московском офисе Яндекса пройдёт юбилейная 25-я конференция Combinatorial Pattern Matching — главное в мире событие в области алгоритмов на строках.

Конференция начнётся с открытых лекций известных ученых, являющихся отцами-основателями серии конференций и внёсшими огромный вклад в область алгоритмов на строках:

Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js