Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабы по ПиАА 2024 / Baraeva_Elizaveta_lb5.doc
Скачиваний:
0
Добавлен:
09.09.2026
Размер:
78 Кб
Скачать

МИНОБРНАУКИ РОССИИ

Санкт-Петербургский государственный

электротехнический университет

«ЛЭТИ» им. В. И. Ульянова (Ленина)

Кафедра МО ЭВМ

отчет

по лабораторной работе 5

по дисциплине «Построение и анализ алгоритмов»

Тема: Алгоритм Ахо-Корасик

Студентка гр. 2383

Бараева Е. Н.

Преподаватель

Шевелева А. М.

Санкт-Петербург

2024

Цель работы.

Изучить алгоритм Ахо-Корасик для решения задачи точного поиска набора образцов в тексте и решения задачи точного поиска набора образцов в тексте с джокером.

Задание.

1) Разработайте программу, решающую задачу точного поиска набора образцов.

Вход:

Первая строка содержит текст (T,1≤∣T∣≤100000 ).

Вторая - число n (1≤n≤3000), каждая следующая из n строк содержит шаблон из набора P={p1, … ,pn}1≤∣pi∣≤75

Все строки содержат символы из алфавита {A,C,G,T,N}

Выход:

Все вхождения образцов из P в T.

Каждое вхождение образца в текст представить в виде двух чисел - i p

Где i - позиция в тексте (нумерация начинается с 1), с которой начинается вхождение образца с номером p (нумерация образцов начинается с 1).

Строки выхода должны быть отсортированы по возрастанию, сначала номера позиции, затем номера шаблона.

Sample Input:

NTAG

3

TAGT

TAG

T

Sample Output:

2 2

2 3

2) Используя реализацию точного множественного поиска, решите задачу точного поиска для одного образца с джокером.

В шаблоне встречается специальный символ, именуемый джокером (wild card), который "совпадает" с любым символом. По заданному содержащему шаблоны образцу P необходимо найти все вхождения Р в текст Т.

Например, образец аb??с? с джокером ? встречается дважды в тексте xabvccbababcax.

Символ джокер не входит в алфавит, символы которого используются в T. Каждый джокер соответствует одному символу, а не подстроке неопределённой длины. В шаблон входит хотя бы один символ не джокер, т.е. шаблоны вида ??? недопустимы.

Все строки содержат символы из алфавита {A,C,G,T,N}

Вход:

Текст (T,1≤∣T∣≤100000 )

Шаблон (P,1≤∣P∣≤40)

Символ джокера

Выход:

Строки с номерами позиций вхождений шаблона (каждая строка содержит только один номер).

Номера должны выводиться в порядке возрастания.

Sample Input:

ACTANCA

A$$A$

$

Sample Output:

1

Исследование: на месте джокера может быть любой символ, за исключением заданного.

Выполнение работы.

  • класс Node – класс, который представляет узел в дереве Trie. Узел содержит список слов, дочерние узлы и суффиксную ссылку.

  • класс Trie – класс, который включает методы инициализации и создания бора, а также установки связей между узлами.

  • create_tree – метод, в котором происходит построение бора на основе переданных шаблонов. Каждый символ шаблона добавляется в дочерний узел текущего узла.

  • create_links – метод, который устанавливает связи узлов с помощью суффиксных ссылок. Для этого используется очередь queue, в которую добавляются все дочерние узлы корневого узла. Затем происходит обход дерева и установка суффиксных ссылок для каждого узла.

  • find_start – метод, который позволяет искать совпадения начинающиеся с определенного символа в тексте.

  • run_aho_corasick – функция, в которой создается экземпляр класса Trie, инициализируется алгоритм Ахо-Корасик, создается массив ответа с индексами вхождения и паттернов.

  • split_pattern – функция, которая разбивает шаблон на части по маске и возвращает индексы найденных масок в шаблоне, а также сами подшаблоны.

  • find_entries – функция, находит все вхождения паттернов в текст с помощью алгоритма Ахо-Корасик, и возвращает позиции начала вхождений паттернов в тексте.

  • find_pattern – функция, которая ищет все вхождения шаблона в тексте с джокером. Она перебирает все возможные стартовые позиции в тексте и проверяет, совпадает ли шаблон с текстом на этой позиции. Если вхождение соответствует шаблону, то индекс начала этого вхождения добавляется в результаты. В конце функция возвращает список результатов.

Соседние файлы в папке Лабы по ПиАА 2024