Я пытаюсь вычислить последовательности де Брейна для алфавитов, количество символов которых не степень двойки.
Для алфавитов с 2 ^ k символами вычисление последовательностей де Брюина легко: есть несколько простых правил, таких как «Предпочитать» и «Предпочитать противоположности» , которые работают для генерации B (2, п). B (2 ^ k, n) точно так же, как B (2, kn), если вы читаете 1 и 0 как двоичные коды для реальных символов в вашем алфавите. Например, вы можете интерпретировать B (2,8n) как последовательности байтов длиной n.
Предпочитать единицы довольно просто: напишите нули. Затем всегда пишите единицу, если это не приведет к повторению строки n-длины; в противном случае напишите ноль.
В настоящее время я не понимаю, как обобщить такие правила в алфавитах без степени двух размеров.
Существует общий метод вычисления последовательностей де Брюина с помощью графиков: пусть каждая последовательность n-длины, сгенерированная вашим алфавитом, будет узлом; поместите ребро от A до B, если самые правые n-1 символов A совпадают с крайними левыми n-1 символами B. Пометьте каждое ребро последним символом строки в вершине головы. Любой путь Эйлера через этот граф будет генерировать последовательность де Брейна, и используемая нами особая конструкция гарантирует, что будет хотя бы один такой путь. Мы можем использовать Алгоритм Флери для (недетерминированного) построения эйлерова траектории:
- Выберите вершину.
- Оставьте эту вершину через какое-то ребро и удалите это ребро, выбирая только ребра, удаление которых могло бы отключить вершину от графа, если альтернативы нет.
- Добавьте к вашей строке метку края, который вы только что удалили.
- Переходите к 2, пока не исчезнут все края.
Полученная строка будет последовательностью де Брюина.
Этот алгоритм несколько сложнее для реализации, чем Prefer Ones. Простота Prefer One состоит в том, что нужно только просмотреть уже сгенерированный результат, чтобы определить, что делать. Существует ли простой способ обобщения предпочтительных (или, возможно, предпочтительных противоположностей) в алфавиты размером не степени двух?