Изменения

Перейти к: навигация, поиск

Графы де Брюина

2007 байт добавлено, 22:58, 2 декабря 2017
Использование графов де Брюина
'''Решение''':
1. Составим граф де Брюина <tex> (n, l-1)</tex>.
2. Найдём в построенном графе эйлеров цикл. Он существует, так как граф де Брюина эйлеров (см. свойства) 3. Слово, соответствующее первой вершине цикла, возьмём полностью (<tex> l - 1 </tex> символов), затем будем последовательно добавлять в конец строки последний символ слова вершины, в которую был осуществлён переход. Так как рёбер <tex> n^l </tex>, получим последовательность длиной <tex> n^l + l - 1 </tex>. '''Корректность''': 1. Очевидно, что последовательность меньшей длины составить нельзя: в полученной последовательности ровно <tex> n^l </tex> подстрок длины <tex> l </tex>, и именно столько чисел можно составить из цифр от 1 до <tex> n </tex>. 2. Двум разным рёбрам <tex> e_1 = (u_1, v_1), e_2 = (u_2, v_2) </tex> соответствует два ''различных'' слова <tex> L </tex> длины <tex> l </tex>. Иначе <tex> u_{1} = prefix(L) = u_{2} \wedge v_{1} = suffix(L) = v_{2} </tex>. То есть это одно и то же ребро, при этом кратных рёбер в графе нет. 3. Отсюда следует, что в последовательности содержится <tex> n^l </tex> различных подстрок длины <tex> l </tex>. И короче последовательность получить нельзя. Значит, мы получили ответ за <tex> O((|E| \cdot (l-1)) + (|E| + |V|)) = O(|E| \cdot (l-1)) </tex>, то есть за время построения графа де Брюина <tex> (n, l-1) </tex>.
Анонимный участник

Навигация