Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект лекций СиАОД.docx
Скачиваний:
17
Добавлен:
01.03.2025
Размер:
4.62 Mб
Скачать

Словари, основанные на хеш-таблицах

Элемент с ключом k записывается в позицию номер h(k) в хеш-таблице (hash table) T[0..m-1],

где h:U  {0, 1, …, m-1} – хеш-функция.

Коллизия – совпадение хеш-значений двух разных ключей.

Разрешение коллизий:

  • с помощью цепочек (открытое хеширование);

  • открытая адресация (закрытое хеширование).

Анализ хеширования с цепочками

(открытое хеширование)

Пусть T – хеш-таблица с m позициями, в которую занесено n элементов/

Коэффициент заполнения таблицы α = n / m

Худший случай – θ (n)

Средняя стоимость поиска

Гипотеза равномерного хеширования – предполагаем, что каждый данный элемент может попасть в любую из позиций таблицы с равной вероятностью, независимо от того, куда попал другой элемент.

Теорема 1. Пусть T - хеш-таблица с цепочками, имеющая коэффициент заполнения α. Предположим, что хеширование равномерно. Тогда при поиске элемента, отсутствующего в таблице, будет просмотрено в среднем α элементов таблицы, а среднее время такого поиска (включая время на вычисление хеш-функции) будет равно θ (1+ α)

Теорема 2. При равномерном хешировании среднее время успешного поиска в хеш-таблице с цепочками есть θ (1+ α), где α - коэффициент заполнения.

Ключи как натуральные числа

Хеш – функции

Деление с остатком

h(k) = k mod m

Умножение

Универсальное хеширование

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

(Закрытое хеширование)

Все записи хранятся в самой хэш-таблице. Каждая ячейка таблицы содержит либо элемент динамического множества, либо NIL.

h:U × {0, 1, …, m-1}  {0, 1, …, m-1}

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

h(k,0), h(k,1), . . . , h(k,m-1)›

Функция h должна быть такой, чтобы каждое из чисел от 0 до m - 1 встретилось в этой последовательности ровно один раз.

Пусть h’:U  {0, 1, …, m-1} – обычная хеш-функция.

Линейная последовательность проб

h(k,i) = (h’(k) + i) mod m

Квадратичная последовательность проб

h(k,i) = (h’(k) +с1i + c2i2 ) mod m

Двойное хеширование

h(k,i) = (h1(k) +i h2(k) ) mod m

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

Теорема 3. Математическое ожидание числа проб при поиске в таблице с открытой адресацией отсутствующего в ней элемента не превосходит 1/(1- α ) (хеширование предполагается равномерным)

Теорема 4. Математическое ожидание числа проб при успешном поиске элемента в таблице с открытой адресацией 1/ α * ln (1/(1- α ) )

  1. Поиск слова в тексте

Нечисленный алгоритм

Поиск слова в тексте

Текст хранится в виде последовательности литер. Необходимо отыскать в нем первое появление определенного «слова», которое можно определить как последовательность литер не длиннее самого текста.

текст: array[0..m-1] of character

слово: array[0..n-1] of character

i:=0; j:=0;

while (i < n) and (j < m – n) do

begin

i:=0;

while (i < n) and (слово[i]= текст[j+i]) do i:=i+1;

if i< n then j:= j+1;

end

Утверждения

Инвариант цикла

Обозначения:

Текст – D, длина текста - M

Слово – K, длина слова - N

[диапазоны для i и j]

[все подпоследовательности D до j-ой  K

нет в D подпоследовательностей, равных K

[подпоследовательность D, начинающаяся с j, равна K до позиции i-1]

PETER_PIPER_PICKER_A_PECK

  • P ICK

P ICK

Буква Расстояние

A 4

B 4

C 1

D 4