Проблема возникновения коллизий при использовании хеширования по сигнатуре

Бесплатный доступ

Проблема дублирования и нахождения дубликатов в записях базы данных является серьезным тормозящим фактором развития рынка автоматизированных информационных систем. В работе авторами исследован алгоритм нахождения дубликатов в индексированном словаре, проведен анализ быстродействия алгоритма и предложен свой алгоритм.

дублирование \ хеширование \ алгоритм \ сигнатура \ коллизия

Похожие статьи в разделе Программные средства

Обнаружение дубликатов на изображениях
Обнаружение дубликатов на изображениях

Глумов Николай Иванович, Кузнецов Андрей Владимирович

Поиск дубликатов на цифровых изображениях
Поиск дубликатов на цифровых изображениях

Глумов Николай Иванович, Кузнецов Андрей Владимирович, Мясников Владислав Валерьевич

Локальные шаблоны в задаче обнаружения дубликатов
Локальные шаблоны в задаче обнаружения дубликатов

Евдокимова Надежда Ивановна, Кузнецов Андрей Владимирович

Метод шинглов
Метод шинглов

Цимбалов Алексей Владимирович, Золотарев Олег Васильевич

Короткий адрес: https://sciup.org/14319431

IDS: 14319431

Текст научной статьи Проблема возникновения коллизий при использовании хеширования по сигнатуре

Уже давно существует тенденция к созданию программных средств, максимально ориентированная на невнимательность пользователей.

В любом текстовом редакторе существует проверка орфографии и автоматическое исправление, в поисковых системах пользователю в случае опечатки в запросе предлагается исправить ее («возможно вы имели в виду…»). Посредством чего это реализуется? Большинство таких систем основано на алгоритмах нечеткого поиска. Одним из таких алгоритмах является хеширование по сигнатуре.

Хеширование по сигнатуре базируется на достаточно очевидном представлении «структуры» слова в виде битовых разрядов, используемой в качестве хеша (сигнатуры) в хеш-таблице.

Процесс вычисления хеша состоит в следующем: каждому биту хеша сопоставляется группа символов из алфавита. Бит 1 на позиции i в хеше означает, что в исходном слове присутствует символ из i-й группы алфавита. Порядок букв в слове никакого значения не имеет [1].

При использовании данного алгоритма возникают коллизии. Коллизия хеш-функции – это равенство значений хеш-функции на двух различных блоках данных [2]. Если в словаре присутствуют два слова, состоящие из одинаковых букв, то их хеш будет совпадать, ведь в алгоритме хеширования по сигнатуре порядок букв в слове не имеет значения. По смыслу слова с одинаковыми хешами могут быть абсолютно разными, а значит, теряется суть поиска. В данной статье описана проблема появления коллизий при использования хеширования по сигнатуре.

В описании оригинального алгоритма Л.М. Бойцова используется деление букв алфавита на группы по два, три символа (рисунок 1).

Стоит упомянуть, что в методе, описанном Л.М. Бойцовым, используется 13 битов.

Авторы данной статьи предлагают отличную от оригинального (метод организации хеша Л.М. Бойцова) структуры хеш-таблицы (рисунок 2).

Рисунок 1 – Пример хеширования по сигнатуре

БИТЫ

1

2

3

4

5

6

7

8

9

10

п

12

13

А

д

с

Е

Ъ

ш

Г

Л

Б

ф

ж

ч

н

0

т

3

И

ь

Щ

К

М

П

X

й

ю

в

э

ы

У

я

Ц

р

Рисунок 2 – Вариант структуры хеш-таблицы

Логика организации данной структуры заключается в принципе парных гласных и согласных букв в русском языке. Действительно, пользователи чаще всего пишут слова так, как произносят. Часто в речи мы заменяем буквы на парные им. 13 битов взято исходя из оригинального алгоритма Л.М. Бойцова. Проведем сравнительный анализ вышеописанных хеш-таблиц. Для сравнения необходимо ввести критерии, по которым будет оцениваться вероятность появления коллизий. Сначала нужно выявить скорость работы алгоритма. Скорость работы будет оцениваться на процессоре Intel® Pentium® CPU 2020M 2.40GHZ. Затем необходимо вывести среднее число коллизий. В данном случае будет использоваться исходный словарь. В качестве словаря в данной статье рассматривается КЛАДР – классификатор адресов России. Расчет процента коллизий производится следующим образом:

  • 1.    Находим хеши всех слов в словаре.

  • 2.    Для каждого из «хешей» создается список слов-дубликатов, затем они удаляются из исходного словаря (метод «цепочек» разрешения коллизий).

  • 3.    Далее находится общее число элементов в списках со-дубликатов и делится на количество слов в словаре.

Результат сравнения показан в таблице.

Таблица – Сравнительный анализ хеш-таблиц

Хеш таблица

Количество слов в

словаре

Скорость работы

Процент коллизий в словаре

Хеш-таблица, предложенная Л.М. Бойцовым

10969

0,14 c

83,927 %

Хеш-таблица, предлагаемая авторами

10969

0,13 с

75,795 %

Из данной таблицы можно сделать вывод, что предложенная авторами структура организации хеш-таблицы выигрывает по обоим показателям у оригинальной таблицы Л.М. Бойцова. Также можно говорить о том, что число появления коллизий зависит от структуры хеш-таблицы, и, выбрав подходящий вариант, можно уменьшить количество хешей-дубликатов в словаре.

Список литературы Проблема возникновения коллизий при использовании хеширования по сигнатуре

  • https://habrahabr.ru/post/114997/.
  • https://ru.wikipedia.org/wiki/Коллизия_хеш-функции.
  • http://www.intuit.ru/studies/courses/648/504/lecture/11467.