Transcript
Page 1: Лекция №8. Поиск. Хэширование. Предмет "Структуры и алгоритмы обработки данных"

Хакасский государственный университет им. Н.Ф. Катанова

Структуры и алгоритмы обработки данных

Лекция: Поиск. Хеширование

Николай Гребенщиков, www.grebenshikov.ru

Page 2: Лекция №8. Поиск. Хэширование. Предмет "Структуры и алгоритмы обработки данных"

Скорость поиска

• Линейный поиск - Tprepare = O(n), T find = O(n)

• Бинарный поиск и деревья поиска -

Tprepare = O(n · log(n)), T find = O(log(n))

• Но хочется быстрее - можно ли искать за O(1)

1

Page 3: Лекция №8. Поиск. Хэширование. Предмет "Структуры и алгоритмы обработки данных"

Прямой доступ

Если ключи ∈ {0,1, . . . ,m − 1} и различны, то множество S

можно представить в виде массива T [0..m− 1].

T [k] =

x,x∈S∧key[x]=knull, otherwise

Операция поиска по ключу занимает время O(1)

2

Page 4: Лекция №8. Поиск. Хэширование. Предмет "Структуры и алгоритмы обработки данных"

Более сложные ключи

Пусть, количество элементов в множестве ограничено неболь-шим числом.

Проблемы возникают, когда:

• возможные ключи принадлежат большому множеству?Например, {0,1, . . . ,109}

• ключи не являются числами? Например, строки.

3

Page 5: Лекция №8. Поиск. Хэширование. Предмет "Структуры и алгоритмы обработки данных"

Хеширование

Хеш-функция - такая функция h, которая определяет ме-стоположение элементов множества S в таблице T .

x.key ∈ A⇒ h(x.key) = k

4

Page 6: Лекция №8. Поиск. Хэширование. Предмет "Структуры и алгоритмы обработки данных"

Коллизии

|A| > 1⇒ Коллизия. Например, h(43) = h(89) = h(112) = k

Решения коллизий:

• Метод цепочек

• Открытая адресация

5

Page 7: Лекция №8. Поиск. Хэширование. Предмет "Структуры и алгоритмы обработки данных"

Метод цепочек

Идея: Хранить элементы множества с одинаковым значениемхэш-функции в виде списка.

h(51) = h(49) = h(63) = i

6

Page 8: Лекция №8. Поиск. Хэширование. Предмет "Структуры и алгоритмы обработки данных"

Анализ метода цепочек

• Наихудший случай: если хэш-функция для всех элемен-тов множество выдает одно и то же значение.Время доступа равно Θ(n), при |S| = n.

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

7

Page 9: Лекция №8. Поиск. Хэширование. Предмет "Структуры и алгоритмы обработки данных"

Коэффициент заполненности хэш-таблицы

Пусть дана таблицы T [0..m− 1], и в ней хранится n ключей.

Тогда, α = n/m = среднее количество ключей в ячейках таб-лицы.

Математическое ожидание времени поиска, закончив-шегося неудачей = Θ(1 + α) (вычисление значения хэш-функции + просмотри списка).

M [T (n)] = Θ(1), если α = O(1)⇔ n = O(m)

8

Page 10: Лекция №8. Поиск. Хэширование. Предмет "Структуры и алгоритмы обработки данных"

Выбор хэш-функции

• Ключи должны равномерно распределяться по всем ячей-кам таблицы

• Закономерность распределения ключей хэш-функцией недолжна коррелировать с закономерностями данных. (На-пример, данные - это четные числа).

Методы:

• Метод деления

• Метод умножения

9

Page 11: Лекция №8. Поиск. Хэширование. Предмет "Структуры и алгоритмы обработки данных"

Метод деления

h(k) = k mod m

Проблема маленького делителя m:

Пример №1. d = 2 и все ключи четные ⇒ нечетные ячейкине заполнены.

Пример №2. m = 2r ⇒ хэш не зависит от битов выше r.

10

Page 12: Лекция №8. Поиск. Хэширование. Предмет "Структуры и алгоритмы обработки данных"

Метод деления: хорошая эвристика

Выбирать для m простое число не близкое к степеням 2 и10.

11

Page 13: Лекция №8. Поиск. Хэширование. Предмет "Структуры и алгоритмы обработки данных"

Метод умножения

Пусть m = 2r, ключи являются w-битными словами.

h(k) = (A · k mod 2w) >> (w − r), где

A mod 2 = 1 ∧ 2w−1 < A < 2w

• Не следует выбирать A близко к 2w−1 и 2w

• Данный метод быстрее метода деления

12

Page 14: Лекция №8. Поиск. Хэширование. Предмет "Структуры и алгоритмы обработки данных"

Метод умножения: пример

m = 8 = 23, w = 7

1 0 1 1 0 0 1 A1 1 0 1 0 1 1 k

1 0 0 1 0 1 0 0 1 1 0 0 1 1

1001010︸ ︷︷ ︸ignore by mod 2w

011︸ ︷︷ ︸h(k)

0011︸ ︷︷ ︸ignore by >>(w−r)

13

Page 15: Лекция №8. Поиск. Хэширование. Предмет "Структуры и алгоритмы обработки данных"

Колесо остатков

k ∈ {1,2,3}

14

Page 16: Лекция №8. Поиск. Хэширование. Предмет "Структуры и алгоритмы обработки данных"

Разрешение коллизий: открытая адресация

• Не нужно хранить ссылки.

• Будем последовательно проверять ячейки таблиц, покане найдем пустую.

• h : U × {0,1, . . . ,m− 1} → {0,1, . . . ,m− 1}

• 〈h(k,0), h(k,1), . . . , h(k,m− 1)〉 - это перестановка 〈0,1, . . . ,m− 1〉

• n ≤ m

15

Page 17: Лекция №8. Поиск. Хэширование. Предмет "Структуры и алгоритмы обработки данных"

Открытая адресация: пример вставки

Пусть дана таблица A:

1 2 3 4 5 6 7 8 9 1023 45 78

Вставим k = 89:

1. h(89,0) = 3

2. h(89,1) = 2

3. h(89,2) = 9 - Успех!

16

Page 18: Лекция №8. Поиск. Хэширование. Предмет "Структуры и алгоритмы обработки данных"

Открытая адресация: поиск

• Поиск - также последовательное исследование.

• Успех, когда нашли значение.

• Неудача, когда нашли пустую клетку или прошли всю таб-лицу.

17

Page 19: Лекция №8. Поиск. Хэширование. Предмет "Структуры и алгоритмы обработки данных"

Стратегии исследования

• Линейная - h(k, i) = (h(k,0) + i) mod m.Плохо работает для заполненных областей ячек.

• Двойное хэширование - h(k, i) = (h1(k) + i · h2(k)) mod m.Обычно выбирают m = 2r и h2(k) - нечетной.

18

Page 20: Лекция №8. Поиск. Хэширование. Предмет "Структуры и алгоритмы обработки данных"

Анализ открытой адресации

Дополнительное допущение для равномерного хэширования:каждый ключ может равновероятно получить любую из m!

перестановок последовательностей исследования таблицы неза-висимо от других ключей..

Теорема. E[количество исследований] ≤ 11−α,

где α < 1⇐⇒ n < m

19

Page 21: Лекция №8. Поиск. Хэширование. Предмет "Структуры и алгоритмы обработки данных"

Доказательство (неудачный поиск)

• Одно исследование всегда нужно. С вероятностью n/mбудет выявлена коллизия.⇒ (n− 1)/(m− 1)⇒ . . .⇒ (n− i)/(m− i)⇒ . . .

• Заметим, что n−im−i <

nm = α для i ∈ {1,2,3, . . . , n− 1}

• E[#probes] = 1 + nm(1 + n−1

m−1(1 + n−2m−2(. . . 1

m−n . . .)))≤ 1 + α(1 + α(1 + α(1 + α(. . .1 + α . . .))))≤ 1 + α+ α2 + α3 + . . .

=∞∑i=0

αi

= 11−α

20

Page 22: Лекция №8. Поиск. Хэширование. Предмет "Структуры и алгоритмы обработки данных"

Скорость работы поиска в хэш-таблице при открытойадресации

α < 1− const⇒ O(1)

Как же себя ведет α:

• Таблица заполнена на 50% ⇒ 2 исследования

• Таблица заполнена на 90% ⇒ 10 исследований

• Таблица заполнена на 100% ⇒ m исследований

21

Page 23: Лекция №8. Поиск. Хэширование. Предмет "Структуры и алгоритмы обработки данных"

Список литературы

• Ахо А., Хопкрофт Д., Ульман Д. Структуры данных иалгоритмы. - М. : Издательский дом “Вильямс”, 2000.сс.116-127.

• Кормен Т., Лейзерсон Ч., Ривест Р., Штайн К. Алгорит-мы: построение и анализ, 2-е издание. - М. : Издатель-ский дом “Вильямс”, 2007. сс.282-315.

22


Recommended