Гостевая лекция Института биоинформатики. Подробнее: http://bioinformaticsinstitute.ru/lectures/1218
Несмотря на несерьезное название, на лекции разговор пойдет о важной проблеме в работе биоинформатика, почти любая реальная задача которого связана с обработкой и анализом больших данных. И решить задачу нужно не только правильно, но и эффективно. Процесс решения можно условно разделить на две части: «придумать», как решать, и «обучить» этому компьютер. И на лекции речь пойдет именно об эффективном «обучении».
Наивно реализованные алгоритмы работают неприемлемо долго, когда дело доходит до гигабайтов реальных данных. От биоинформатика уже требуются не просто базовые навыки программирования, но и знание технических нюансов. И даже у профессионального программиста уйдет немало времени, например, чтобы выгодно использовать возможности Hadoop при работе с Big Data. Так можно ли современному ученому обойтись без тщательного изучения кучи языков, библиотек и фреймворков и сосредоточиться именно на решении?
Ядерный век прошел, и становится все понятнее, что в фокусе науки 21-го века будут живые системы, медицина, и человек во всех его проявлениях. Здесь осуществляются самые масштабные финансовые вливания, и на эту отрасль человечество возлагает самые большие надежды. Все чаще слышатся предметные обсуждения тем, казавшихся еще недавно научной фантастикой: сможет ли человечество победить старение, рак, и другие смертельные заболевания? Сможет ли менять свой геном по собственному желанию? Будем ли мы хозяевами своим телам в той же мере, как мы хозяйничаем на Земле?
Многие десятилетия биология и медицина развивались как описательные науки. Однако по мере созревания и накопления информации, любая наука рано или поздно переходит на более точный язык - язык математики. Проект "Геном человека" обеспечил технологический прорыв, который будет питать науку о живом еще много лет - но который также поставил много новых глобальных вопросов перед современными учеными.
http://bioinformaticsinstitute.ru/guests
В пятницу 10 октября в 19.00 Мария Шутова (ИоГЕН РАН) выступала в Институте биоинформатики с открытой лекцией, посвященной изучению рака.
Рак -- одна из наиболее распространенных причин смерти по всему миру. В лекции рассматривается, как знания об эволюции, работе генома, репрограммировании, а также использование биоинформатических методов помогли лучше понять, как развивается раковая опухоль и предложить новые методы лечения разнообразных типов рака. Рассмотрены мышиные модели развития рака и интересные результаты, которые были получены с их помощью.
http://bioinformaticsinstitute.ru/lectures
Гостевая лекция Института биоинформатики, 9 октября 2014. Лектор -- Мария Шутова (ИоГЕН РАН).
За последние десять лет плюрипонтентные клетки стали героями двух Нобелевских премий и многих тысяч научных и научно-популярных статей. Их уникальная возможность превращаться в любую клетку взрослого организма до сих пор дает пищу для ума как биологам развития, так и ученым, ищущим способы лечения генетических заболеваний. В лекции будет рассказано о двух типах плюрипотентных клеток: "естественных" (эмбриональные стволовые клетки) и "искусственных" (индуцированные плюрипотентные стволовые клетки). Отдельно мы остановимся на том, как знания о работе транскрипционных факторов помогли репрограммировать клетки, и как эти "искусственные" плюрипотентные клетки можно использовать в медицине.
В своей лекции Андрей Афанасьев рассказал о стартапах в биотехе и биоинформатике и своем биоинформатическом проекте iBinom, разобрал несколько биотехнологических проектов глазами инноваторов и инвесторов, а также коснулся вопроса поиска инвестиций и поделился личным опытом взаимодействия с венчурными фондами и институтами развития.
2. Suffix array vs Suffix tree?
1. Проблема дополнительной памяти.
2. Аллокатоция памяти.
3. Достаточно высокая сложность реализации.
Основные проблемы суффиксного дерева:
2/15
3. Постановка задачи
Пусть у нас есть некоторый образец P и текст S, требуется найти все вхождения образца в
тексте.
3/15
4. Основные термины и понятия
Суффиксный массив — это массив лексикографически отсортированных суффиксов.
Ранг суффикса — то место, которое займет суффикс при сортировке, то есть его позиция в
суффиксном массиве.
S - Текст в котором происходит поиск, P - шаблон который мы ищем.
lcp — longest common prefix
4/15
6. Наивный алгоритм поиска
sip sip sip
I i i
Ippi ippi ippi
Issippi issippi issippi
Ississippi ississippi ississippi
Mississippi mississippi mississippi
Pi pi pi
Ppi ppi ppi
Sippi sippi sippi
Sissippi sissippi sissippi
Ssippi ssippi ssippi
Ssissippi ssissippi ssissippi
Простейший способ узнать, встречается ли образец в тексте, используя суффиксный массив,
— взять первый символ образца и бинарным поиском по суффиксному массиву найти
диапазон с суффиксами,начинающимися на такую же букву.
6/15
8. Вопросы на понимание
Какова сложность простейшего поиска?
Бинарный поиск работает за время равное O(log|S|), а сравнение суффикса с образцом не
может превышать длины образца.
Таким образом время работы алгоритмы O(|P|log|S|), где S— текст, P— образец.
8/15
9. Ускоренный наивный алгоритм поиска
Основная идея заключается в вычислении общего префикса на краях диапазона.
Обозначения:
L=lcp(suffix[l],P)
R=lcp(suffix[r],P)
Утверждение первое: Префикс для любой строки внутри диапазона lcp не меньше, чем
минимум этих двух чисел.
Утверждение второе: Если общий префикс образца и любой строки внутри диапазона
не меньше m=min(L,R), то m символов можно пропускать сразу.
Пример:
L: ACCTCCCC
....
R: ACCTGGGG
P: ACCTGGAA
9/15
10. Создание LCP
LCP-массив — это массив значений lcp между лексикографически-соседними суффиксами.
Построить массив lcp достаточно просто. Решение в лоб, это идти по суффиксному
массиву и считать lcp соседних — это O(N^2).
Но если идти по массиву в правильном порядке, то можно использовать информацию с
предыдущего шага для расчетов.
А именно, если перебирать суффиксы в том порядке, в котором они встречаются в исходной
строке. Мы получим lcp-массив за линейное время O(N).
10/15
11. Задачи RMQ
Range Minimum (Maximum) Query – запрос минимума (максимума) на отрезке в массиве.
Пусть дан массив A[1..n]. Нам необходимо уметь отвечать на запрос вида «найти минимум
на отрезке с i-ого элемента по j-ый».
Постановка задачи:
Более-менее простые алгоритмы позволяют отвечать на запросы за <O(nlogn),O(1)>.
Нас может устроить и такое решение, если мы строили массив за O(nlogn), но можно
быстрее...
11/15
12. Алгоритм Фарака-Колтона и Бендера:
Алгоритм применяется для решения за <O(n),O(1)> времени специального случая задачи
RMQ (поиск минимума на отрезке),
в котором соседние элементы входной последовательности различаются на ±1.
Применение в нашей задаче:
Построим так называемый lcp-массив — это массив значений lcp между
лексикографически-соседними суффиксами.
12/15
13. Быстрый поиск:
Условные обозначения:
Lp и Rp - левая и правая границы диапазона ответов в суффиксном массиве.
L - левая граница диапазона поиска (изначально равна 0).
R -правая граница диапазона поиска (изначально равна |S|-1).
M=(R+L)/2
l=lcp(suffix[L],p)
r=lcp(suffix[R],p)
ml=lcp(suffix[L],suffix[M])
mr=lcp(suffix[M],suffix[R])
Подсчет и можно производить за O(1), если применять алгоритм Фарака-Колтона и
Бендера. Любая пара суффиксов suffix[] из диапазона [L,M] имеет хотя бы ml
совпадений в префиксах. Аналогично любая пара суффиксов suffix[] из диапазона
[M,R] имеет хотя бы mr совпадений в префиксах.
1. ml>l,L=M, l не меняем.
2. ml=l, (R=M, r=l+k+1) или (L=M,l=l+k+1)
3. ml<l,R=M,r=ml
13/15
14. Подводим итоги
Операция Suffix tree Suffix array
Построение: O(|s|) O(|s|)
Поиск: O(|p|) O(log|s|+|p|)
Память: O(|s|) O(|s|)
14/15