Применение конечных автоматов для нечёткого бинарного поиска | ПДМ. Приложение. 2018. № 11. DOI: 10.17223/2226308X/11/37

Применение конечных автоматов для нечёткого бинарного поиска

Рассматривается задача нечёткого поиска булевых векторов в потоке данных. Под нечётким вхождением искомого вектора понимается вхождение вектора, близкого к искомому в смысле расстояния Хемминга. Предлагается метод построения конечного автомата для решения данной задачи по заданному набору искомых шаблонов в виде булевых векторов (возможно, частично определённых) и допустимого отклонения для каждого шаблона. Возможно построение автомата, принимающего на вход отдельные биты данных, и автомата, принимающего сразу группы битов. Приводятся оценки размеров таблиц переходов и выходов автомата. Представлены экспериментальные данные производительности поисковых автоматов, принимающих на вход отдельные биты данных, четвёрки битов и восьмёрки битов, а также производительность классического подхода к задаче нечёткого поиска, основанного на регистре сдвига.

Fuzzy binary search problem: approach based on finite state machines.pdf 1. Задача бинарного поиска в потоке данных и классический подход к ней Рассматриваемую задачу можно сформулировать так. Имеется двоичная последовательность (поток данных) и набор из n булевых векторов (слов) различной длины, далее называемых шаблонами. Необходимо найти в последовательности вхождения всех шаблонов. Эту задачу можно назвать чётким поиском. В случае, когда нас интересуют вхождения не только самих шаблонов, но и векторов, похожих на них в смысле расстояния Хемминга, можно говорить о нечётком поиске. Тогда помимо самих шаблонов необходимо задать для каждого из них предельное количество ошибок, то есть максимально допустимое расстояние Хемминга до вхождений. Рассмотрим стандартный подход к этой задаче. Он основан на регистре сдвига, в который последовательно подаются биты из потока. После подачи каждого бита содержимое регистра сравнивается со всеми шаблонами. Если содержимое регистра и шаблонов помещается в машинное слово на целевом оборудовании, требуется ровно n целочисленных сравнений при чётком поиске и n вычислений расстояния Хеммин-га - при нечётком поиске. Если длина регистра превышает длину шаблона, нужно обнулять старшие биты регистра перед сравнением. Дополнительные неудобства возникают, когда искомые шаблоны имеют различные длины. Если же регистр не помещается в машинное слово, эта схема ещё усложняется. 2. Применение поисковых автоматов для чёткого поиска Более эффективным способом поиска бинарных последовательностей является использование поискового конечного автомата [1, 2]. Сначала рассмотрим битовый автомат, который получает на вход данные по-битово и выдаёт на выход сведения о найденных шаблонах. Для использования автомата смысл состояний не важен, поэтому можно считать, что состояния являются абстрактными элементами множества состояний автомата. На этапе построения автомата необходимо для каждого состояния знать, какие префиксы искомых шаблонов в этом состоянии уже найдены. Эта информация сохраняется в таблице состояний, которая удаляется после построения автомата. Под условной подачей бита на вход автомата будем понимать вычисление того, как изменится набор найденных префиксов и будут ли найдены какие-либо шаблоны после обработки поданного бита. Поисковый автомат строится индуктивно - изначально задаётся нулевое состояние, в котором не найдено ничего, затем в этом состоянии условно подаётся нулевое значение бита и получается новое состояние. Аналогично получается новое состояние при условной подаче единичного бита. Каждое новое состояние ищется в таблице состояний, и если не находится, то добавляется в неё. Параллельно строятся таблицы переходов и выходов. Алгоритм продолжает работу, пока не будут обработаны все состояния в таблице состояний. Для компактного хранения таблицы выходов все возможные выходные символы сохраняются в таблице выходных сигналов, а в таблицу выходов записываются их индексы. В [2] показана связь поискового автомата для чёткого поиска с алгоритмами КМП-поиска [3] и Ахо - Корасик [4]. Для алгоритма Ахо - Корасик обнаружена полная аналогия с поисковыми автоматами, для КМП-поиска - аналогия с автоматом для поиска одного шаблона. Далее вводится байтовый автомат, который получает на вход сразу группы по q битов. Эффективность такого автомата выше в q раз, однако объём требуемой памяти растёт экспоненциально, поскольку в таблице будет не два столбца, а 2q. Кроме этого, размер таблицы выходных сигналов увеличивается, как минимум, в q раз. Множество состояний байтового автомата совпадает с множеством состояний битового автомата. Строится байтовый автомат на основе битового условной подачей каждой возможной группы битов в каждом состоянии. Более подробно алгоритмы построения поисковых автоматов описаны в [2]. Удобно использовать байтовые автоматы с группами битов того же размера, что и минимальная адресуемая ячейка памяти целевого оборудования, как правило, это восемь битов. В случае, когда необходимо уменьшить объём требуемой памяти, можно воспользоваться промежуточным вариантом - использовать группы по 4 бита. Это менее удобно, зато объём требуемой памяти уменьшается в 16 раз. 3. Применение поисковых автоматов для нечёткого поиска Далее рассмотрим, как можно реализовать нечёткий поиск при помощи поисковых автоматов. Расстояние Хемминга между шаблоном и найденным вектором будем называть количеством ошибок в найденном вхождении. Входные алфавиты поисковых автоматов для нечёткого поиска остаются неизменными, выходные алфавиты требуется расширить таким образом, чтобы была возможность сигнализировать не только о том, в какой позиции какой шаблон был найден, но и о том, какое количество ошибок он содержит. Состояния автомата здесь также должны содержать информацию о количестве ошибок. Алгоритмы построения таблиц автоматов для нечёткого поиска аналогичны алгоритмам построения обычных поисковых автоматов. Верхняя оценка количества состояний поискового автомата для чёткого поиска приводится в [2], для нечёткого поиска верхняя оценка получилась следующей: стимых ошибок i-го шаблона; где kmax - максимальная длина шаблона; ki и ei - соответственно длина и число допучисло сочетаний из I по е. Отметим, что формула верна только для полностью определённых шаблонов. Сравнение оценки с экспериментальными данными показало, что для нечёткого поиска её значение сильно завышено, а для чёткого - достаточно точно. 4. Минимизация таблиц поисковых автоматов Алгоритмы построения автоматов реализованы, проведено исследование количества состояний автоматов для поиска 48-битовых шаблонов, выбранных случайным образом. Изменялось количество искомых шаблонов - от 1 до 6 - и количество допустимых ошибок - от 0 до 5. Отметим, что при нулевом количестве допустимых ошибок фактически строится автомат для чёткого поиска. В табл. 1 представлены полученные результаты. Построить поисковый автомат для поиска трёх и более искомых шаблонов с пятью допустимыми ошибками в 32-битном адресном пространстве не удалось. Поскольку количество состояний существенным образом зависит от вида шаблонов, значения в табл. 1 являются ориентировочными. По табл. 1 можно заметить, что количество состояний поисковых автоматов для нечёткого поиска существенно превышает количество состояний поискового автомата для чёткого поиска тех же шаблонов и очень быстро увеличивается с ростом допустимого количества ошибок. Кроме того, замечено следующее: в автоматах для чёткого поиска при увеличении количества шаблонов количество состояний растёт медленнее, чем суммарная длина шаблонов, то есть один автомат для поиска двух шаблонов требует меньше памяти, чем два отдельных автомата, ищущих по одному шаблону. С поисковыми автоматами для нечёткого поиска ситуация обратная. Таблица 1 Количество состояний поисковых автоматов для нечёткого поиска Допустимое количество ошибок Количество искомых шаблонов 1 2 3 4 5 6 0 48 93 140 183 222 263 1 355 896 1479 2116 2657 3265 2 2335 6566 12 370 18 242 24 097 30 334 3 14 891 44 502 91 703 140 209 192 659 246 747 4 88 979 278 629 621 499 991 030 1 410 670 1 828 102 5 501 340 1 653 861 X X X X Есть два способа уменьшить количество состояний автомата. Для описания первого метода определим несущественные состояния поискового автомата по аналогии с цепями Маркова. Несущественным назовём такое состояние i, из которого автомат может перейти в некоторое другое состояние j, такое, что из него автомат никогда не сможет вернуться в состояние i. Содержательно это означает, что автомат может перейти в такой режим работы, в котором никогда не сможет попасть ни в какое несущественное состояние. Для поискового автомата доказано, что он гарантированно войдёт в такой режим после подачи на вход kmax битов данных, где kmax - максимальная длина шаблона. Первый метод уменьшения количества состояний поисковых автоматов заключается в поиске и устранении несущественных состояний. В этом случае автомат будет начинать работу не из нулевого состояния, а из некоторого другого, как правило, первого по порядку существенного состояния, поэтому в начале работы автомата возможны «ложные» срабатывания в силу того, что все состояния, кроме нулевого, предполагают, что уже найдены какие-то префиксы шаблонов. Для отсечения таких «ложных» срабатываний достаточно контролировать длину найденных шаблонов и сравнивать её с длиной данных, поданных на вход автомата. Другой метод заключается в построении минимальной формы автомата, то есть устранении эквивалентных состояний. Первый способ был применён ко всем автоматам из табл. 1. Результаты приведены в табл.2. Можно видеть, что удаление несущественных состояний позволило уменьшить общее количество состояний автомата не более чем на 2,857%. 5. Экспериментальные данные Проведено тестирование производительности различных поисковых автоматов и обычного метода поиска, основанного на регистре сдвига. Для измерения скорости работы использовался компьютер на базе процессора Intel Core 2 Duo E8400 с тактовой частотой 2,66 ГГц под управлением 64-битной операционной системы Windows 7 и компилятор MinGW версии 5.3.0. Измерение времени производилось с помощью функции Windows API GetThreadTimes(), вычисляющей время работы процессора над указанной задачей без учёта времени, потраченного на другие задачи. В качестве источника данных использован стандартный линейный конгруэнтный генератор, замеры скорости работы проводились на отрезках по 100 МБ. Здесь и далее под 1 МБ понимается 230 байтов. Бинарный поиск, основанный на регистре сдвига, показал скорость работы от 0,48 до 4,0 МБ/с. Замечено, что производительность поиска, основанного на регистре сдви- Таблица 2 Количество несущественных состояний поисковых автоматов Допустимое Количество искомых шаблонов количество 1 2 3 4 5 6 ошибок 0 0/48 0/93 4 / 140 4 / 183 4 / 222 4 / 263 (0,00%) (0,00%) (2,86 %) (2,19%) (1,80%) (1,52%) 1 3 / 355 7 / 896 17 / 1479 37 / 2116 40 / 2657 44 / 3265 (0,85%) (0,78 %) (1,15%) (1,75%) (1,51%) (1,35%) 23 / 43 / 98 / 222 / 270 / 323 / 2 2335 6566 12 370 18 242 24 097 30 334 (0,99%) (0,65%) (0,79 %) (1,22%) (1,12%) (1,06%) 229 / 402 / 772 / 1396 / 1820 / 2319 / 3 14 891 44 502 91 703 140 209 192 659 246 747 (1,54%) (0,90%) (0,84 %) (1,00%) (0,94%) (0,94 %) 1453 / 2473 / 4837 / 9275 / 12 039 / 16 397 / 4 88 979 278 629 621 499 991 030 1 410 670 1 828 102 (1,63%) (0,89%) (0,78 %) (0,94 %) (0,85%) (0,90 %) 7584 / 13 825 / 5 501 340 (1,51%) 1 653 861 (0,84 %) X X X X га, не зависит от вида искомых шаблонов и одинакова как для полностью определённых, так и для частично определённых шаблонов одинаковой длины. Производительность уменьшается при увеличении количества шаблонов и их длины. Производительность битовых поисковых автоматов, напротив, не зависит напрямую ни от количества искомых шаблонов, ни от их вида и длины, но существенно зависит от количества состояний поискового автомата. Под объёмом таблиц будем понимать объём памяти, необходимой для хранения всех таблиц автомата. При объёме таблиц, не превышающем 1 МБ, производительность битовых поисковых автоматов достигает 32 МБ/с. С увеличением объёма таблиц производительность падает до 12 МБ/с. В некоторых случаях наблюдается падение скорости обработки вплоть до 4,66 МБ/с, но оно связано с большим количеством найденных шаблонов, обработка которых требует дополнительного времени. Во всех случаях скорость работы битового поискового автомата многократно выше скорости работы регистрового поиска и в среднем составляет 24,13 МБ/с. Помимо битовых, испытывались полубайтовые и байтовые автоматы. Полубайтовые автоматы показали производительность от 5,77 до 109 МБ/с, работая быстрее битовых автоматов как минимум в 2 раза. Байтовые автоматы достигают производительности 286 МБ/с, однако из-за большого объёма таблиц их производительность довольно быстро снижается с ростом количества состояний, в связи с чем примерно в половине случаев байтовые автоматы уступают по производительности полубайтовым, а в ряде случаев - и битовым автоматам. На рис. 1 показаны графики производительности регистрового поиска, битовых, полубайтовых и байтовых автоматов. График производительности регистрового поиска обозначен пунктирной линией, битового автомата - двойной линией, полубайтового - точками, байтового - сплошной серой линией. В правой части графика линия производительности байтового автомата прерывается в связи с тем, что для соответствующего количества состояний построить байтовый автомат вообще не удалось из-за нехватки памяти. Рис. 1. Производительность поисковых систем По графикам видно, что битовые автоматы всегда работают быстрее регистрового поиска, полубайтовые автоматы всегда быстрее битовых, а байтовые достигают очень высокой производительности при небольших объёмах таблиц, однако с ростом числа состояний их производительность падает настолько быстро, что они начинают проигрывать полубайтовым, а затем и битовым автоматам. Можно заключить, что регистровый поиск следует использовать только в том случае, когда доступное количество памяти недостаточно даже для хранения таблиц битового автомата, битовый автомат - только если недостаточно памяти для полубайтового автомата. Выбор между байтовым и полубайтовым автоматами следует делать, исходя из измерений производительности обоих автоматов на целевом оборудовании.

Ключевые слова

Corasick algorithm, Search FSM, fuzzy search, binary search, sync search, string matching, KMP-algorithm, Aho , КМП-поиск, алгоритм Ахо - Корасик, син-хропосылка, поиск подстроки, нечёткий поиск, бинарный поиск, поисковые автоматы

Авторы

ФИООрганизацияДополнительноE-mail
Панкратов Иван ВладимировичМоскваivan-pankratov2010@yandex.ru
Всего: 1

Ссылки

Knuth D. E., Morris J.H.Jr., and Pratt V.R. Fast pattern matching in strings // SIAM J. Comput. 1977. No. 6(2). P. 323-350.
Aho A.V. and Corasick M.J. Efficient string matching: An aid to bibliographic search // Commun. ACM. 1975. No. 18(6). P. 333-340.
Панкратов И. В. Одновременный поиск нескольких двоичных шаблонов в потоке с помощью конечного автомата // Прикладная дискретная математика. 2014. №2. С. 119-125.
Агибалов Г. П., Оранов А. М. Лекции по теории конечных автоматов. Томск: Изд-во Том. ун-та, 1984. 185 с.
 Применение конечных автоматов для нечёткого бинарного поиска | ПДМ. Приложение. 2018. № 11. DOI: 10.17223/2226308X/11/37

Применение конечных автоматов для нечёткого бинарного поиска | ПДМ. Приложение. 2018. № 11. DOI: 10.17223/2226308X/11/37