Графы де Брюина
Определение: |
Графом де Брюина (англ. De Bruijn graph) с параметром | для -буквенного алфавита называется ориентированный граф , где множество всех слов длины в заданном алфавите, и слово длины в заданном алфавите такое, что и . Обозначается как
Основные свойства
Лемма (об эйлеровости графа): |
Граф де Брюина эйлеров |
Доказательство: |
Ориентированный граф является эйлеровым, если число входящих рёбер равно числу исходящих. Докажем, что это верно для | . А именно, что верно, что . Докажем первое равенство, второе аналогично. Существует ровно символов алфавита, которые можно добавить в конец слова , соответствующему вершине . Получим ровно различных слов. И у всех этих слов различные суффиксы длины . Таким образом, из вершины выходит ровно рёбер и входит тоже рёбер. Значит, граф де Брюина эйлеров.
Лемма (о количестве вершин и рёбер в графе): |
В графе де Брюина |
Доказательство: |
Число вершин очевидно находится из определения графа и равно | . Число рёбер следует из доказательства предыдущей леммы: каждой вершине инцидентно ровно ребра. Таким образом,
Лемма (о равносильном определении): |
В графе де Брюина |
Доказательство: |
Составим слово , где общая часть слов, соответствующих вершинам . А символы первый и последний символ этих слов соответственно. Из определения графа де Брюина следует, что ребро существует. Возьмём подстроку слова (из определения) без крайних символов (её длина ). Так же из определения следует, что это будет суффиксом строки, соответствующей вершине , и префиксом для строки, соответствующей . |
Лемма (о графе с | ):
Граф де Брюина полный граф. |
Доказательство: |
Действительно, для любых (необязательно различных) вершин | , где слова (символы), соответствующие вершинам . И тогда очевидно, что существует ребро .
Алгоритм построения
Задача: |
Дан алфавит длины | и длина слов . Построить по ним граф де Брюина.
Алгоритм:
1. Создаём пустой граф из
вершин.2. Генерируем слово длины
.3. Считаем префикс
и суффикс длины для текущего. Причём установим в алфавите отношение порядка и будем рассматривать его символы как цифры в -значной системе счисления.4. Проводим ребро
в графе. Переходим к пункту (например, будем перебирать в порядке лексикографического возрастания), пока не будут перебраны все слова длины .Корректность: перебраны все слова длины
, следовательно, были рассмотрены все возможные пары вершин, между которыми проведено ребро.Время работы:
Применение графов де Брюина
Задача: |
Известно, что пароль имеет длину | , и состоит из цифр от до . Требуется вывести кратчайшую последовательность цифр, которая гарантированно содержит пароль как подстроку.
Решение:
1. Составим граф де Брюина
.2. Найдём в построенном графе эйлеров цикл. Он существует, так как граф де Брюина эйлеров по первой лемме.
3. Слово, соответствующее первой вершине цикла, возьмём полностью (
символов), затем будем последовательно добавлять в конец строки последний символ слова вершины, в которую был осуществлён переход. Так как рёбер , получим последовательность длиной .Корректность:
1. Очевидно, что последовательность меньшей длины составить нельзя: в полученной последовательности ровно
подстрок длины , и именно столько чисел можно составить из цифр от до .2. Двум разным рёбрам
соответствует два различных слова длины . Иначе и . То есть это одно и то же ребро, при этом кратных рёбер в графе нет.3. Отсюда следует, что в последовательности содержится
различных подстрок длины . И короче последовательность получить нельзя. Значит, мы получили ответ за , то есть за время построения графа де Брюина .
Задача: |
Даны неповторяющиеся последовательности нуклеотидов (риды) длины | . Известно, что все подстроки генома длины входят в данное множество ридов. Построить возможный геном.
Пояснение:
Геном (как и его части
риды) является словом из -символьного алфавита , где символы так же называются нуклеотидами. В реальности длины ридов находятся обычно в диапазоне - нуклеотидов, а геном может содержать от нуклеотидов у простейших организмов. При этом учёные могут получать информацию только о ридах (в силу размера последовательностей) физическим путем (метод секвенирования).Решение:
Решение этой задачи очень простое после решения предыдущей задачи. Построим граф
, где вершинами будут являться суффиксы и префиксы длины всех ридов. Получили подграф графа де Брюина (подграф, так как в нём есть не обязательно все вершины), где каждому ребру соответствует рид. Найдём в нём эйлеров путь. Он существует, так как на геном было наложено условие о том, что все его подстроки длины входят в наше множество ридов. Этот путь является возможным ответом. Очевидно, что единственно верный ответ (коим является реальный геном реального существа) получить можно не всегда, так как не всегда в графе есть единственный эйлеров путь.Комментарий:
К сожалению, кроме того, что алгоритм работает за
, в реальности есть немало технических проблем:1. Как можно догадаться из пояснения: едва ли риды обязательно будут неповторяющимися.
2. Данные о ридах могут быть получены лишь с некоторой вероятностью (как правило, ошибка в нуклеотиде имеет вероятность около
, но вблизи "края" генома она может достигать и ).3. Риды не могут иметь фиксированную длину в силу особенностей метода секвенирования.
Вывод:
Несмотря на то, что задача не решается в общем случае приведённым алгоритмом, граф де Брюина действительно используется в ассемблерах (программах, собирающих геном или его большие части из ридов), но с заметными усложнениями.