Замечание 1. В случае равенства рангов рассматриваемых матриц утверждение о совместности исходной некоммутативной системы неверно; нетрудно привести соответствующий пример.
Поскольку ФСР, которые являются компонентами решения системы (1), интерпретируются как формальные языки, теорема 1 позволяет установить случаи, когда линейная грамматика не порождает никакого линейного языка,
ЛИТЕРАТУРА
1. Егорушкин О. И., Колба,сипа, И. В., Сафонов К. В. О совместности систем символьных полиномиальных уравнений и их приложении // Прикладная дискретная математика. Приложение. 2016. №9. С. 119-121.
2. Egorushkin О. I., Kolbasina I. V., and Safonov К. V. On solvability of systems of symbolic polynomial equations // Журн. СФУ. Сер. Матем. и физ. 2016. Т. 9. Вып. 2. С. 166-172.
3. Глушков В. М., Цейтлип Г. Е., Ющенко Е. Л. Алгебра. Языки. Программирование. Киев: Наукова думка, 1973.
4. Salomaa A. and Soitolla М. Automata-Theoretic Aspects of Formal Power Series. N.Y.: Springer Verlag, 1978.
5. Семёнов А. Л. Алгоритмические проблемы для степенных рядов и контекстно-свободных грамматик // Докл. АН СССР. 1973. №212. С.50-52.
УДК 004.05 DOI 10.17223/2226308Х/16/32
ОБ АЛГОРИТМАХ ПОИСКА КОМПЬЮТЕРНОЙ ИНФОРМАЦИИ
А, В, Жаркова, А, Г, Мусугалиева
Исследованы алгоритмы поиска подстроки в строке: наивный, Бойера — Мура, Кнута—Морриса — Пратта, Рабина — Карпа, а также применимые для них джокеры (символы подстановки, «совпадающие» с любым символом или их последовательностью). Реализована программа на языке С# для поиска файлов по различным параметрам, которая позволяет также сканировать заданную директорию с целью поиска вредоносных объектов. Проведены вычислительные эксперименты. Общее лучшее время поиска файлов (достаточно найти первое вхождение) оказалось с помощью алгоритма Бойера — Мура, худшее — с помощью алгоритма Рабина — Карпа. Для поиска файлов по небольшим заданным данным и параметрам можно использовать наивный поиск, для средних и больших данных и параметров при малых образцах лучше использовать алгоритм Кнута — Морриса — Пратта, при больших — Бойера — Мура.
Ключевые слова: алгоритм Бойера — Мура, алгоритм Кнут,а, — Морриса — Пратта, алгоритм Рабина — Карпа, кибербезопасность, поиск подстроки в строке, поиск файла, сканирование.
В связи с большим ростом объёма данных существует много проблем с обработкой информации. Устройство может содержать несколько сотен тысяч файлов, среди которых часто требуется найти необходимый. Сейчас функции поиска файлов встроены во многие системы, но если поиск информации является ключевой задачей, например при поиске вредоносных объектов антивирусными программами, требуется знать принципы его организации.
Целью работы является изучение различных алгоритмов поиска файлов с заданными параметрами и создание программного продукта для поиска информации на устройстве.
Пусть задан образец Р[1... т] и текет Т[1... п], т ^ п. В задаче поиска подстрок требуется найти все вхождения образца в текст.
Рассмотрены следующие алгоритмы поиска подстроки в строке:
Р
Р
Р
Р
иска подстрок оказывается неэффективным, поскольку информация о тексте, полученная для одного найденного вхождения, не используется при нахождении других вхождений. Сложность алгоритма О(тп) [1, 2],
2) Алгоритм Бойера — Мура: прикладываем образец к началу текста и сравниваем с конца, при несовпадении очередного символа сдвигаем образец на максимальное значение из элемента массива сдвига (содержит величины, на которые может быть сдвинут образец при несовпадении очередного символа) и элемента массива прыжков (содержит величины, на которые можно сдвинуть образец, чтобы совместить ранее совпавшие символы с вновь совпадающими символами строки). Значение элемента массива сдвига вычисляется следующим образом: з[Р[г]] = т—г, г = 1,..., т. Элементы массива прыжков изменяются в зависимости от повторений последних символов, алгоритм работает за время О(т+п) [3],
3) Алгоритм Кнута — Морриса — Пратта (КМП): используется префиксная функция п[д], значение которой равно длине наибольшего префикса образца Р, который является суффиксом строки Рд, где Рд — ^-символьный префикс Р[1... к]
Р[1 . . . т]
право и проверяется условие Р[д + 1] = Т[г], где г = 1,...,п; д — количество совпавших символов; вхождение образца найдено, если д = т. Время работы алгоритма равно О(т + п) [2].
4) Алгоритм Рабина — Карпа: каждый символ представляет собой цифру в системе счисления с основанием 1, пусть < = 10, Для заданного образца Р[1... т] обозначим через р соответствующее ему десятичное значение. Аналогично для заданного текста Т [1... п] обозначим через десятичное значение подстроки Т[^ + 1... 5 + т] длины т, 5 = 0,1,..., п — т. Таким образом, 5 — допустимый сдвиг (найдено вхождение) тогда и только тогда, когда = р. Время работы в наихудшем случае равно О((п — т + 1)т) [2].
Данные алгоритмы реализованы для поиска файлов, в связи с этим достаточно найти только первое вхождение образца в текст.
Для поиска также можно ввести специальный символ, называемый джокером, который «совпадает» с любым символом. Если число разрешённых джокеров не ограничено, то неизвестно, можно ли решить задачу за линейное время. Однако если число
Р
образец можно найти за линейное время [1]. В разработанной программе при необходимости для замены любой строки символов, в том числе пустой, в начале или в конце образца используется джокер «*»,
Согласно государственному стандарту РФ ГОСТ Р 51188-98 [4], при испытаниях программных средств на наличие компьютерных вирусов используют две основные
группы методов их обнаружения: программные и аппаратно-программные, К программным методам относятся:
— сканирование;
— обнаружение изменений;
— эвристический анализ;
— резидентные «сторожа»;
— вакцинирование программных средств.
Метод сканирования состоит в том, что специальная антивирусная программа, называемая сканером, последовательно просматривает проверяемые файлы в поиске так называемых «сигнатур» известных компьютерных вирусов. При этом под сигнатурой понимают уникальную последовательность байтов, принадлежащую конкретному известному компьютерному вирусу и не встречающуюся в других программах [4].
Разработана и реализована программа на языке для поиска файлов по различным параметрам (имя файла, его расширение, размер и содержимое) с помощью перечисленных алгоритмов поиска образца в тексте; программа позволяет также сканировать заданную директорию на поиск вредоносных объектов.
Проведены вычислительные эксперименты, В табл. 1 приведено среднее время работы поиска файлов по имени и расширению с помощью различных алгоритмов поиска подстроки в строке; I — длина образца. Поиск производился в директории размером 151 Мбайт, в которой находилось 412 файлов.
Таблица 1
Среднее время поиска файлов по имени и расширению
Алгоритм Время работы, мс
По имени файла По расширению файла По имени и расширению файла
1 < 1 < 10 11 < 1 < 50 3 < 1 < 20 21 < 1 < 50
Наивный 18,5 3,61 33,58 11,47 3,64
Бойера — Мура 19,11 5,22 34,75 12,28 4,92
КМП 19,47 4,42 34,83 12,58 4,47
Рабина — Карпа 21,03 5,69 34,67 14,17 5,7
Можно заметить, что при поиске файлов в заданной директории по имени и расширению лучшее время во всех случаях показал наивный алгоритм. Это можно объяснить тем, что в остальных алгоритмах требуется предварительная обработка образца, что занимает время при выполнении, а нас интересует только наличие данного образца в тексте, В большинстве случаев хуже всех отработал поиск с помощью алгоритма Рабина — Карпа, при поиске по расширению файла — алгоритм Кнута — Морриса — Пратта,
В табл. 2 приведено среднее время работы поиска файлов по содержимому с помощью различных алгоритмов поиска подстроки в строке; I — длина образца. Поиск производился в директории размером 65,7 Мбайт, в которой находилось 120 Дх^файлов.
Можно заметить, что при поиске файлов по содержимому для коротких образцов быстрее всех отработал поиск с использованием алгоритма Кнута — Морриса — Пратта, для длинных — алгоритм Бойера — Мура, дольше всех в обоих случаях находились файлы с помощью алгоритма Рабина — Карпа,
Общее лучшее время поиска файлов оказалось с помощью алгоритма Бойера — Мура, худшее — с помощью алгоритма Рабина — Карпа, При этом из представленных случаев чаще всего лучше работал наивный поиск, хуже —также алгоритм Рабина — Карпа,
Таблица 2
Среднее время поиска файлов по содержимому
Алгоритм Время работы, мс
1 < 1 < 10 11 < 1 < 100
Наивный 1471,39 1395,8
Бойера — Мура 464,81 453,5
Кнута — Морриса — Пратта 422,2 679,97
Рабина — Карпа 2463,11 62336,02
Таким образом, для поиска файлов по небольшим заданным данным и параметрам (например, поиск по имени, по расширению) можно вполне использовать наивный поиск, для средних и больших данных и параметров (например, поиск по содержимому) при малых образцах лучше использовать алгоритм Кнута — Морриса — Пратта, при больших — Бойера — Мура,
В программе предусмотрено также сканирование заданной директории на вредоносные объекты. Параметры для поиска вредоносных объектов хранятся в базе данных, которая представляет собой текстовый файл, основная база для которого взята из открытого источника антивируса ClamAV [5] и переделана под формат программы, её можно дополнять. Основное время работы этой части программы — это работа с антивирусной базой, которая содержит 4 млн строк, поэтому среднее время работы составляет от нескольких десятков до нескольких сотен секунд,
ЛИТЕРАТУРА
1. Гасфилд Д. Строки, деревья и последовательности в алгоритмах: Информатика и вычислительная биология. СПб.: Невский диалект, БХВ-Петербург, 2003.
2. Кормен Т., Лейзерсон Ч., Pueepcm М. Алгоритмы: построение и анализ. М.: Изд-во «Вильяме», 2005.
3. Макконнелл Дж. Основы современных алгоритмов. М.: Техносфера, 2004.
4. ГОСТ Р 51188-98. Защита информации. Испытания программных средств на наличие компьютерных вирусов. Типовое руководство. М.: ПИК Издательство стандартов, 2003.
5. http: //www. clamav. net/downloads — ClamAV Download. 2017.
УДК 519.688 DOI 10.17223/2226308Х/16/33
ОБ ОДНОМ ПРЕДСТАВЛЕНИИ ЭЛЕМЕНТОВ КОНЕЧНЫХ 2-ГРУПП
В ВИДЕ БУЛЕВЫХ ВЕКТОРОВ
А, А, Кузнецов, А, С, Кузнецова
Предложен способ представления конечных 2-групп в виде булевых векторов. Пусть G— конечная (бернсайдова) 2-группа, порядок которой равен 2k. Каждый элемент группы представим уникальным булевым вектором размерности k. Для вычисления произведения двух элементов используются аналоги полиномов Холла, только теперь в них вместо умножения и сложения над полем Z2 используются эквивалентные булевы (побитовые) операции «и» и «исключающее или». В задачах, требующих вычисления большого количества произведений элементов группы, описанный метод позволяет кардинально уменьшить время работы компьютерных программ.
Ключевые слова: 2-группа, булев вектор, побитовые операции, полиномы Холла.