Научная статья на тему 'ОБ АЛГОРИТМАХ ПОИСКА КОМПЬЮТЕРНОЙ ИНФОРМАЦИИ'

ОБ АЛГОРИТМАХ ПОИСКА КОМПЬЮТЕРНОЙ ИНФОРМАЦИИ Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
101
22
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
алгоритм Бойера — Мура / алгоритм Кнут / а — Морриса — Пратта / алгоритм Рабина — Карпа / кибербезопасность / поиск подстроки в строке / поиск файла / сканирование / Boyer — Moore algorithm / cybersecurity / file search / Knuth — Morris — Pratt algorithm / Rabin — Karp algorithm / scanning / substring search in a string

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Жаркова Анастасия Владимировна, Мусугалиева Альбина Геннадьевна

Исследованы алгоритмы поиска подстроки в строке: наивный, Бойера — Мура, Кнута—Морриса — Пратта, Рабина — Карпа, а также применимые для них джокеры (символы подстановки, «совпадающие» с любым символом или их последовательностью). Реализована программа на языке СД для поиска файлов по различным параметрам, которая позволяет также сканировать заданную директорию с целью поиска вредоносных объектов. Проведены вычислительные эксперименты. Общее лучшее время поиска файлов (достаточно найти первое вхождение) оказалось с помощью алгоритма Бойера — Мура, худшее — с помощью алгоритма Рабина — Карпа. Для поиска файлов по небольшим заданным данным и параметрам можно использовать наивный поиск, для средних и больших данных и параметров при малых образцах лучше использовать алгоритм Кнута — Морриса — Пратта, при больших — Бойера — Мура.

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

ABOUT ALGORITHMS FOR SEARCHING COMPUTER INFORMATION

Due to the large growth in the volume of data, there are many problems with information processing. If the search for information is a key task of the system, for example, the search for malware by antivirus programs, you need to know the principles of its organization. In this paper, we study the algorithms for searching a substring in a string: the naive search algorithm, the Knuth — Morris — Pratt algorithm, the Boyer — Moore algorithm, the Rabin — Karp algorithm, as well as wildcards applicable to them (substitution characters, “matching” with any character or their sequence). As a result, a C# program has been developed and implemented to search for files by various parameters (file name, extension, size and content) using the above algorithms and methods. The program allows you to scan a given directory to search for malware. Computational experiments were carried out, including changing the maximum number of characters of the sample and text, the corresponding conclusions were drawn. The overall best file search time (it is enough to find the first occurrence) turned out to be using the Boyer — Moore algorithm, the worst — using the Rabin — Karp algorithm. To search for files for small given data and parameters, you can use naive search, for medium and large data and parameters for small samples it is better to use the Knuth — Morris — Pratt algorithm, for large ones — Boyer — Moore algorithm.

Текст научной работы на тему «ОБ АЛГОРИТМАХ ПОИСКА КОМПЬЮТЕРНОЙ ИНФОРМАЦИИ»

Замечание 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-группа, булев вектор, побитовые операции, полиномы Холла.

i Надоели баннеры? Вы всегда можете отключить рекламу.